Гиперплоскости и опорные векторы (SVM)
Гиперплоскости — это границы решений, которые помогают классифицировать точки данных. Точки данных, попадающие по обе стороны от гиперплоскости, можно отнести к разным классам. Кроме того, размер гиперплоскости зависит от количества функций. Если количество входных объектов равно 2, то гиперплоскость — это просто линия. Если число входных признаков равно 3, то гиперплоскость становится двумерной плоскостью. Трудно представить, когда количество признаков превышает 3.
Опорные векторы — это точки данных, расположенные ближе к гиперплоскости и влияющие на положение и ориентацию гиперплоскости. Используя эти опорные векторы, мы максимизируем запас классификатора. Удаление опорных векторов изменит положение гиперплоскости. Это точки, которые помогают построить SVM модель.
В логистической регрессии мы берем выходные данные линейной функции и сжимаем значение в диапазоне [0,1], используя сигмовидную функцию. Если сжатое значение больше порогового значения (0,5), мы присваиваем ему метку 1, иначе мы присваиваем ему метку 0. В SVM мы берем выход линейной функции, и если этот результат больше 1, мы идентифицируем это с одним классом, и если вывод равен -1, мы идентифицируем его с другим классом. Поскольку пороговые значения изменены на 1 и -1 в SVM, мы получаем этот диапазон значений усиления ([-1,1]), который действует как запас.
SVM: машина опорных векторов — это линейная модель для задач классификации и регрессии. Он может решать линейные и нелинейные задачи и хорошо работает для многих практических задач. Идея SVM проста. Алгоритм создает линию или гиперплоскость, которая разделяет данные на классы. Цель SVM — создать максимальное предельное расстояние для построения обобщенной модели.
(.env) [boris@fedora34server PLOTTING]$ cat plottingLinearSVC.py
"""
Линейные модели LinearSVC() и SVC(kernel='linear') немного уступают различные границы решения. Это может быть следствием следующих . Отличия:
- LinearSVC минимизирует квадратичные потери шарнира, в то время как ``SVC`` минимизирует
регулярная потеря петли.
- LinearSVC использует мультикласс One-vs-All (также известный как One-vs-Rest).
сокращение, в то время как ``SVC`` использует многоклассовое сокращение One-vs-One.
Обе линейные модели имеют линейные границы решений (пересекающиеся гиперплоскости).
в то время как нелинейные модели ядра (полиномиальные или гауссовские RBF) имеют больше
гибкие нелинейные границы решений с формами, которые зависят от вида ядро и его параметры.
"""
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.inspection import DecisionBoundaryDisplay
# import some data to play with
iris = datasets.load_iris()
# Take the first two features. We could avoid this by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target
# we create an instance of SVM and fit out data.
# We do not scale our data since we want to plot the support vectors
C = 1.0 # SVM regularization parameter
models = (
svm.SVC(kernel="linear", C=C),
svm.LinearSVC(C=C, max_iter=10000),
)
models = (clf.fit(X, y) for clf in models)
# title for the plots
titles = (
"SVC with linear kernel",
"LinearSVC (linear kernel)",
)
# Set-up 2x1 grid for plotting.
fig, sub = plt.subplots(2, 1)
plt.subplots_adjust(wspace=0.4, hspace=0.4)
X0, X1 = X[:, 0], X[:, 1]
for clf, title, ax in zip(models, titles, sub.flatten()):
disp = DecisionBoundaryDisplay.from_estimator(
clf,
X,
response_method="predict",
cmap=plt.cm.coolwarm,
alpha=0.8,
ax=ax,
xlabel=iris.feature_names[0],
ylabel=iris.feature_names[1],
)
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors="k")
ax.set_xticks(())
ax.set_yticks(())
ax.set_title(title)
plt.show()
No comments:
Post a Comment