Класс 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 #машинное обучение #анализ данных