Как получить «скоринговую» обученную модель (прогноз) - PullRequest
0 голосов
/ 24 мая 2018

Есть данные (X, y), по которым осуществляется поиск и обучение в функции GridSearchCV.Обучение проходит по пользовательскому критерию T_scorer.Возможно ли в функции T_scorer получить обученную модель для использования?Мне нужно "T_scorer" прогнозировать данные "X1".То есть модель обучается на данных (X, y) на каждой итерации и прогнозируется на (X1, y1). Снова (X1, y1) вообще не участвуют в обучении, и "GridSearchCV" эти данные не видят.

В идеале, мы должны провести обучение по данным (X, y), и при «подсчете» должны передаваться результаты, основанные на предсказаниях (X1, y1))

def T_scorer(y_true, y_pred, clf, **kwargs):
    r = np.sum((y_pred == 0) & (y_pred == y_true))

    y_pred1 = clf.predict(X1)  #It doesn't work

    confmat = confusion_matrix(y, y_pred)
    print(confmat)
    print(r)
    return r

_scorer = make_scorer(T_scorer)

clf = RandomForestClassifier()
grid_searcher = GridSearchCV(clf, parameter_grid, cv=StratifiedKFold(shuffle =True,random_state=42),verbose=20, scoring=_scorer)
grid_searcher.fit(X, y)
clf_best = grid_searcher.best_estimator_
print('Best params = ', clf_best.get_params())

1 Ответ

0 голосов
/ 24 мая 2018

make_scorer() следует использовать только тогда, когда у вас есть функция подписи (y_true, y_pred).Когда вы используете make_scorer() в своей функции, возвращается подпись:

func (оценщик, X, y)

, которая затем используется в GridSearchCV.Поэтому вместо использования make_scorer вы можете указать свою функцию как:

# I am assuming this is the data you want to use
X1 = X[:1000]
y1 = y[:1000]

def T_scorer(clf, X, y):
    # Here X and y passed on to the function from GridSearchCV will not be used
    y_pred1 = clf.predict(X1)
    r = np.sum((y_pred1 == 0) & (y1 == y_pred1))
    confmat = confusion_matrix(y1, y_pred1)
    print(confmat)
    return r

# Now dont use make_scorer, pass directly
grid_searcher = GridSearchCV(clf,..., verbose=20, scoring=T_scorer)
...