快捷搜索: 王者荣耀 脱发

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 就不太好。

经验分享 程序员 微信小程序 职场和发展