Машины опорных векторов (SVM) — это мощный алгоритм, используемый в машинном обучении для задач классификации и регрессии. При работе с SVM крайне важно правильно оценить производительность модели и настроить гиперпараметры для достижения оптимальных результатов. В этой статье блога мы рассмотрим концепцию последовательной перекрестной проверки и продемонстрируем различные методы ее реализации с помощью библиотеки scikit-learn.
Что такое последовательная перекрестная проверка?
Перекрестная проверка – это метод, используемый для оценки того, насколько хорошо модель машинного обучения обобщает невидимые данные. Он включает в себя разделение набора данных на несколько подмножеств или сгибов, а также итеративное обучение и оценку модели на различных комбинациях этих сгибов. Последовательная перекрестная проверка развивает эту концепцию, применяя перекрестную проверку итеративно, рассматривая различные подмножества данных на каждой итерации. Такой подход обеспечивает более полную оценку эффективности модели.
Метод 1: перекрестная проверка K-фолда
Перекрестная проверка K-Fold — популярный метод оценки моделей. Он делит набор данных на K складок одинакового размера. Затем модель обучается на сгибах K-1 и оценивается на оставшейся сгибе. Этот процесс повторяется K раз, причем каждый раз служит оценочным набором один раз. Окончательный показатель производительности обычно представляет собой среднее значение результатов оценки каждой итерации.
Вот пример выполнения перекрестной проверки K-Fold с SVM с использованием scikit-learn:
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
import numpy as np
# Load your dataset and feature matrix X, target vector y
svm_model = SVC(kernel='linear')
# Perform 5-fold cross validation
scores = cross_val_score(svm_model, X, y, cv=5)
# Print the accuracy scores for each fold
print("Accuracy scores:", scores)
print("Average accuracy:", np.mean(scores))
Метод 2: послойная перекрестная проверка K-фолда
Стратифицированная перекрестная проверка K-Fold особенно полезна при работе с несбалансированными наборами данных, где количество экземпляров в разных классах неравномерно. Это гарантирует, что в каждом сгибе сохраняется то же распределение классов, что и в исходном наборе данных, что обеспечивает более точную оценку эффективности модели.
Чтобы выполнить стратифицированную перекрестную проверку K-Fold с помощью scikit-learn, вы можете использовать следующий код:
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5)
# Iterate over the folds
for train_index, test_index in skf.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Train and evaluate the model on the current fold
svm_model.fit(X_train, y_train)
accuracy = svm_model.score(X_test, y_test)
print("Accuracy:", accuracy)
Метод 3: перекрестная проверка с исключением одного
Перекрестная проверка «Leave-One-Out» (LOOCV) — это крайний случай перекрестной проверки K-Fold, при которой количество сверток равно количеству экземпляров в наборе данных. Он обеспечивает более надежную оценку производительности, но может потребовать больших вычислительных затрат для больших наборов данных.
Вот пример реализации LOOCV с SVM с использованием scikit-learn:
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
# Iterate over the instances
for train_index, test_index in loo.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Train and evaluate the model on the current instance
svm_model.fit(X_train, y_train)
accuracy = svm_model.score(X_test, y_test)
print("Accuracy:", accuracy)
Последовательная перекрестная проверка — ценный метод оценки моделей SVM в машинном обучении. Рассматривая различные подмножества данных на каждой итерации, можно получить более полную оценку производительности модели. В этой статье мы исследовали три метода последовательной перекрестной проверки: перекрестная проверка K-фолда, стратифицированная перекрестная проверка K-фолда и перекрестная проверка с исключением одного. Реализуя эти методы с помощью scikit-learn, вы можете уверенно оценивать свои модели SVM и точно настраивать их гиперпараметры для достижения оптимальной производительности.