为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

GCT1015 2021-11-30 15:34:24
在 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 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

是的,每个 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)


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信