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

Posted

技术标签:

【中文标题】具有交叉验证的 ngrams 文本模型【英文标题】:ngrams text model with cross validation 【发布时间】: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 是否在每个折叠中都遵循场景(适合训练..然后转换测试)?

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

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于具有交叉验证的 ngrams 文本模型的主要内容,如果未能解决你的问题,请参考以下文章

具有交叉验证的神经网络模型的多个指标

使用 scikit-learn 对具有多个输入的 Keras 模型进行交叉验证

k折交叉验证模型选择方法

交叉验证

交叉验证(Cross Validation)比较

交叉验证,K折交叉验证的偏差和方差分析