【问题标题】:What do TfidfVectorizer and SelectPercentile return?TfidfVectorizer 和 SelectPercentile 返回什么?
【发布时间】:2017-03-28 12:21:21
【问题描述】:

我正在使用 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,返回术语-文档矩阵。 这相当于先拟合后变换,但实现效率更高。

来自维基百科:

显示哪些文档包含哪些术语以及它们出现的次数。

矩阵的维基百科示例很简单,但返回的值似乎完全不同。

接下来,SelectPercentile 函数应返回最重要的特征列表,具体取决于给定的百分比:

将 X 减少到选定的特征。

为什么我会获得 6743 个功能? :D

P.S.:该程序似乎以 89% 的准确率运行。

编辑:我是 python 和机器学习的新手,所以请像我五岁一样解释它。

【问题讨论】:

标签: python machine-learning scikit-learn tf-idf feature-selection


【解决方案1】:

我们的计算机处理数字(他们理解的唯一语言)。 因此,为了处理/分析我们的文本,我们需要一种将文本转换为数字的方法。 TfIdf(词频-逆文档频率)就是这样一种方法。

“词频”(Tf)根据单词在文档中的频率来判断单词在文档中的重要性。但这可能是语义上非常重要的几个词的频率较低。为了解决这个问题,我们使用“逆文档频率”(Idf)。

如果您参考以下链接会更有帮助,该链接详细解释了整个 Tf-Idf:

https://janav.wordpress.com/2013/10/27/tf-idf-and-cosine-similarity/

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2021-02-09
    • 2014-11-12
    • 2011-12-24
    • 2018-12-14
    • 2011-01-14
    • 2017-07-23
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多