Машина опорных векторов радиальной базисной функции (RBF SVM) — это мощный алгоритм машинного обучения, который можно использовать для задач классификации и регрессии. Это непараметрическая модель, которая хорошо работает с нелинейными и многомерными данными.
RBF SVM работает, отображая входные данные в многомерное пространство признаков, где классы могут быть разделены гиперплоскостью. Алгоритм использует функцию ядра, такую как функция радиального базиса, для измерения сходства между парами точек данных в пространстве признаков.
Радиальная базисная функция — это популярная функция ядра, используемая с RBF SVM. Он определяется как:
K(x, x’) = exp(-gamma ||x — x’||²)
где x и x’ — точки входных данных, gamma — гиперпараметр, управляющий шириной ядра, а ||.|| Евклидово расстояние между точками. Функция ядра измеряет сходство между парами точек данных на основе их расстояния в пространстве признаков.
Чтобы использовать RBF SVM в Python, мы можем использовать библиотеку scikit-learn. Вот пример кода для использования RBF SVM для классификации:
from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Generate a random classification dataset X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_classes=2, random_state=42) # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Create a RBF SVM classifier with gamma=0.1 clf = SVC(kernel='rbf', gamma=0.1) # Train the classifier on the training data clf.fit(X_train, y_train) # Predict the labels of the testing data y_pred = clf.predict(X_test) # Calculate the accuracy of the classifier acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) Accuracy: 0.935
В этом коде мы сначала генерируем набор данных случайной классификации, используя функцию make_classification
. Затем мы разделяем набор данных на наборы для обучения и тестирования, используя функцию train_test_split
. Мы создаем классификатор RBF SVM с гаммой = 0,1, используя класс SVC
, и обучаем его на обучающих данных, используя метод fit
. Затем мы используем классификатор для прогнозирования меток данных тестирования с помощью метода predict
и вычисляем точность классификатора с помощью функции accuracy_score
.
RBF SVM — это мощный и гибкий алгоритм, который можно использовать для различных задач машинного обучения. С библиотекой scikit-learn легко реализовать и поэкспериментировать с RBF SVM в Python.
Кроме того, мы можем рассчитать и визуализировать кривую проверки гамма-параметра SVM. Кривые проверки используются для визуализации того, как производительность модели изменяется в зависимости от гиперпараметра при обучении модели. Кривая обычно показывает среднюю точность перекрестной проверки по оси Y и значения гиперпараметров по оси X. Изменение среднего значения обычно отображается в виде заштрихованной области выше и ниже кривой. Это дает представление об устойчивости и дисперсии модели с различными гиперпараметрами. Кривые валидации генерируются с использованием нескольких разбиений на поезд-тест с использованием перекрестной проверки для оценки производительности модели на невидимых данных.
Перекрестная проверка — это метод, используемый для оценки производительности модели машинного обучения на независимом наборе данных. Он включает в себя разделение данных на несколько подмножеств или сгибов, использование одних сгибов для обучения, а других — для тестирования. Повторяя этот процесс с разными подмножествами, мы можем получить оценку производительности модели на невидимых данных. Это помогает предотвратить переоснащение и увеличивает способность модели к обобщению. Это также включает в себя подбор нескольких моделей для разных разделений данных, что может быть дорогостоящим в вычислительном отношении, но все же снижает вычислительную сложность, избегая полностью отдельного набора проверки. Наконец, перекрестная проверка помогает предотвратить утечку знаний о тестовом наборе в модель, что может произойти, если одни и те же данные используются как для обучения, так и для тестирования.
Вот пример кода, который применяет RBF SVM к набору данных Iris с помощью scikit-learn, а также вычисляет и визуализирует кривую проверки:
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split, validation_curve from sklearn.svm import SVC # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Define the SVM gamma parameter range param_range = np.logspace(-3, 3, 7) # Calculate the validation curve for the SVM gamma parameter train_scores, test_scores = validation_curve( SVC(kernel='rbf'), X_train, y_train, param_name="gamma", param_range=param_range, cv=5) # Calculate the mean and standard deviation of the training and testing scores train_mean = np.mean(train_scores, axis=1) train_std = np.std(train_scores, axis=1) test_mean = np.mean(test_scores, axis=1) test_std = np.std(test_scores, axis=1) # Plot the validation curve plt.title("Validation Curve for RBF SVM") plt.xlabel("Gamma") plt.ylabel("Score") plt.ylim(0.0, 1.1) lw = 2 plt.semilogx(param_range, train_mean, label="Training score", color="darkorange", lw=lw) plt.fill_between(param_range, train_mean - train_std, train_mean + train_std, alpha=0.2, color="darkorange", lw=lw) plt.semilogx(param_range, test_mean, label="Cross-validation score", color="navy", lw=lw) plt.fill_between(param_range, test_mean - test_std, test_mean + test_std, alpha=0.2, color="navy", lw=lw) plt.legend(loc="best") plt.show()
В этом коде мы сначала определяем диапазон значений параметра гаммы SVM с помощью функции np.logspace
. Затем мы используем функцию validation_curve
для расчета кривой проверки гамма-параметра SVM с использованием 5-кратной перекрестной проверки. Полученные результаты обучения и тестирования сохраняются в train_scores
и test_scores
соответственно.
Затем мы вычисляем среднее значение и стандартное отклонение результатов обучения и тестирования, используя функции np.mean
и np.std
. Наконец, мы строим кривую проверки, используя модуль matplotlib.pyplot
. Результаты обучения отображаются оранжевым цветом, а результаты тестирования — синим цветом. Заштрихованные области представляют собой стандартное отклонение оценок.
Вы можете использовать эту проверочную кривую, чтобы определить оптимальное значение гамма-параметра SVM для вашей проблемы. В этом примере мы видим, что оптимальное значение составляет около gamma=0,1, что подтверждает значение, которое мы использовали в предыдущем коде. Однако для других наборов данных или задач оптимальное значение может быть другим.
👏 Не забудьте поставить лайк этой статье и поделиться ею со своей сетью, чтобы поддержать мою работу! Не стесняйтесь подписываться на мой профиль на Medium, чтобы получать больше информации о машинном обучении и науке о данных. Спасибо за такую поддержку! 🚀