NLP学习笔记25-情绪识别实战及数据集下载
一 序
本文属于贪心NLP训练营学习笔记系列。
这节课在线性回归及正则里面穿插的讲。对于从逻辑回归开始明显感到主要就是 讲数学公式的推导了。好难。
二 情绪识别实战
Python吧就是看了点语法,所以本节课的内容我是对照李文哲老师的再本地敲了一边代码。
2.1 数据准备:ISEAR.csv
2.2 读取
第一段就是导入 pandas,numpy. 第二段就是读取数据集ISEAR.csv. 这个数据
model_selection主要提供 交叉验证 和 结果评估 的工具
#本段:数据准备 from sklearn.model_selection import train_test_split #随机地将样本集合分为训练集和测试集 labels = data[0].values.tolist() # 标签 sents = data[1].values.tolist() # 句子 # 将数据随机分成80%的训练数据和20%的测试数据 X_train, X_test, y_train, y_test = train_test_split(sents, labels, test_size=0.2, random_state=42)
X_train 代表的是训练数据文本,y_train代表的是训练数据标签。X_test 是测试数据的文本,y_test是测试数据标签。
如果运行出现no module named sklean的原因是,没有正确安装sklean包 我用直接安装:pip3 install scikit-learn 出现网络错误。 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=files.pythonhosted.org, port=443): Read timed out. 加个清华的镜像就快多了。
提取特征
from sklearn.feature_extraction.text import TfidfVectorizer # TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵 vectorizer = TfidfVectorizer() X_train = vectorizer.fit_transform(X_train)# 训练数据转换 X_test = vectorizer.transform(X_test) #测试数据转换
当然fit_transform更进一步将输入的训练集转换成了VSM矩阵形式。transform函数用于对测试文本进行向量化表示。
注意区别,暂时理解fit_transform比transform多了fit(训练过程,对于测试数据不能用fit_transform)
官网:
这里只是简单了解,没有深入学习(比如这些向量值跟那些因素有关,怎么算的向量值),不学习就是个黑盒子,以后单独学习吧。 再次感慨下,Python这里就3行代码,比Java省了很多代码,哎,咋就没有Java的大神来整一套sklearn呢。假设你在小公司,没有专门的AI团队。要做类似的TF-IDF这种需求。两天写出来效果还是个问号。
至此,已经做了特征提取的过程(词频的特征),除了TFIDF还可以做其他的特征提取如:词性的特征、 n-gram。
训练
接下来就是训练的过程,我们使用逻辑回归,先看下sklearn官网上关于逻辑回顾的参数介绍。
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import GridSearchCV # 屏蔽警告信息 import warnings warnings.filterwarnings("ignore") # 此处C对应正则表达式λ的值, 是λ分之一 parameters = {C:[0.00001, 0.0001, 0.001, 0.005,0.01,0.05, 0.1, 0.5,1,2,5,10]} lr = LogisticRegression() #构建逻辑回归模型 lr.fit(X_train, y_train).score(X_test, y_test) # GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。 # 但是这个方法适合于小数据集 clf = GridSearchCV(lr, parameters, cv=10) clf.fit(X_train, y_train) clf.score(X_test, y_test) print (clf.best_params_)
结合之前课程上讲过的逻辑回归的目标函数,这个C就是可以理解为. C有列出来那么多值可以选择,我们要选择最好的一项,就是交叉验证的过程。
lr.fit(X_train, y_train).score(X_test, y_test) #测试数据的准确率
GridSearchCV 开始做交叉验证。
混淆矩阵
还有混淆矩阵,上课没讲,多分类问题,每个分类器越大越好
可以找到不大的分类,再去想办法找特征优化,这个图上第一个分类98 就不太好。