Tfidf 转换器(sklearn)导致:“类型不支持转换:(dtype('O'),)”

Posted

技术标签:

【中文标题】Tfidf 转换器(sklearn)导致:“类型不支持转换:(dtype(\'O\'),)”【英文标题】:Tfidf transformer (sklearn) results in : "no supported conversion for types: (dtype('O'),)"Tfidf 转换器(sklearn)导致:“类型不支持转换:(dtype('O'),)” 【发布时间】:2018-07-06 03:58:40 【问题描述】:

我有一个字符串列表,我适合_transform 到 CountVectorizer。

当我尝试对其进行 TfidfTransform 时,我得到了错误:

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit(features_train)

from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
X_train_tfidf = transformer.fit_transform(X_train_counts)

TypeError: no supported conversion for types: (dtype('O'),)

【问题讨论】:

@PhilipBergström 不,它没有。它需要一个计数矩阵。所以OP打算做的是正确的。 你的问题解决了吗? 【参考方案1】:

您没有正确地向 TfidfTransformer 提供计数矩阵。

count_vect.fit(features_train) 不会返回计数矩阵。它返回self,意味着它将返回CountVectorizer 类的拟合版本。

返回计数矩阵需要调用transform()方法。

更正如下代码:

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()

# This changed
X_train_counts = count_vect.fit_transform(features_train)

from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
X_train_tfidf = transformer.fit_transform(X_train_counts)

现在您应该不会收到任何错误。

顺便说一句,我建议您使用TfidfVectorizer,而不是分别调用 CountVectorizer 和 TfidfTransformer,这只是这两者的组合,可以将您的代码减少到:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer()
X_train_tfidf = transformer.fit_transform(features_train)

【讨论】:

我最终做了 Tfidfvectorizer,现在正在工作。谢谢!

以上是关于Tfidf 转换器(sklearn)导致:“类型不支持转换:(dtype('O'),)”的主要内容,如果未能解决你的问题,请参考以下文章

向 Sklearn 分类器添加功能

如何分析sklearn中tfidf矩阵的值?

如何分析sklearn中tfidf矩阵的值?

使用 sklearn 计算两个不同列的单独 tfidf 分数

如何从管道中的 sklearn TFIDF Vectorizer 返回数据帧?

sklearn : TFIDF Transformer : 如何获取文档中给定单词的 tf-idf 值