Введение
В машинном обучении кривые валидации используются для определения значений точности обучения и валидации классификатора для различных значений гиперпараметров. Это может помочь в выборе наилучших гиперпараметров для модели. В этом лабораторном занятии мы будем использовать scikit-learn для построения кривых валидации для классификатора на основе методов опорных векторов (SVM).
Советы по использованию ВМ
После завершения запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук, чтобы получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Лэби. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Загрузка набора данных
Начнем с загрузки набора данных digits из scikit-learn и выбора подмножества данных для бинарной классификации цифр 1 и 2.
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
subset_mask = np.isin(y, [1, 2]) ## binary classification: 1 vs 2
X, y = X[subset_mask], y[subset_mask]
Определение диапазона гиперпараметров
Мы определим диапазон значений для параметра ядра SVM gamma, который мы хотим протестировать.
param_range = np.logspace(-6, -1, 5)
Вычисление значений валидации
Мы будем использовать функцию validation_curve из scikit-learn для вычисления значений точности обучения и валидации для классификатора SVM с разными значениями gamma.
from sklearn.svm import SVC
from sklearn.model_selection import validation_curve
train_scores, test_scores = validation_curve(
SVC(),
X,
y,
param_name="gamma",
param_range=param_range,
scoring="accuracy",
n_jobs=2,
)
Построение кривых валидации
Мы будем использовать matplotlib для построения графиков значений точности обучения и валидации в зависимости от gamma.
import matplotlib.pyplot as plt
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
plt.title("Validation Curve with SVM")
plt.xlabel(r"$\gamma$")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.semilogx(
param_range, train_scores_mean, label="Training score", color="darkorange", lw=lw
)
plt.fill_between(
param_range,
train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std,
alpha=0.2,
color="darkorange",
lw=lw,
)
plt.semilogx(
param_range, test_scores_mean, label="Cross-validation score", color="navy", lw=lw
)
plt.fill_between(
param_range,
test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std,
alpha=0.2,
color="navy",
lw=lw,
)
plt.legend(loc="best")
plt.show()
Резюме
В этом практическом занятии мы узнали, как использовать scikit-learn для построения кривых валидации для классификатора на основе методов опорных векторов. Мы загрузили набор данных, определили диапазон значений гиперпараметров, вычислили значения валидации и построили результаты. Это может помочь в выборе наилучших гиперпараметров для модели и улучшении ее производительности.