#python #scikit-learn #cross-validation
#python #scikit-learn #перекрестная проверка
Вопрос:
В модели 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)