前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于sklearn的文本特征抽取理论代码实现

基于sklearn的文本特征抽取理论代码实现

作者头像
月见樽
发布2018-04-27 12:06:46
7650
发布2018-04-27 12:06:46
举报

理论

机器学习的样本一般都是特征向量,但是除了特征向量以外经常有非特征化的数据,最常见的就是文本

结构化数据

当某个特征为有限的几个字符串时,可以看成一种结构化数据,处理这种特征的方法一般是将其转为独热码的几个特征。例如仅能取三个字符串的特征:a,b,c,可以将其转换为001,010,100的三个特征和

非结构化数据

当特征仅是一系列字符串时,可以使用词袋法处理,这种方法不考虑词汇顺序,仅考虑出现的频率

  • count vectorizer:仅考虑每种词汇出现的频率
  • tfidf vectorizer:除了考虑词汇出现的频率,还考虑词汇在样本总体中出现频率的倒数,可以理解为抑制每个样本中都经常出现的词汇

对于经常出现的无意义词汇,如the和a等,可以将其指定为停用词消除其对于结果的干扰

代码实现

导入数据集

代码语言:javascript
复制
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
代码语言:javascript
复制
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33)
print(len(x_train),len(x_test))
代码语言:javascript
复制
14134 4712

特征提取

代码语言:javascript
复制
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

count vectorizer

代码语言:javascript
复制
c_vec = CountVectorizer()
x_count_train = c_vec.fit_transform(x_train)
x_count_test = c_vec.transform(x_test)

count vectorizer+去除停用词

代码语言:javascript
复制
c_vec_s = CountVectorizer(analyzer='word',stop_words='english')
x_count_stop_train = c_vec_s.fit_transform(x_train)
x_count_stop_test = c_vec_s.transform(x_test)

tfidf vectorizer

代码语言:javascript
复制
t_vec = TfidfVectorizer()
x_tfidf_train = t_vec.fit_transform(x_train)
x_tfidf_test = t_vec.transform(x_test)

tfidf vectorizer+去除停用词

代码语言:javascript
复制
t_vec_s = TfidfVectorizer(analyzer='word',stop_words='english')
x_tfidf_stop_train = t_vec_s.fit_transform(x_train)
x_tfidf_stop_test = t_vec_s.transform(x_test)

模型训练

代码语言:javascript
复制
from sklearn.naive_bayes import MultinomialNB

count vectorizer

代码语言:javascript
复制
nb_c = MultinomialNB()
nb_c.fit(x_count_train,y_train)
nb_c.score(x_count_test,y_test)
代码语言:javascript
复制
0.83977079796264853

count vectorizer+去除停用词

代码语言:javascript
复制
nb_cs = MultinomialNB()
nb_cs.fit(x_count_stop_train,y_train)
nb_cs.score(x_count_stop_test,y_test)
代码语言:javascript
复制
0.86375212224108655

tfidf vectorizer

代码语言:javascript
复制
nb_t = MultinomialNB()
nb_t.fit(x_tfidf_train,y_train)
nb_t.score(x_tfidf_test,y_test)
代码语言:javascript
复制
0.84634974533106966

tfidf vectorizer+去除停用词

代码语言:javascript
复制
nb_ts = MultinomialNB()
nb_ts.fit(x_tfidf_stop_train,y_train)
nb_ts.score(x_tfidf_stop_test,y_test)
代码语言:javascript
复制
0.88264006791171479
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 理论
    • 结构化数据
      • 非结构化数据
      • 代码实现
        • 导入数据集
          • 特征提取
            • count vectorizer
            • count vectorizer+去除停用词
            • tfidf vectorizer
            • tfidf vectorizer+去除停用词
          • 模型训练
            • count vectorizer
            • count vectorizer+去除停用词
            • tfidf vectorizer
            • tfidf vectorizer+去除停用词
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档