标签:
Scikit-learn CountVectorizer 与 TfidfVectorizer
Scikit-learn CountVectorizer 与 TfidfVectorizer
在文本分类问题中,我们通常进行特征提取,这时,我们需要利用到要介绍的工具,或者其他工具。文本的特征提取特别重要,体现这个系统做的好坏,分类的准确性,文本的特征需要自己构建,常用的有 n-gram 模型
,ti-idf 模型
。但是这些模型共同的特点就是太稀疏了。一般情况下需要 降维
,比如 SVD
,其实很多模型也可以用来进行特征选择比如 决策树
,L1 正则
也可以用来进行特征选择,具体原理这里就不讲了。sklearn
这个强大的工具帮我们实现了很多算法,超级好用。
CountVectorizer 与 TfidfVectorizer,这两个类都是特征数值计算的常见方法。对于每一个训练文本,CountVectorizer 只考虑每种词汇在该训练文本中出现的频率,而TfidfVectorizer 除了考量某一词汇在当前训练文本中出现的频率之外,同时关注包含这个词汇的其它训练文本数目的倒数。相比之下,训练文本的数量越多,TfidfVectorizer 这种特征量化方式就更有优势。
CountVectorizer
例:
#python2.7 sklearn version 0.18.1
from sklearn.feature_extraction.text import CountVectorizer
X_test = ['I sed about sed the lack',
'of any Actually']
count_vec=CountVectorizer(stop_words=None)
print count_vec.fit_transform(X_test).toarray()
print '\nvocabulary list:\n\n',count_vec.vocabulary_
>>
>>
[[1 0 0 1 1 0 2 1]
[0 1 1 0 0 1 0 0]]
(0, 4) 1
(0, 7) 1
(0, 0) 1
(0, 6) 2
(0, 3) 1
(1, 1) 1
(1, 2) 1
(1, 5) 1
vocabulary list:
{u'about': 0, u'i': 3, u'of': 5, u'lack': 4, u'actually': 1, u'sed': 6, u'the': 7, u'any': 2}
TfidfVectorizer
tf-idf
首先介绍一下如何计算tf-idf,并且需要明确的是tf-idf=tf*idf,也就是说tf与idf分别是两个不同的东西。其中tf为谋个训练文本中,某个词的出现次数,即词频(Term Frequency);idf为逆文档频率(Inverse Document Frequency),对于词频的权重调整系数。
其中:
\begin{align*}
词频(TF)=某个词在文章中的出现次数
\end{align*}
考虑到文章有长短之分,为了便于不同文章的比较,进行”词频”标准化。
\begin{align*}
词频(TF)=\frac{某个词在文章中的出现次数}{文章的总词数}
\end{align*}
或者
\begin{align*}
词频(TF)=\frac{某个词在文章中的出现次数}{该训练文本中出现最多次的词数}
\end{align*}
\begin{align*}
词频(TF)=\frac{某个词在文章中的出现次数}{文章的总词数}\[1ex]
或者\[1ex]
词频(TF)=\frac{某个词在文章中的出现次数}{该训练文本中出现最多次的词数}
\end{align*}
逆文档频率(IDF)=log(总样本数包含有该词的文档数+1)
标签: 来源: https://blog.csdn.net/qq_27114397/article/details/82946984
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。