我正在使用scikit-learn进行问题分类。我有这样的代码:
print(features[0], 'n')
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,
stop_words='english')
features = vectorizer.fit_transform(features)
print(features[0], 'n')
selector = SelectPercentile(f_classif, percentile=100)
selector.fit(features, labels)
features = selector.transform(features).toarray()
print(features[0])
print(len(features[0]), 'n')
生成如下结果:
how serfdom develop leav russia ?
(0, 5270) 0.499265751002
(0, 3555) 0.473352969263
(0, 1856) 0.449852125968
(0, 5433) 0.569476725713
[ 0. 0. 0. ..., 0. 0. 0.]
6743
第一个问题是tfidfVectorizer返回的矩阵是什么意思?sklearn文档说:
学习词汇和idf,返回术语-文档矩阵。这相当于fit后跟transform,但实现起来更有效。
来自维基百科:
显示哪些文档包含哪些术语以及它们出现的次数。
维基百科的矩阵示例很简单,但返回值似乎完全不同。
接下来,SelectPercentile函数应该返回一个最重要的特征列表,取决于给定的百分比:
将X缩减为选定的特征。
为什么我得到6743个特性?: D
注::这个程序似乎可以达到89%的准确率。
编辑:我是python和机器学习的新手,所以请像我五岁一样解释一下。
我们的计算机处理数字(它们唯一能理解的语言)。因此,为了处理/分析文本,我们需要一种将文本转换为数字的方法。TfIdf (term frequency - inverse document frequency)就是这种方法之一。
"Term frequency"(Tf)根据一个词在文档中的出现频率来表示该词在文档中的重要性。但这也有可能,一些在语义上很重要的单词频率很低。为了解决这个问题,我们使用"逆文档频率"(Idf)。
如果你参考下面的链接,这将更有帮助,它详细解释了整个Tf-Idf:
https://janav.wordpress.com/2013/10/27/tf-idf-and-cosine-similarity/