Настройка гиперпараметра - PullRequest
0 голосов
/ 05 февраля 2020

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

Поэтому я использую перекрестную проверку и тестирую каждую комбинацию параметров и выбираю лучший.

Например:

def KMeanstest(param_grid, n_jobs): 

    estimator = KMeans()

    cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=42)

    regressor = GridSearchCV(estimator=estimator, cv=cv, param_grid=param_grid, n_jobs=n_jobs) 

    regressor.fit(X_train, y_train) 

    print("Best Estimator learned through GridSearch") 
    print(regressor.best_estimator_)

    return cv, regressor.best_estimator_

param_grid={'n_clusters': [2], 
            'init': ['k-means++', 'random'],
            'max_iter': [100, 200, 300, 400, 500],
            'n_init': [8, 9, 10, 11, 12, 13, 14, 15, 16], 
            'tol': [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6], 
            'precompute_distances': ['auto', True, False], 
            'random_state': [42],
            'copy_x': [True, False],
            'n_jobs': [-1],
            'algorithm': ['auto', 'full', 'elkan']
           }

n_jobs=-1

cv,best_est=KMeanstest(param_grid, n_jobs)

Но это очень много времени. Я хочу знать, является ли этот метод лучшим или мне нужно использовать другой подход.

Спасибо за вашу помощь

Ответы [ 3 ]

3 голосов
/ 05 февраля 2020

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

1 голос
/ 05 февраля 2020

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

Байесовская оптимизация - еще один вариант. это позволяет нам быстро распределяться по оптимальному набору параметров, используя вероятностный подход c. Я лично пробовал использовать библиотеку hyperopt в python, и она работает очень хорошо. Проверьте это учебник для получения дополнительной информации. Вы также можете загрузить соответствующий блокнот с моего GitHub

. Хорошо, что, поскольку вы уже экспериментировали с GridSearch, у вас есть приблизительное представление о том, какие диапазоны параметров не работают должным образом. Таким образом, вы можете определить более точное пространство поиска для запуска байесовской оптимизации, и это еще больше сократит время. Кроме того, hyperopt можно использовать для сравнения нескольких алгоритмов и их соответствующих параметров.

1 голос
/ 05 февраля 2020

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

Подробную информацию можно найти на странице документации sklearn . Дается сравнение между случайным и сеточным поиском.

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

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