Руководство по SVM (Support-Vector Machine или Опорно-векторная машина) с использованием Python
SVM – это очень мощный и гибкий класс контролируемых алгоритмов машинного обучения для задач классификации и регрессии. В этой статье я познакомлю вас с руководством по машинному обучению на SVM с использованием Python.
SVM
В машинном обучении SVM представляют собой набор контролируемых алгоритмов машинного обучения, которые можно использовать как для классификации, так и для регрессии. Они относятся к категории обобщенных линейных классификаторов. Проще говоря, SVM – это алгоритм классификации и регрессии, который обеспечивает большую точность, автоматически избегая переобучения данных.
Большая сила SVM заключается в том, что их обучение очень простое. Не требуется оптимального значения, в отличие от нейронных сетей. Он также очень хорошо подходит для данных с очень большим размером. Теперь, в разделе ниже, я расскажу вам, как реализовать SVM на очень популярном наборе данных «Ирис».
Руководство по SVM с использованием Python
SVM – один из лучших подходов к моделированию данных. Он использует проверку обобщения как метод проверки размерности. Теперь давайте начнем с задачи реализации алгоритма SVM в наборе данных. Я начну с импорта набора данных и библиотек, необходимых для визуализации данных:
import seaborn as sns iris = sns.load_dataset('iris') import pandas as pd import matplotlib.pyplot as plt %matplotlib inline set(iris['species'])
Результат:
{'setosa', 'versicolor', 'virginica'}
iris.head()
Результат:
sepal_length |
sepal_width |
petal_length |
petal_width |
species |
|
---|---|---|---|---|---|
0 |
5.1 |
3.5 |
1.4 |
0.2 |
setosa |
1 |
4.9 |
3.0 |
1.4 |
0.2 |
setosa |
2 |
4.7 |
3.2 |
1.3 |
0.2 |
setosa |
3 |
4.6 |
3.1 |
1.5 |
0.2 |
setosa |
4 |
5.0 |
3.6 |
1.4 |
0.2 |
setosa |
Визуализация данных:
Теперь давайте визуализируем некоторые важные особенности данных, чтобы понять, с чем мы работаем:
sns.pairplot(iris,hue='species',palette='Dark2')
setosa = iris[iris['species']=='setosa'] sns.kdeplot( setosa['sepal_width'], setosa['sepal_length'], cmap="plasma", shade=True, shade_lowest=False)
Для обучения классификатора SVM я разделю данные на обучающий и тестовый наборы:
from sklearn.model_selection import train_test_split X = iris.drop('species',axis=1) y = iris['species'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
Теперь чтобы обучимть модель, я импортирую модель SVC из scikit-learn и просто подгоню данные в модель:
from sklearn.svm import SVC svc_model = SVC() svc_model.fit(X_train,y_train) predictions = svc_model.predict(X_test) from sklearn.metrics import classification_report,confusion_matrix print(confusion_matrix(y_test,predictions))
Результат:
[[16 0 0]
[ 0 14 0]
[ 0 2 13]]
print(classification_report(y_test,predictions))
Результат:
precision recall f1-score support setosa 1.00 1.00 1.00 16 versicolor 0.88 1.00 0.93 14 virginica 1.00 0.87 0.93 15 accuracy 0.96 45 macro avg 0.96 0.96 0.95 45 weighted avg 0.96 0.96 0.96 45
Давайте посмотрим, сможем ли мы настроить гиперметры, чтобы попытаться стать еще лучше, что маловероятно, поскольку вы, вероятно, будете довольны этими результатами, поскольку набор данных довольно мал, но я просто хочу, чтобы вы попрактиковались в использовании GridSearch:
from sklearn.model_selection import GridSearchCV param_grid = {'C': [0.1,1, 10, 100], 'gamma': [1,0.1,0.01,0.001]} grid = GridSearchCV(SVC(),param_grid,refit=True,verbose=2) grid.fit(X_train,y_train) grid_predictions = grid.predict(X_test) print(confusion_matrix(y_test,grid_predictions)) print(classification_report(y_test,grid_predictions))
Результат:
[[16 0 0]
[ 0 14 0]
[ 0 0 15]]
precision recall f1-score support setosa 1.00 1.00 1.00 16 versicolor 1.00 1.00 1.00 14 virginica 1.00 1.00 1.00 15 accuracy 1.00 45 macro avg 1.00 1.00 1.00 45 weighted avg 1.00 1.00 1.00 45
Надеюсь, вам понравилась эта статья с руководством по машинному обучению на опорных векторных машинах