具有交叉验证的ngrams文本模型

时间:2019-03-08 11:06:20

标签: python scikit-learn cross-validation

在ngram模型(字符ngram或单词袋)中,我们需要确保测试数据的词汇表不用于拟合或训练模型。

这是sklearn的TfidfVectorizer函数对两个函数(拟合和变换)所做的工作。

所以,如果我有sklearn管道模型:

model = Pipeline([
        ('tfidf', TfidfVectorizer()),
        ('svc', SVC())
    ])

然后将其传递给交叉验证功能:

cv = cross_val_score(model, data['text'], data['label'], cv=5, scoring='accuracy', n_jobs=-1)

cross_val_score是否在每次折叠中都遵循场景(适合训练。然后,适合测试)?

还是刚开始(一次折叠)就适合模型?

1 个答案:

答案 0 :(得分:1)

是的,每个cv步骤都运行管道,因此对于cv的每个步骤,tfidf拟合仅针对火车折叠进行,对测试和测试折叠进行转换

from sklearn.pipeline import Pipeline
from sklearn.base import BaseEstimator
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
class Estimator(BaseEstimator):
    def fit(self,x,y=None):
        print ("inside fit:",x)
        return self
    def transform(self, x):
        print ("inside transform", x)
        return x
    def score(self,x,y):
        return 1
model = Pipeline([("e", Estimator()), ('l', linear_model.Lasso())])
cross_val_score(model, np.arange(15).reshape(3,5), np.arange(3), cv=3)