为啥 scikit-learn 中的 TfidfVectorizer 会显示这种行为?

Posted

技术标签:

【中文标题】为啥 scikit-learn 中的 TfidfVectorizer 会显示这种行为?【英文标题】:Why is TfidfVectorizer in scikit-learn showing this behavior?为什么 scikit-learn 中的 TfidfVectorizer 会显示这种行为? 【发布时间】:2015-08-17 03:55:26 【问题描述】:

在创建 TfidfVectorizer 对象时,如果我明确传递了 token_pattern 参数的默认值,它会在我执行 fit_transform 时引发错误。以下是错误:

ValueError:空词汇;也许文档只包含停用词

我这样做是因为最终我想为 token_pattern 参数传递一个不同的值,以便我可以将单字母标记也作为我的 tfidf 矩阵的一部分。

以下是一个例子:

from sklearn.feature_extraction.text import TfidfVectorizer

train_set = ("The sky is blue.", "The sun is bright.")
vectorizer1 = TfidfVectorizer(ngram_range=(1, 2), max_df=1.0, min_df=1)
train_set_tfidf = vectorizer1.fit_transform(train_set)     #works fine
vectorizer2 = TfidfVectorizer(token_pattern=u'(?u)\b\w\w+\b', ngram_range=(1, 2), max_df=1.0, min_df=1)
train_set_tfidf = vectorizer2.fit_transform(train_set)     #throws error

【问题讨论】:

【参考方案1】:

建议在正则表达式前面加上r,这样应该可以:

vectorizer2 = TfidfVectorizer(token_pattern=r'(?u)\b\w\w+\b', ngram_range=(1, 2), max_df=1.0, min_df=1)
train_set_tfidf = vectorizer2.fit_transform(train_set)

这是known bug in the documentation,但如果您查看source code,它们确实使用原始文字。

【讨论】:

以上是关于为啥 scikit-learn 中的 TfidfVectorizer 会显示这种行为?的主要内容,如果未能解决你的问题,请参考以下文章

为啥带有铰链损失的 SGDClassifier 比 scikit-learn 中的 SVC 实现更快

scikit-learn 和 scipy 库之间的确定系数不同。为啥?

scikit-learn ExtraTreesClassifier - 为啥泡菜文件这么大? (几 GB)

为啥 scikit-learn 对不同的回归器要求不同的数据形状?

为啥我不能从 Spyder 导入 scikit-learn,但我可以从命令行导入?

为啥 pip 在安装 scikit-learn 时会出现权限被拒绝的错误?