【问题标题】:ngrams text model with cross validation具有交叉验证的 ngrams 文本模型
【发布时间】:2019-07-30 09:49:19
【问题描述】:

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

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

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 2014-02-18
      • 2013-12-08
      • 1970-01-01
      • 2016-05-26
      • 2020-03-26
      • 2015-12-22
      • 2015-05-01
      • 2017-01-27
      相关资源
      最近更新 更多