Введение
В машинном обучении процесс выбора модели представляет собой выбор наилучшей модели для заданного набора данных. Он включает в себя выбор соответствующего оценивающего инструмента и настройку его параметров для достижения оптимальной производительности. В этом руководстве вы узнаете, как выбрать модель в scikit-learn.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике с использованием Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Оценка и оценки при кросс-валидации
Оценивающие инструменты в scikit-learn предоставляют метод score, который можно использовать для оценки качества подгонки модели или предсказания на новых данных. Этот метод возвращает оценку, при этом более высокое значение указывает на лучшую производительность.
from sklearn import datasets, svm
## Загрузить набор данных цифр
X_digits, y_digits = datasets.load_digits(return_X_y=True)
## Создать классификатор SVM с линейным ядром
svc = svm.SVC(C=1, kernel='linear')
## Подогнать классификатор к тренировочным данным и вычислить оценку на тестовых данных
score = svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])
Для получения более точной оценки точности предсказания можно использовать кросс-валидацию. Кросс-валидация заключается в разделении данных на несколько фолдов, использовании каждого фолда в качестве тестового набора и оставшихся фолдов в качестве тренировочных наборов. Этот процесс повторяется несколько раз, и оценки усредняются, чтобы получить общую производительность.
import numpy as np
## Разделить данные на 3 фолда
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)
## Выполнить кросс-валидацию
scores = []
for k in range(3):
X_train = list(X_folds)
X_test = X_train.pop(k)
X_train = np.concatenate(X_train)
y_train = list(y_folds)
y_test = y_train.pop(k)
y_train = np.concatenate(y_train)
scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
print(scores)
Генераторы кросс-валидации
Scikit-learn предоставляет набор классов, которые можно использовать для генерации индексов тренировочных и тестовых наборов данных для популярных стратегий кросс-валидации. Эти классы имеют метод split, который принимает входной набор данных и возвращает индексы тренировочного и тестового наборов для каждой итерации процесса кросс-валидации.
from sklearn.model_selection import KFold
## Разделить данные на K фолдов с использованием кросс-валидации KFold
k_fold = KFold(n_splits=5)
for train_indices, test_indices in k_fold.split(X_digits):
print(f'Тренировка: {train_indices} | тест: {test_indices}')
Вспомогательная функция cross_val_score может быть использована для непосредственного вычисления оценки при кросс-валидации. Она разделяет данные на тренировочный и тестовый наборы для каждой итерации кросс-валидации, обучает оценивающий инструмент на тренировочном наборе и вычисляет оценку на основе тестового набора.
from sklearn.model_selection import cross_val_score
## Вычислить оценку при кросс-валидации для классификатора SVM
scores = cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
print(scores)
Грид-поиск
Грид-поиск - это техника, которая может быть использована для нахождения наилучшей комбинации значений параметров для оценивающего инструмента. Она включает в себя указание сетки значений параметров, подгонку оценивающего инструмента на тренировочных данных для каждой комбинации параметров и выбор параметров, которые дают наивысшую оценку при кросс-валидации.
from sklearn.model_selection import GridSearchCV
## Определить сетку значений параметров
Cs = np.logspace(-6, -1, 10)
## Создать объект GridSearchCV с классификатором SVM и сеткой параметров
clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), n_jobs=-1)
## Подогнать объект GridSearchCV к тренировочным данным
clf.fit(X_digits[:1000], y_digits[:1000])
print(clf.best_score_)
print(clf.best_estimator_.C)
Экстремальные оценщики с кросс-валидацией
Некоторые оценщики в scikit-learn обладают встроенными возможностями кросс-валидации. Эти оценщики с кросс-валидацией автоматически выбирают свои параметры с использованием кросс-валидации, что делает процесс выбора модели более эффективным.
from sklearn import linear_model, datasets
## Создать объект LassoCV
lasso = linear_model.LassoCV()
## Загрузить набор данных по диабету
X_diabetes, y_diabetes = datasets.load_diabetes(return_X_y=True)
## Подогнать объект LassoCV к набору данных
lasso.fit(X_diabetes, y_diabetes)
print(lasso.alpha_)
Резюме
В этом уроке мы изучили процесс выбора модели в scikit-learn. Мы рассмотрели методы оценки, кросс-валидацию, сеточный поиск и оценщики с кросс-валидацией. Следуя этим шагам, вы можете выбрать наилучший оценщик для заданного набора данных и настроить его параметры, чтобы достичь оптимальной производительности.