机器学习之路:python 文本特征提取 CountVectorizer, TfidfVectorizer
本特征提取:
将文本数据转化成特征向量的过程
比较常用的文本特征表示法为词袋法
词袋法:
不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征
这些不重复的特征词汇集合为词表
每一个文本都可以在很长的词表上统计出一个很多列的特征向量
如果每个文本都出现的词汇,一般被标记为 停用词 不计入特征向量 主要有两个api来实现 CountVectorizer 和 TfidfVectorizer
CountVectorizer:
只考虑词汇在文本中出现的频率
TfidfVectorizer:
除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量
能够削减高频没有意义的词汇出现带来的影响, 挖掘更有意义的特征 相比之下,文本条目越多,Tfid的效果会越显著 下面对两种提取特征的方法,分别设置停用词和不停用,
使用朴素贝叶斯进行分类预测,比较评估效果
python3 学习api的使用
源代码git: https://github.com/linyi0604/MachineLearning
代码:
from sklearn.datasets import fetch_20newsgroups
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report '''
文本特征提取:
将文本数据转化成特征向量的过程
比较常用的文本特征表示法为词袋法
词袋法:
不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征
这些不重复的特征词汇集合为词表
每一个文本都可以在很长的词表上统计出一个很多列的特征向量
如果每个文本都出现的词汇,一般被标记为 停用词 不计入特征向量 主要有两个api来实现 CountVectorizer 和 TfidfVectorizer
CountVectorizer:
只考虑词汇在文本中出现的频率
TfidfVectorizer:
除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量
能够削减高频没有意义的词汇出现带来的影响, 挖掘更有意义的特征 相比之下,文本条目越多,Tfid的效果会越显著 下面对两种提取特征的方法,分别设置停用词和不停用,
使用朴素贝叶斯进行分类预测,比较评估效果 ''' # 1 下载新闻数据
news = fetch_20newsgroups(subset="all") # 2 分割训练数据和测试数据
x_train, x_test, y_train, y_test = train_test_split(news.data,
news.target,
test_size=0.25,
random_state=33) # 3.1 采用普通统计CountVectorizer提取特征向量
# 默认配置不去除停用词
count_vec = CountVectorizer()
x_count_train = count_vec.fit_transform(x_train)
x_count_test = count_vec.transform(x_test)
# 去除停用词
count_stop_vec = CountVectorizer(analyzer='word', stop_words='english')
x_count_stop_train = count_stop_vec.fit_transform(x_train)
x_count_stop_test = count_stop_vec.transform(x_test) # 3.2 采用TfidfVectorizer提取文本特征向量
# 默认配置不去除停用词
tfid_vec = TfidfVectorizer()
x_tfid_train = tfid_vec.fit_transform(x_train)
x_tfid_test = tfid_vec.transform(x_test)
# 去除停用词
tfid_stop_vec = TfidfVectorizer(analyzer='word', stop_words='english')
x_tfid_stop_train = tfid_stop_vec.fit_transform(x_train)
x_tfid_stop_test = tfid_stop_vec.transform(x_test) # 4 使用朴素贝叶斯分类器 分别对两种提取出来的特征值进行学习和预测
# 对普通通统计CountVectorizer提取特征向量 学习和预测
mnb_count = MultinomialNB()
mnb_count.fit(x_count_train, y_train) # 学习
mnb_count_y_predict = mnb_count.predict(x_count_test) # 预测
# 去除停用词
mnb_count_stop = MultinomialNB()
mnb_count_stop.fit(x_count_stop_train, y_train) # 学习
mnb_count_stop_y_predict = mnb_count_stop.predict(x_count_stop_test) # 预测 # 对TfidfVectorizer提取文本特征向量 学习和预测
mnb_tfid = MultinomialNB()
mnb_tfid.fit(x_tfid_train, y_train)
mnb_tfid_y_predict = mnb_tfid.predict(x_tfid_test)
# 去除停用词
mnb_tfid_stop = MultinomialNB()
mnb_tfid_stop.fit(x_tfid_stop_train, y_train) # 学习
mnb_tfid_stop_y_predict = mnb_tfid_stop.predict(x_tfid_stop_test) # 预测 # 5 模型评估
# 对普通统计CountVectorizer提取的特征学习模型进行评估
print("未去除停用词的CountVectorizer提取的特征学习模型准确率:", mnb_count.score(x_count_test, y_test))
print("更加详细的评估指标:\n", classification_report(mnb_count_y_predict, y_test))
print("去除停用词的CountVectorizer提取的特征学习模型准确率:", mnb_count_stop.score(x_count_stop_test, y_test))
print("更加详细的评估指标:\n", classification_report(mnb_count_stop_y_predict, y_test)) # 对TfidVectorizer提取的特征学习模型进行评估
print("TfidVectorizer提取的特征学习模型准确率:", mnb_tfid.score(x_tfid_test, y_test))
print("更加详细的评估指标:\n", classification_report(mnb_tfid_y_predict, y_test))
print("去除停用词的TfidVectorizer提取的特征学习模型准确率:", mnb_tfid_stop.score(x_tfid_stop_test, y_test))
print("更加详细的评估指标:\n", classification_report(mnb_tfid_stop_y_predict, y_test)) '''
未去除停用词的CountVectorizer提取的特征学习模型准确率: 0.8397707979626485
更加详细的评估指标:
precision recall f1-score support 0 0.86 0.86 0.86 201
1 0.86 0.59 0.70 365
2 0.10 0.89 0.17 27
3 0.88 0.60 0.72 350
4 0.78 0.93 0.85 204
5 0.84 0.82 0.83 271
6 0.70 0.91 0.79 197
7 0.89 0.89 0.89 239
8 0.92 0.98 0.95 257
9 0.91 0.98 0.95 233
10 0.99 0.93 0.96 248
11 0.98 0.86 0.91 272
12 0.88 0.85 0.86 259
13 0.94 0.92 0.93 252
14 0.96 0.89 0.92 239
15 0.96 0.78 0.86 285
16 0.96 0.88 0.92 272
17 0.98 0.90 0.94 252
18 0.89 0.79 0.84 214
19 0.44 0.93 0.60 75 avg / total 0.89 0.84 0.86 4712 去除停用词的CountVectorizer提取的特征学习模型准确率: 0.8637521222410866
更加详细的评估指标:
precision recall f1-score support 0 0.89 0.85 0.87 210
1 0.88 0.62 0.73 352
2 0.22 0.93 0.36 59
3 0.88 0.62 0.73 341
4 0.85 0.93 0.89 222
5 0.85 0.82 0.84 273
6 0.79 0.90 0.84 226
7 0.91 0.91 0.91 239
8 0.94 0.98 0.96 264
9 0.92 0.98 0.95 236
10 0.99 0.92 0.95 251
11 0.97 0.91 0.93 254
12 0.89 0.87 0.88 254
13 0.95 0.94 0.95 248
14 0.96 0.91 0.93 233
15 0.94 0.87 0.90 250
16 0.96 0.89 0.93 271
17 0.98 0.95 0.97 238
18 0.90 0.84 0.87 200
19 0.53 0.91 0.67 91 avg / total 0.90 0.86 0.87 4712 TfidVectorizer提取的特征学习模型准确率: 0.8463497453310697
更加详细的评估指标:
precision recall f1-score support 0 0.67 0.84 0.75 160
1 0.74 0.85 0.79 218
2 0.85 0.82 0.83 256
3 0.88 0.76 0.82 275
4 0.84 0.94 0.89 217
5 0.84 0.96 0.89 229
6 0.69 0.93 0.79 192
7 0.92 0.84 0.88 259
8 0.92 0.98 0.95 259
9 0.91 0.96 0.94 238
10 0.99 0.88 0.93 264
11 0.98 0.73 0.83 321
12 0.83 0.91 0.87 226
13 0.92 0.97 0.95 231
14 0.96 0.89 0.93 239
15 0.97 0.51 0.67 443
16 0.96 0.83 0.89 293
17 0.97 0.92 0.95 245
18 0.62 0.98 0.76 119
19 0.16 0.93 0.28 28 avg / total 0.88 0.85 0.85 4712 去除停用词的TfidVectorizer提取的特征学习模型准确率: 0.8826400679117148
更加详细的评估指标:
precision recall f1-score support 0 0.81 0.86 0.83 190
1 0.81 0.85 0.83 238
2 0.87 0.84 0.86 257
3 0.88 0.78 0.83 269
4 0.90 0.92 0.91 235
5 0.88 0.95 0.91 243
6 0.80 0.90 0.85 230
7 0.92 0.89 0.90 244
8 0.94 0.98 0.96 265
9 0.93 0.97 0.95 242
10 0.99 0.88 0.93 264
11 0.98 0.85 0.91 273
12 0.86 0.93 0.89 231
13 0.93 0.96 0.95 237
14 0.97 0.90 0.93 239
15 0.96 0.70 0.81 320
16 0.98 0.84 0.90 294
17 0.99 0.92 0.95 248
18 0.74 0.97 0.84 145
19 0.29 0.96 0.45 48 avg / total 0.90 0.88 0.89 4712
'''
机器学习之路:python 文本特征提取 CountVectorizer, TfidfVectorizer的更多相关文章
- python 文本特征提取 CountVectorizer, TfidfVectorizer
1. TF-IDF概述 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评 ...
- python —— 文本特征提取 CountVectorize
CountVectorize 来自:python学习 文本特征提取(二) CountVectorizer TfidfVectorizer 中文处理 - CSDN博客 https://blog.csdn ...
- 机器学习之路: python k近邻分类器 KNeighborsClassifier 鸢尾花分类预测
使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/MachineLearning from sklearn.da ...
- 机器学习之路--Python
常用数据结构 1.list 列表 有序集合 classmates = ['Michael', 'Bob', 'Tracy'] len(classmates) classmates[0] len(cla ...
- 机器学习之路: python 回归树 DecisionTreeRegressor 预测波士顿房价
python3 学习api的使用 git: https://github.com/linyi0604/MachineLearning 代码: from sklearn.datasets import ...
- 机器学习之路: python 线性回归LinearRegression, 随机参数回归SGDRegressor 预测波士顿房价
python3学习使用api 线性回归,和 随机参数回归 git: https://github.com/linyi0604/MachineLearning from sklearn.datasets ...
- 机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存
使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https: ...
- 使用sklearn做文本特征提取
提取文本的特征,把文本用特征表示出来,是文本分类的前提,使用sklearn做文本的特征提取,需要导入TfidfVectorizer模块. from sklearn.feature_extraction ...
- 机器学习之路: python nltk 文本特征提取
git: https://github.com/linyi0604/MachineLearning 分别使用词袋法和nltk自然预言处理包提供的文本特征提取 from sklearn.feature_ ...
随机推荐
- js鼠标自定移入输入框文本框光标自动定位到文本框
1.干货直接上 选中输入框设置如下: document.getElementById("Text1").focus();
- 【译】第七篇 SQL Server代理作业活动监视器
本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...
- WeX5入门之HelloWorld
学习目标:数据双向绑定 在ui2上右键 新建一个应用 然后会出现一个目录 右键hello 在创建页面 选择标准的空白模板 并起一个名 自动生成这两个文件 建立一个input组件 再建一个output组 ...
- Strusts2笔记8--文件的上传和下载
文件的和上传和下载: (1)文件的上传: Struts是通过拦截器实现文件上传的,而默认拦截器栈中包含了文件上传拦截器,故表单通过Struts2可直接将文件上传,其底层是通过apache的common ...
- 更改arch的默认终端
实在是厌倦了gnome的资源管理器nautilus和终端gnome-terminal,于是卸载之,然后更换了xfce4的终端,但是出现了一个问题,那就是在资源管理器中使用邮件打开终端的时候打不开了,解 ...
- 【转】GridView 加载空行并点击编辑每一个单元格
代码 <script runat="server"> protectedvoid Button1_Click(object sender, System.EventAr ...
- C 数据结构堆
引言 - 数据结构堆 堆结构都很耳熟, 从堆排序到优先级队列, 我们总会看见它的身影. 相关的资料太多了, 堆 - https://zh.wikipedia.org/wiki/%E5%A0%86%E7 ...
- MongoDB安全:所有操作(Privilege Actions)
本文展示了两张思维导图,分别是MongoDB 3.6.4.0的所有权限操作,未做深入研究,仅仅是列出来. 3.6总共9类105个操作,4.0版本比3.6多了两类操作,同时增加了3个操作,共11类108 ...
- GBDT+LR simple例子
卧槽,本来猜GBDT获取的组合特征,需要自己去解析GBDT的树,scikit learn里面竟然直接调用apply函数就可以了 # 弱分类器的数目 n_estimator = 10 # 随机生成分类数 ...
- sql server 2000系统表sysproperties在SQL 2008中无效的问题
Sqlserver有一个扩展属性系统表sysproperties,因为只接触过MSSQL2005及以后的版本,在生产库2008版本及联机文档上搜了下都找不到这个系统表,后来发现这个系统表在2005版本 ...