Найти в Дзене
why_train

Как удобно подгружать параметры из GridSearchCV

Оглавление

Класс GridSearchCV входит в состав инструментов популярной в Python-сообществе библиотеки машинного обучения sklearn и позволяет определять лучшие (из предложенных) модели и их параметры.

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

Эту операцию удобно осуществлять, если написать специальную функцию. Разберем пример из курса Анатолия Карпова сотоварищи "Введение в Data Science и машинное обучение", посвященный определению типа вражеских космических кораблей . Сразу оговорюсь, что здесь не будет части, посвященной непосредствено подбору параметров - только код, подающий найденные значения в модель и выводящий результаты ее работы.

Код

Итак, нам понадобятся следующие модули:

Для загрузки данных - pandas

import pandas as pd

Библиотеки для машинного обучения

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

Для подсчета значений - класс Counter из стандартной библиотеки collections

from collections import Counter

Теперь функция для работы с параметрами модели, чтобы не вводить их вручную.

def get_best_params(parameters):

"""
accepts a dict with params

Default values:
===============
n_estimators: int
10
max_depth: int
10
min_sample_leaf: int
1
min_sample_split: int
2

Returns:
========
A RandomForestClassifier object with parameters set in user's dict.
"""
estimators = parameters.get('n_estimators', 10)
m_depth = parameters.get('max_depth', 10)
min_samples_l = parameters.get('min_samples_leaf', 1)
min_samples_s = parameters.get('min_samples_split', 2)

clf = RandomForestClassifier(n_estimators=estimators,
max_depth=m_depth,
min_samples_split=min_samples_s,
min_samples_leaf=min_samples_l)

return(clf)

Важно, что для обработки значений словаря использован метод .get(), позволяющий избежать ошибки при обращении к несуществующему ключу и вернуть значение по умолчанию. Функцию можно сразу дополнить всеми возможнными параметрами, чтобы не создавать каждый раз новую.

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

Обработка результатов

После того, как модель с лучшими параметрами выдала предсказание, посчитаем экземпляры каждого из классов с помощью Counter:

total = Counter(model_prediction)


for key, value in total.items():

print(f'{key}: {value}')

Таким образом, мы получим пары значени "тип: количество". Задача решена.

#Python #data science #machine learning #машинное обучение #анализ данных