Привет, друзья-энтузиасты машинного обучения! Прошло много времени с тех пор, как я что-то писал на Medium из-за своих стажировок. Пока я работал над своим проектом, я столкнулся с ситуацией, когда мне нужно было опробовать разные классификаторы с разными гиперпараметрами. Мне было трудно каждый раз вручную изменять гиперпараметры и подгонять их под данные тренировки. Вот почему:
- это требует много времени
- трудно отслеживать гиперпараметры, которые мы пробовали, и нам все еще нужно попробовать
Итак, я быстро спросил Google, есть ли какое-нибудь решение моей проблемы, и Google показал мне что-то под названием GridSearchCV от Sklearn. Позвольте мне на простом примере рассказать, как я воспользовался этим GridSearchCV для решения своей проблемы.
Что такое GridSearchCV?
GridSearchCV - это библиотечная функция, которая является членом пакета sklearn model_selection. Это помогает пройти через предопределенные гиперпараметры и подогнать вашу оценщик (модель) к вашему набору обучения. Итак, в итоге вы можете выбрать лучшие параметры из перечисленных гиперпараметров.
В дополнение к этому вы можете указать количество раз для перекрестной проверки для каждого набора гиперпараметров.
Пример с пояснениями
from sklearn.model_selection import GridSearchCV from sklearn.neighbors import KNeighborsClassifier kn = KNeighborsClassifier() params = { 'n_neighbors' : [5, 25], 'weights': ['uniform', 'distance'], 'algorithm': ['auto', 'ball_tree', 'kd_tree', 'brute'] } grid_kn = GridSearchCV(estimator = kn, param_grid = params, scoring = 'accuracy', cv = 5, verbose = 1, n_jobs = -1) grid_kn.fit(X_train, y_train)
Давайте разберем приведенный выше блок кода. Как обычно, вам необходимо импортировать GridSearchCV и оценку / модель (в моем примере KNClassifier) из библиотеки sklearn.
Следующим шагом является определение гиперпараметров, которые вы хотите опробовать. Это зависит от выбранного вами оценщика. Все, что вам нужно сделать, это создать словарь (параметры переменных в моем коде), который содержит гиперпараметры в качестве ключей и итерацию, содержащую параметры, которые вам нужно опробовать.
Затем все, что вам нужно сделать, это создать объект GridSearchCV. Здесь в основном вам нужно определить несколько именованных аргументов:
- оценщик: созданный вами объект оценщика.
- params_grid: объект словаря, содержащий гиперпараметры, которые вы хотите попробовать.
- скоринг: метрика оценки, которую вы хотите использовать, вы можете просто передать действительную строку / объект метрики оценки.
- cv: количество перекрестных проверок, которые вы должны попробовать для каждого выбранного набора гиперпараметров.
- подробный: вы можете установить его в 1, чтобы получать подробную распечатку, пока вы подбираете данные для GridSearchCV.
- n_jobs: количество процессов, которые вы хотите запустить параллельно для этой задачи, если оно равно -1, будут использоваться все доступные процессоры.
Это все, что вам нужно определить. Затем вы должны соответствовать своим тренировочным данным, как обычно. Вы получите первую строку, напечатанную следующим образом:
Fitting 5 folds for each of 16 candidates, totalling 80 fits ... ... ...
Вы не понимаете, что это значит? Простой! Поскольку нам нужно попробовать два варианта для n_neighbors, два для весов и четыре для алгоритмов, всего есть 16 различных комбинаций, которые мы должны попробовать. И для каждой комбинации у нас есть 5 подборов CV, поэтому наш объект GridSearcCV будет протестировать 80 разных подборов.
Время для этой подгонки зависит от количества гиперпараметров, которые вы тестируете. Когда все будет готово, вы получите следующий результат:
[Parallel(n_jobs=1)]: Done 80 out of 80 | elapsed: 74.1min finished]
Затем, чтобы узнать, какие параметры являются лучшими, вы можете просто распечатать его с помощью
# extract best estimator print(grid_kn.best_estimator_) Output: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',metric_params=None, n_jobs=-1, n_neighbors=25, p=2, weights='distance') # to test the bestfit print(grid_kn.score(X_test, y_test)) Output: 0.9524753
Круто, не правда ли? Теперь все, что вам нужно сделать, это изменить оценщик и определить словарь гиперпараметров, который вы должны попробовать. Надеюсь, это будет вам полезно. Чтобы узнать больше о GridSearchCV, ознакомьтесь с официальной документацией sklearn.