基于sklearn的文本特征抽取

作者: 月见樽 | 来源:发表于2018-01-06 15:27 被阅读545次

理论

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

结构化数据

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

非结构化数据

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

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

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

代码实现

导入数据集

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
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))
14134 4712

特征提取

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

count vectorizer

c_vec = CountVectorizer()
x_count_train = c_vec.fit_transform(x_train)
x_count_test = c_vec.transform(x_test)

count vectorizer+去除停用词

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

t_vec = TfidfVectorizer()
x_tfidf_train = t_vec.fit_transform(x_train)
x_tfidf_test = t_vec.transform(x_test)

tfidf vectorizer+去除停用词

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)

模型训练

from sklearn.naive_bayes import MultinomialNB

count vectorizer

nb_c = MultinomialNB()
nb_c.fit(x_count_train,y_train)
nb_c.score(x_count_test,y_test)
0.83977079796264853

count vectorizer+去除停用词

nb_cs = MultinomialNB()
nb_cs.fit(x_count_stop_train,y_train)
nb_cs.score(x_count_stop_test,y_test)
0.86375212224108655

tfidf vectorizer

nb_t = MultinomialNB()
nb_t.fit(x_tfidf_train,y_train)
nb_t.score(x_tfidf_test,y_test)
0.84634974533106966

tfidf vectorizer+去除停用词

nb_ts = MultinomialNB()
nb_ts.fit(x_tfidf_stop_train,y_train)
nb_ts.score(x_tfidf_stop_test,y_test)
0.88264006791171479

相关文章

  • 基于sklearn的文本特征抽取

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

  • sklearn学习 — 特征抽取

    特征抽取 sklearn库提供了特征抽取模块 sklearn.feature_extraction 对数据进行特征...

  • 文件特征抽取 — TF-IDF算法

    文件特征抽取 作用:对文本数据进行特征值化 类:sklearn.feature_extraction.text.C...

  • scikit-learn特征工程

    字典数据特征抽取 sklearn的DictVectorizer可以对字典做特征抽取,并以onehot形式编码。 有...

  • 五、特征工程

    1 字典特征抽取 字典数据抽取:把字典中一些类别的数据分别进行转换成特征。用到的代码是sklearn.featur...

  • 怎样把文档转换成向量

    文本分析 文本分析指从文本中抽取出的特征来量化来表示文本信息,并在此基础上对其进行基于数学模型的处理。它是文本挖掘...

  • 06 特征抽取

    1数据的特征抽取 数据的特征抽取:将文本等数据进行特征值化(转换成计算机可以理解的数字类型) DictVector...

  • CountVector基础功能的复现

    sklearn.feature_extraction.text 中有4种文本特征提取方法: CountVector...

  • 基于sklearn的特征筛选

    理论 特征筛选的作用 样本中的有些特征是所谓的“优秀特征”,使用这些特征可以显著的提高泛化能力。而有些特征在样本类...

  • 特征抽取:特征字典向量化和特征哈希变换

    sklearn.feature_extaction模块提供了从原始数据如文本,图像等中抽取能够被机器学习算法直接处...

网友评论

    本文标题:基于sklearn的文本特征抽取

    本文链接:https://www.haomeiwen.com/subject/fvuynxtx.html