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

2024-04-19 18:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这就是skefidfvectorizer函数对这两个函数(fit和transform)所做的操作。你知道吗

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

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

我把它传递给交叉验证函数:

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

交叉评分是否符合情景(适合训练。。然后,在测试中变换)在每个折叠中?你知道吗

或者刚开始时只适合模型一次(第一次折叠)?你知道吗


Tags: 词汇表函数模型datamodeltransformsklearn字符
1条回答
网友
1楼 · 发布于 2024-04-19 18:27:39

是的,为每个cv步骤运行管道,因此对于cv的每个步骤,tfidf拟合仅对train褶皱进行,并对测试和测试褶皱进行变换

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)

相关问题 更多 >