博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
达观数据比赛 第四天任务
阅读量:4089 次
发布时间:2019-05-25

本文共 2597 字,大约阅读时间需要 8 分钟。

在学习完nlp预处理TF-IDF和Word2Vec之后,终于要进入模型的学习和使用啦。

【任务 3.1】LR+SVM 时常: 2天

使用下面模型对数据进行分类(包括:模型构建&调参&性能评估),并截图F1评分的结果。

1)逻辑回归(LR)模型,学习理论并用Task2的特征实践

2)支持向量机(SVM) 模型,学习理论并用Task2的特征实践

 

首先我们来了解一下逻辑回归(Logistic Regression)。逻辑回归不是回归,是用来解决分类任务的。二分类问题的概率与自变量之间的关系图形往往是一个S型曲线,如下图所示,采用的Sigmoid函数实现。

                                                          

这里我们可以定义函数为:

                                                                                 

函数的定义域为全体实数,值域在[0,1]之间,x轴在0点对应的结果为0.5。当x取值足够大的时候,可以看成0或1两类问题,大于0.5可以认为是1类问题,反之是0类问题,而刚好是0.5,则可以划分至0类或1类。由此可见,我们可以使用逻辑回归来解决二分了问题。

但是我们的数据是多分类的,1-19 共19种label。为了适应我们的label,我们需要将逻辑回归扩展到多分类上。因此,让其适应多分类问题,损失函数就不能再笼统地只考虑二分类非1就0的损失,而是具体考虑每个样本标记的损失。这种方法叫做softmax回归,即使用softmax来实现logistic回归的多分类版本。更深入的理解,详见参考文献。

 

接下来我们简单地了解SVM支持向量机。SVM是一个大的概念,可以用于分类和回归任务。SVC是SVM的一种类型,用于分类任务;而SVR是另外一种类型,用于回归任务。详细的公式见下图,需要一定的数学基础:

                                                                  

逻辑回归和SVM都是在数据挖掘及机器学习中非常常用的模型方法,在Python中都已经得到很好地封装,只需要简单地调用就好,方法中有不少的参数,还需要进一步的学习。详见参考文献。

 

接下来介绍一下,模型的评估方法F1-Score。F1方法是结合了Precision和Recall评估的一种较好的模型评估方法。可以更加客观地反映出模型的性能。F1公式如下所示:

 

                                                                        

当β=1时,称为F1-score,这时,精确率和召回率都很重要,权重相同。当有些情况下,我们认为精确率更重要些,那就调整β的值小于1,如果我们认为召回率更重要些,那就调整β的值大于1。

举个例子:癌症检查数据样本有10000个,其中10个数据祥本是有癌症,其它是无癌症。假设分类模型在无癌症数据9990中预测正确了9980个,在10个癌症数据中预测正确了9个,此时真阳=9,真阴=9980,假阳=10,假阴=1。其实,在这个场景里,我们会比较关心地是癌症患者到底有没有预测准确,因为将一个癌症患者预测为无癌症,本身是一件非常危险的事情,会耽误患者宝贵的治疗时间。根据公式,我们可以得出: 

Accuracy = (9+9980) /10000=99.89% 
Precision=9/19+10)= 47.36% 
F1-score=2×(47.36% × 90%)/(1×47.36%+90%)=62.07% 
最后,我们贴出代码,供大家参考学习,有问题欢迎留言,会及时回复。

import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_extraction.text import TfidfVectorizerimport gensimimport timeimport pickleimport numpy as npimport csv,sysfrom sklearn import svmfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_scorefrom sklearn.linear_model import LogisticRegression# read datadf = pd.read_csv('data/train_set.csv', nrows=5000)df.drop(columns='article', inplace=True)# # observe data# print(df['class'].value_counts(normalize=True, ascending=False))# TF-IDFvectorizer = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, sublinear_tf=True)vectorizer.fit(df['word_seg'])x_train = vectorizer.transform(df['word_seg'])# split training set and validation setpredictor = ['word_seg']x_train, x_validation, y_train, y_validation = train_test_split(x_train, df['class'], test_size=0.2)clf = svm.LinearSVC(C=5, dual=False)clf = LogisticRegression(C=120, dual=True)clf.fit(x_train, y_train)y_prediction = clf.predict(x_validation)label = []for i in range(1, 20):    label.append(i)f1 = f1_score(y_validation, y_prediction, labels=label, average='micro')print('The F1 Score: ' + str("%.2f" % f1))

LR模型结果:

SVM模型结果:

 

参考文献:

1. CSDN  

2. 博客园 Google-Boy 

3. sklearn.svm 官方文档 

4. sklearn.linear_model 官方文档 

5. CSDN  

转载地址:http://yluii.baihongyu.com/

你可能感兴趣的文章
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>