текстовая модель ngrams с перекрестной проверкой - PullRequest
0 голосов
/ 08 марта 2019

В модели ngram (символьная или пакет слов) мы должны убедиться, что словарь тестовых данных не используется для подгонки или обучения модели.

Это то, что склеарн функция 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 Ответ

1 голос
/ 08 марта 2019

Да, конвейер запускается для каждого шага 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)
...