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

在 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 是否在每个折叠中遵循场景(适合训练..然后,在测试中转换)?


或者它只是在开始时适合模型一次(第一次折叠)?


GCT1015
浏览 155回答 1
1回答

幕布斯6054654

是的,每个 cv 步骤都会运行管道,因此对于 cv 的每个步骤,tfidf 拟合仅针对训练折叠和测试和测试折叠的转换完成from sklearn.pipeline import Pipelinefrom sklearn.base import BaseEstimatorfrom sklearn import linear_modelfrom sklearn.model_selection import cross_val_scoreclass 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 1model = Pipeline([("e", Estimator()), ('l', linear_model.Lasso())])cross_val_score(model, np.arange(15).reshape(3,5), np.arange(3), cv=3)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python