Получение вероятностей лучшей модели для RandomizedSearchCV - PullRequest
0 голосов
/ 07 мая 2018

Я использую RandomizedSearchCV, чтобы получить лучшие параметры с 10-кратной перекрестной проверкой и 100 итерациями. Это хорошо работает. Но теперь я хотел бы также получить вероятности каждой прогнозируемой точки тестовых данных (например, predict_proba) из наиболее эффективной модели.

Как это можно сделать?

Я вижу два варианта. Во-первых, возможно, можно получить эти вероятности непосредственно из RandomizedSearchCV или во-вторых, получить лучшие параметры из RandomizedSearchCV, а затем повторить 10-кратную перекрестную проверку (с тем же начальным значением, чтобы я получил те же разбиения) ) с этими лучшими параметрами.

Редактировать: Правильно ли использовать следующий код, чтобы получить вероятности наиболее эффективной модели? X - данные обучения, а y - метки, а модель - это RandomizedSearchCV, содержащая Pipeline с пропущенными значениями, стандартизацией и SVM.

cv_outer = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
y_prob = np.empty([y.size, nrClasses]) * np.nan
best_model = model.fit(X, y).best_estimator_

for train, test in cv_outer.split(X, y):
    probas_ = best_model.fit(X[train], y[train]).predict_proba(X[test])
    y_prob[test] = probas_

Ответы [ 2 ]

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

Вам нужно посмотреть в cv_results_, это даст вам оценки и средние оценки для всех ваших сгибов, а также среднее время подгонки и т. Д. *

Если вы хотите predict_proba() для каждой из итераций, способ сделать это - циклически просмотреть параметры, приведенные в cv_results_, заново подобрать модель для каждого из них, а затем предсказать вероятности, как насколько я знаю, отдельные модели нигде не кэшируются.

best_params_ даст вам параметры наилучшего соответствия, если вы хотите обучить модель, используя только лучшие параметры в следующий раз.

См. cv_results_ на информационной странице http://scikit -learn.org / stable / modules / generate / sklearn.model_selection.RandomizedSearchCV.html

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

Если я правильно понял, вы хотели бы получить индивидуальные оценки по каждому образцу в вашем тестовом сплите для случая с самым высоким показателем CV. Если это так, вы должны использовать один из тех генераторов CV, которые дают вам контроль над разделенными индексами, например, здесь: http://scikit -learn.org / stable / tutorial / statistics_inference / model_selection.html # cross -validation-генераторы

Если вы хотите рассчитать оценки для нового тестового образца с моделью с наилучшими показателями, то функции predict_proba(), равной RandomizedSearchCV, будет достаточно, учитывая, что ваша базовая модель поддерживает ее.

Пример:

import numpy
skf = StratifiedKFold(n_splits=10, random_state=0, shuffle=True)
scores = cross_val_score(svc, X, y, cv=skf, n_jobs=-1)
max_score_split = numpy.argmax(scores)

Теперь, когда вы знаете, что ваша лучшая модель происходит в max_score_split, вы можете получить это разделение самостоятельно и подогнать его под вашу модель.

train_indices, test_indices = k_fold.split(X)[max_score_split]
X_train = X[train_indices]
y_train = y[train_indices]
X_test = X[test_indices]
y_test = y[test_indices]
model.fit(X_train, y_train) # this is your model object that should have been created before

И, наконец, получите свои прогнозы по:

model.predict_proba(X_test)

Я сам не тестировал код, но должен работать с небольшими изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...