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)

官网:https://scikit-learn.org/stable/user_guide.html

   这里只是简单了解,没有深入学习(比如这些向量值跟那些因素有关,怎么算的向量值),不学习就是个黑盒子,以后单独学习吧。

       再次感慨下,Python这里就3行代码,比Java省了很多代码,哎,咋就没有Java的大神来整一套sklearn呢。假设你在小公司,没有专门的AI团队。要做类似的TF-IDF这种需求。两天写出来效果还是个问号。

至此,已经做了特征提取的过程(词频的特征),除了TFIDF还可以做其他的特征提取如:词性的特征、 n-gram。

训练

接下来就是训练的过程,我们使用逻辑回归,先看下sklearn官网上关于逻辑回顾的参数介绍。

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

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就是可以理解为\frac{1}{\lambda }. C有列出来那么多值可以选择,我们要选择最好的一项,就是交叉验证的过程。

lr.fit(X_train, y_train).score(X_test, y_test) #测试数据的准确率

GridSearchCV 开始做交叉验证。

混淆矩阵

还有混淆矩阵,上课没讲,多分类问题,每个分类器越大越好

可以找到不大的分类,再去想办法找特征优化,这个图上第一个分类98 就不太好。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值