支持向量机(Support Vector Machine,简称SVM)是机器学习中常用的一种监督学习算法。其主要应用于分类和回归问题,具有强大的非线性建模能力和良好的泛化能力。本文将介绍支持向量机的基本原理和案例。
1基本介绍
支持向量机是基于统计学习理论中VC维(Vapnik-Chervonenkis dimension)和结构风险最小化(SRM)原理的机器学习方法。
其核心思想是通过将数据映射到高维空间,构建出最优的超平面,从而实现数据的高效分类。
SVM的优势在于可以有效地解决高维数据的分类问题,并且对于小样本数据具有良好的泛化能力。
比较常见的逻辑回归的最终分类是基于sigmoid函数的,我们会自主的选择一个分类边界(分类阈值),然而逻辑回归选择的分类边界并不是最优的,有可能轻微的改变阈值大小就会使得类从0变为1(或者反向变化)。
支持向量机可以帮助我们解决逻辑回归算法在边界选择上的不足,它能更好的选择两类数据点之间的最佳分类边界(一个最合适的距离),因此支持向量机能更好的对样本进行分类。
2核心原理
最大化分类间隔
为了提高分类器的泛化能力,支持向量机追求将决策边界推向最远,使得不同类别的数据点距离决策边界尽可能远。这导致了一个优化问题,即在特征空间中找到一个超平面,使得该超平面的间隔最大化。
使用核函数
对于非线性问题,支持向量机通过使用核函数将数据映射到更高维的特征空间,然后在高维空间中寻找最优的超平面。核函数的选择对支持向量机的性能有很大影响。常用的核函数有线性核、多项式核和径向基函数(Radial basis function,RBF)。
3基础案例
我们可以直接使用Python的sklearn库,调用支持向量机模型。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import svm
##生成样本数据
xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
np.random.seed(0)
X = np.random.randn(300, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
# 训练模型
clf = svm.NuSVC(gamma="auto")
clf.fit(X, Y)
# 画图
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.imshow(
Z,
interpolation="nearest",
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect="auto",
origin="lower",
cmap=plt.cm.PuOr_r,
)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linestyles="dashed")
plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()