文本分类交叉验证中的矢量化



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

这个问题的scikit-learn解决方案是交叉验证一个估计器的Pipeline,例如:

>>> 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) documents及其标签y,调用

>>> cross_val_score(clf, documents, y)

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

相关内容

  • 没有找到相关文章

最新更新