机器学习中的非线性SVM


介绍

支持向量机 (SVM) 是最流行的监督式机器学习算法之一,用于分类和回归。SVM算法力求找到n维数据之间的最佳拟合线,以将它们分成不同的类别。因此,新的数据点可以被分类到这些类别中的一个。

SVM算法创建两个超平面,同时最大化它们之间的间隔。位于这些超平面上的点称为支持向量,因此得名支持向量机。

下图显示了用于将数据分类为两类的 SVM 的决策边界和超平面。

上图解释了线性 SVM 的工作原理。该图显示了通过最大间隔超平面相互分离的两类。分离超平面旨在最大化负超平面和正超平面之间的间隔。支持向量分别是负超平面和正超平面上的点。

SVM算法的一个例子可以是一个分类器,它用于根据包含猫和狗图像的数据集将图像分类为猫和狗。

非线性 SVM

我们在现实世界中接收到的数据并不总是线性可分的。虽然线性 SVM 是线性数据的完美 SVM 算法类型,但可以使用非线性核的非线性 SVM 来有效地处理非线性数据。

一条直线可以对两类进行分类,但要对两类以上进行分类,则需要非线性 SVM,因为数据可能跨越 n 维。

从上图我们可以看出,在非线性SVM中,分离两类的超平面是非线性的。在上图中,两类A类和B类通过非线性或曲线边缘或超平面分离,该超平面倾向于最大化两类之间的间隔。

非线性 SVM 最常用的核是径向基函数 (RBF) 核。但是,还有其他非线性核,例如多项式核。

让我们进一步了解 RBF 核,并了解它如何在 SVM 中帮助进行非线性分类。

让我们进一步了解 RBF 核,并了解它如何在 SVM 中帮助进行非线性分类。

RBF 核

核是一个函数,它将 n 维输入数据转换为 m 维,使得 n >> m。

RBF 核尝试使用核技巧和数据转换来使非线性可分数据几乎线性。

RBF 核表示为。

示例

import numpy as np
from sklearn import datasets as ds
from sklearn import svm
import matplotlib.pyplot as plt
%matplotlib inline

X, y = ds.make_circles(n_samples=500, noise=0.06)

plt.scatter(X[:, 0], X[:, 1], c=y, marker='.')
plt.show()

classifier_non_linear = svm.SVC(kernel='rbf', C=1.0)

classifier_non_linear.fit(X, y)

def boundary_plot(m, axis=None):
    if axis is None:
        axis = plt.gca()
        
    limit_x = axis.get_xlim()
    limit_x_y = axis.get_ylim()
    

    x_lines = np.linspace(limit_x[0], limit_x[1], 30)
    y_lines = np.linspace(limit_x_y[0], limit_x_y[1], 30)
    Y, X = np.meshgrid(y_lines, x_lines)


    xy = np.vstack([X.ravel(), Y.ravel()]).T
    

    Plot = m.decision_function(xy).reshape(X.shape)
    
    axis.contour(X, Y, Plot,
               levels=[0], alpha=0.6,
               linestyles=['-'])

plt.scatter(X[:, 0], X[:, 1], c=y, s=55)
boundary_plot(classifier_non_linear)
plt.scatter(classifier_non_linear.support_vectors_[:, 0], classifier_non_linear.support_vectors_[:, 1], s=55, lw=1, facecolors='none')
plt.show()

输出

结论

非线性 SVM 是监督学习中用于分类和回归的一种非常方便的工具和高效的算法。当数据是非线性可分时,它非常有用,它将使用非线性核(如 RBF 核)和任何其他合适的函数应用核技巧。

更新于:2023年8月27日

2K+ 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告