Scikit learn sklearn:文本分类交叉验证中的矢量化

Scikit learn sklearn:文本分类交叉验证中的矢量化,scikit-learn,Scikit Learn,我有一个关于在sklearn的文本分类中使用交叉验证的问题。在交叉验证之前对所有数据进行矢量化是有问题的,因为分类器会“看到”测试数据中出现的词汇表。Weka已经过滤了分类器来解决这个问题。此函数的sklearn等效值是什么?我的意思是,对于每个折叠,特征集都会不同,因为训练数据不同。这个问题的scikit学习解决方案是交叉验证估计器的管道,例如: >>> from sklearn.cross_validation import cross_val_score >>

我有一个关于在sklearn的文本分类中使用交叉验证的问题。在交叉验证之前对所有数据进行矢量化是有问题的,因为分类器会“看到”测试数据中出现的词汇表。Weka已经过滤了分类器来解决这个问题。此函数的sklearn等效值是什么?我的意思是,对于每个折叠,特征集都会不同,因为训练数据不同。

这个问题的scikit学习解决方案是交叉验证估计器的管道,例如:

>>> from sklearn.cross_validation import cross_val_score
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> from sklearn.pipeline import Pipeline
>>> from sklearn.svm import LinearSVC
>>> clf = Pipeline([('vect', TfidfVectorizer()), ('svm', LinearSVC())])
clf
现在是一种复合估计器,可以进行特征提取和SVM模型拟合。给定文档列表(即字符串的普通Python
list
文档及其标签
y
,调用

>>> cross_val_score(clf, documents, y)

将分别在每个折叠中进行特征提取,以便每个支持向量机只知道其(k-1)折叠训练集的词汇。

我认为这个问题可能在名为“交叉验证”的堆栈交换机器学习和统计网站上得到更好的接受这个问题似乎是离题的,因为它属于澄清:它不是离题的,因为这个问题是特别针对sklearn中用于文本分类的CV。数字数据不会有这个问题,因为特征集对于任何折叠都是固定的,但是对于文本分类中的每个折叠都是不同的。非常感谢!我测试了您的解决方案,它确实报告了与无管道方法不同的精度数字。有没有办法打印出每个折叠的词汇量,只是为了验证?我打印出了“clf”的功能集大小,其数字与我从“无管道”方法中获得的数字相同。@user3466018不是现成的,但您可以实现一个无操作转换器,它打印
X.shape[1]
,并将其堆叠到管道中。(或实现自定义记分器,或破解矢量器代码以报告此情况。)