Как элегантно передать лучшие параметры Sklearn GridseachCV другой модели?

Я нашел набор лучших гиперпараметров для моего оценщика KNN с помощью Grid Search CV:

>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}

Все идет нормально. Я хочу обучить свой окончательный оценщик этим новым параметрам. Есть ли способ напрямую передать ему указанный выше гиперпараметрический диктант? Я пробовал это:

>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)

но вместо этого ожидаемый результат new_knn_model просто получил весь dict в качестве первого параметра модели, а остальные оставил по умолчанию:

>>> knn_model
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1,
           n_neighbors={'n_neighbors': 3, 'metric': 'manhattan', 'algorithm': 'auto'},
           p=2, weights='uniform')

Действительно досадно.


person Hendrik    schedule 13.07.2017    source источник
comment
вы должны распаковать dict с помощью **knn_gridsearch_model.best_params_   -  person taras    schedule 13.07.2017


Ответы (2)


Вы можете сделать это следующим образом:

new_knn_model = KNeighborsClassifier()
new_knn_model.set_params(**knn_gridsearch_model.best_params_)

Или просто распакуйте напрямую, как предложил @taras:

new_knn_model = KNeighborsClassifier(**knn_gridsearch_model.best_params_)

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

gs.best_estimator_
person Miriam Farber    schedule 13.07.2017
comment
Спасибо. Что касается вашего последнего совета, мне нужно переработать лучшие параметры, потому что я хочу обучить новую модель на комбинированных наборах поезд + тест в конце. - person Hendrik; 13.07.2017
comment
Я делаю это, используя последний ответ здесь, gs.best_estimator_, я бы посоветовал это как лучший подход из трех здесь. - person Max Power; 26.10.2017

Я просто хочу указать, что с помощью grid.best_parameters и передать их в новую модель с помощью unpacking, например:

my_model = KNeighborsClassifier(**grid.best_params_)

это хорошо и все такое, и я лично его часто использовал.
Однако, как вы можете видеть в документации здесь, если ваша цель - предсказать что-то, используя эти best_parameters, вы можете напрямую использовать метод grid.predict, который будет использовать эти лучшие параметры для вас. по умолчанию.

пример:

y_pred = grid.predict(X_test)

Надеюсь, это было полезно.

person Rayhane Mama    schedule 13.07.2017