内容:

使用下面模型对数据进行分类(包括:模型构建&调参&性能评估),并截图F1评分的结果
1)逻辑回归(LR)模型,学习理论并用于特征实践
2)支持向量机(SVM) 模型,学习理论并用于特征实践

1. 逻辑回归(LR)模型

逻辑回归也被称为对数几率回归,算法名虽然叫做逻辑回归,但是该算法是分类算法,个人认为这是因为逻辑回归用了和回归类似的方法来解决了分类问题。

逻辑回归模型是一种分类模型,用条件概率分布的形式表示 P(Y|X)P(Y|X),这里随机变量 X 取值为 n 维实数向量,例如x=(x(1),x(2),…,x(n))x=(x(1),x(2),…,x(n)),Y 取值为 0 或 1。即:



上式被称为sigmoid函数,其函数图像如下:

我们可以看到,sigmoid函数的取值范围为[0,1]。相应地,g(z)的值有着特殊含义,它表示对于输入x分类结果为类别1和类别0的概率。
代码实现:


print ("----------程序开始运行!!!------------")
import pickle
import pandas as pd
import time
from sklearn.externals import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import  train_test_split
time_start = time.time()
"""====================================================================================================================
0 读取特征
"""
print("0 读取特征")
data_fp = open( "data_w_tfidf.pkl", 'rb')
x_train, y_train, x_test = pickle.load(data_fp)xTrain, xTest, yTrain, yTest = train_test_split(x_train, y_train, test_size=0.30, random_state=531)
"""=====================================================================================================================
1 模型训练
"""
print("模型训练")
lr = LogisticRegression(C=120,dual=True)
lr.fit(x_train,y_train)
"""=====================================================================================================================
2 保存模型
"""
print('2 保存模型')
joblib.dump(lr,"LR(120)_data_w_tfidf.m")
"""=====================================================================================================================
3 预测结果
"""
print("预测结果")
y_test = lr.predict(x_test)
"""=====================================================================================================================
4 保存结果
"""
print("保存结果")
y_test = [i+1 for i in y_test.tolist()]
df_result = pd.DataFrame({'id':range(5000),'class':y_test})
df_result.to_csv('LR(c120)_data_w_tfidf.csv',index=False)
time_end = time.time()
print('共耗时:{:.2f}min'.format((time_end-time_start)/60))


2. 支持向量机(SVM)模型

SVM中最关键的思想之一就是引入和定义了“间隔”这个概念。这个概念本身很简单,以二维空间为例,就是点到分类直线之间的距离。假设直线为y=wx+b,那么只要使所有正分类点到该直线的距离与所有负分类点到该直线的距离的总和达到最大,这条直线就是最优分类直线。这样,原问题就转化为一个约束优化问题,可以直接求解。这叫做硬间隔最大化,得到的SVM模型称作硬间隔支持向量机。

在实际应用中,我们得到的数据并不总是完美的线性可分的,其中可能会有个别噪声点,他们错误的被分类到了其他类中。如果将这些特异的噪点去除后,可以很容易的线性可分。但是,我们对于数据集中哪些是噪声点却是不知道的,如果以之前的方法进行求解,会无法进行线性分开。是不是就没办法了呢?假设在y=x+1直线上下分为两类,若两类中各有对方的几个噪点,在人的眼中,仍然是可以将两类分开的。这是因为在人脑中是可以容忍一定的误差的,仍然使用y=x+1直线分类,可以在最小误差的情况下进行最优的分类。

同样的道理,我们在SVM中引入误差的概念,将其称作“松弛变量”。通过加入松弛变量,在原距离函数中需要加入新的松弛变量带来的误差,这样,最终的优化目标函数变成了两个部分组成:距离函数和松弛变量误差。这两个部分的重要程度并不是相等的,而是需要依据具体问题而定的,因此,我们加入权重参数C,将其与目标函数中的松弛变量误差相乘,这样,就可以通过调整C来对二者的系数进行调和。如果我们能够容忍噪声,那就把C调小,让他的权重降下来,从而变得不重要;反之,我们需要很严格的噪声小的模型,则将C调大一点,权重提升上去,变得更加重要。通过对参数C的调整,可以对模型进行控制。这叫做软间隔最大化,得到的SVM称作软间隔支持向量机。

SVM最基本的应用是分类。 求解最优的分类面,然后用于分类。

最优分类面的定义:
对于SVM,存在一个分类面,两个点集到此平面的最小距离最大,两个点集中的边缘点到此平面的距离最大。

从直观上来看,下图左边的,肯定不是最优分类面;而右边的能让人感觉到其距离更大,使用的支撑点更多,至少使用了三个分类面,应该是最优分类面。

代码实现:

print ("----------程序开始运行!!!------------")
import pickle
import pandas as pd
import time
from sklearn import svm
from sklearn.externals import joblib
from sklearn.metrics import accuracy_score
from sklearn.model_selection import  train_test_split
time_start = time.time()
"""=====================================================================================================================
0 读取特征
"""
print("0 读取特征")
data_fp = open("data_w_tfidf.pkl", 'rb')
x_train, y_train, x_test = pickle.load(data_fp)xTrain, xTest, yTrain, yTest = train_test_split(x_train, y_train, test_size=0.30, random_state=531)
"""=====================================================================================================================
1 模型训练
"""
print("1 模型训练")
# clf = joblib.load('linearsvm_model_Tfid.1.m')
clf = svm.LinearSVC(C=5,dual=False)
clf.fit(x_train,y_train)
"""=====================================================================================================================
2 保存模型
"""
print('2 保存模型')
joblib.dump(clf,"SVM(c5)_data_w_tfidf.m")
"""=====================================================================================================================
3 预测结果
"""
print("预测结果")
y_test = clf.predict(x_test)
"""=====================================================================================================================
4 保存结果
"""
print("保存结果")
y_test = [i+1 for i in y_test.tolist()]
df_result = pd.DataFrame({'id':range(5000),'class':y_test})
df_result.to_csv('SVM(c5)_data_w_tfidf.csv',index=False)time_end = time.time()
print('共耗时:{:.2f}min'.format((time_end-time_start)/60))

达观杯文本智能处理(4)相关推荐

  1. 第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...

    近日,第三届"达观杯"文本智能信息抽取挑战赛正式上线启动(点击阅读原文,跳转报名页面),6月28日至8月31日,面向所有参赛选手开放竞赛结果提交.本届"达观杯" ...

  2. 【数据竞赛】“达观杯”文本智能处理挑战赛1

    一.数据竞赛简介 "达观杯"文本智能处理挑战赛 1.任务 建立模型通过长文本数据正文(article),预测文本对应的类别(class) 2.数据 传送门:链接: https:// ...

  3. 第三届“达观杯”文本智能算法大赛参赛指南

    比赛介绍 2019 年 6 月 28 日,第三届"达观杯"文本智能信息抽取挑战赛正式开赛,同期面向参赛选手开放竞赛结果提交.本届比赛由中国人工智能学会吴文俊人工智能科学技术奖办公室 ...

  4. “达观杯”文本智能处理挑战赛代码示例

    达观杯介绍: 类似kaggle的数据科学比赛,任何人可以参加 网址:http://www.dcjingsai.com/ 可以用支付宝实名注册 项目名称: "达观杯"文本智能处理挑战 ...

  5. 达观杯”文本智能处理挑战赛

    竞赛信息 1.网址 http://www.dcjingsai.com/common/cmpt/"达观杯"文本智能处理挑战赛_竞赛信息.html 2.任务 建立模型通过长文本数据正文 ...

  6. “达观杯”文本智能处理挑战赛,季军带你飞

    来自AI小白入门 前段时间和朋友何从庆(AI算法之心)等队友一起组队参加了这个比赛,本来以为小比赛人少,没想到参加的人会有几千人.最后我们队伍取得季军(4st/3131),虽有些许遗憾,但是也很荣幸认 ...

  7. “达观杯”文本智能处理挑战赛

         (本内容转载自公众号"科技与Python") 2018年人工智能的发展在运算智能和感知智能已经取得了很大的突破和优于人类的表现.而在以理解人类语言为入口的认知智能上,目前 ...

  8. 【数据竞赛】“达观杯”文本智能处理挑战赛2

    文章目录 一.TF_IDF原理 1.TF(item frequency) 2.逆向文件频率IDF(inverse document frequency) 3.TF-IDF 二.TF-IDF算法实现 1 ...

  9. 【数据竞赛】“达观杯”文本智能处理挑战赛4

    一.逻辑回归 逻辑回归(Logistic Regression, LR)是一种常用的处理两类分类问题的线性模型. 1.概率估计 LR 模型计算输入特征的加权和(加上偏差项),之后将中间结果输入 log ...

  10. 【数据竞赛】“达观杯”文本智能处理挑战赛3

    一.语言模型 在统计自然语言处理中,语言模型指的是计算一个句子的概率模型. 传统的语言模型 词的表示是原始的.面向字符串的. 向量角度:更高维.更稀疏的向量.若词汇表大小为 NNN,每个字符串形式的词 ...

最新文章

  1. Android内存优化(三)避免可控的内存泄漏
  2. firebird 3.0 开发者指南_手机端空间级AR交互设计指南
  3. JaveWeb 公司项目(4)----- Easyui的表单验证
  4. mybatis获取表名_mybatis动态调用表名和字段名
  5. 使用程序判断一个文件是否是有效的PE文件
  6. 美图每天亿级消息存储演进——从Redis到Titan,完美解决扩容问题
  7. Mysql常用命令详解
  8. brew install php55redis,Mac下安装LNMP环境
  9. PHP生成Mysql数据字典
  10. T7-Dropout 解决 overfitting 过拟合
  11. (42)FPGA状态机二段式
  12. 想拥有高清壁纸不用那么麻烦!
  13. HDOJ1020 Encoding
  14. 计算机操作系统笔记(六)
  15. 建模matlab仿真视频教程,Simulink建模与仿真视频教程
  16. 网络流之dinic算法
  17. 使用原生js实现图片放大器效果
  18. linux命令弹出移动硬盘,usb设备(移动硬盘或U盘),弹出时提示“有进程或程序占用,无法弹出”。解决办法...
  19. 史上最详细的LXR安装介绍
  20. 如何设置vs窗口的属性管理器和解决方案管理器的位置

热门文章

  1. MySQL多线程备份工具mydumper
  2. Linux关机重启命令
  3. LightOJ 1410 Consistent Verdicts(找规律)
  4. Mysql中contact、group_concat、concat_ws、repeat
  5. Idea开发环境中搭建Maven并且使用Maven打包部署程序
  6. ios 性能优化之图形性能测试
  7. debian安装中文字体
  8. Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图
  9. 工程选择LibGdx--开发环境搭建Strut2教程-java教程
  10. 中文版Postman测试需要登陆才能访问的接口(基于Cookie)