什么是SVM?
支持向量机是一种监督学习算法,主要用于分类和回归任务。它通过找到数据点之间的最优边界(称为超平面)来进行分类,这一边界能够最大化不同类别之间的间隔。
分类原理
支持向量机(support vector machines,SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器。支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题。支持向量机的主要方法是:多维空间中,在最大化最小间隔的基础上,通过不断更新参数,求得一个最优超平面来进行分类。此时,超平面分割两个类别的距离达到最大值,且该超平面是唯一存在的。下图为通过超平面划分的支持向量机的示意图:
如图,其中虚线上的点就算支持向量,它们是到超平面最近的点,两条虚线H1,H2之间的距离称为间隔,该间隔依赖于法向量w,等于。实线就是分离超平面,其公式为:
其中w=(w1,w2,w3,…wn)是支持向量机中切割超平面进行划分的法向量。定义向量空间中每个点到超平面的几何间隔和最小几何间隔分别为:
如果超平面能将训练样本正确分类,对于某个样本点,若则有;若,则有。于是对于分类正确的样本点,有
通过最大化最小间隔,并保证正确分类的情况下,构造出了如下模型:
通过上述模型求得最优解w*,b*,即可求得分离超平面。
回归原理
支持向量回归(Support Vector Regression, SVR)是一种基于支持向量机(SVM)发展起来的回归分析方法。与SVM用于分类问题不同,SVR主要用于解决回归问题。SVR的核心思想是在特征空间中找到一个最优超平面,使得所有数据点尽可能接近该超平面,并且误差在一个容忍范围内。
SVR通过引入损失函数和松弛变量来实现对误差的控制。具体来说,SVR的目标是找到一个函数:
使得对于所有的训练数据点(xi,yi),预测值f(xi)与真实值yi之间的误差不超过一个给定的阈值ϵ,即满足条件:
如果误差超过 𝜖,则会引入松弛变量 ξi 和 ξi*来度量超过部分。
SVR的优化目标可以表示为:
其中,C是一个常数,表示对误差的惩罚程度;ξi 和ξi*是松弛变量,用于允许部分数据点的预测误差超过ϵ。
通过上述优化问题,SVR能够求得最优的参数 𝑤 和 𝑏,从而得到一个回归模型,该模型在保证尽可能小的误差的同时,也保持了模型的简洁性和鲁棒性。SVR在处理高维数据和非线性回归问题时表现尤为突出,常常通过引入核函数将非线性问题转换为线性问题来解决。
SVM与SVR的区别在于:SVM是最大化分类间隔。SVM 的目标是找到一个能将数据点准确分类且间隔最大的超平面;SVR是最小化回归误差。SVR 的目标是找到一个回归函数,使得大多数数据点的预测误差在 epsilon 范围内,并且在允许误差超过 epsilon 的情况下,惩罚这些超出误差的点。下图展示了SVM与SVR的差别。
基本原理
找到一个决策边界,使边界间隔最大。
- 间隔(Margin):数据点到决策边界的最近距离。
- 支持向量(Support Vectors):距离决策边界最近的那些点,它们决定了超平面的位置和方向。
支持向量到决策边界的距离最小的点。SVM核心就是优化决策超平面参数,使支持向量到超平面的距离最大。
模型策略算法:
SVM的分类
线性SVM:适用于线性可分数据集。
硬间隔:完全可分
软间隔:不完全可分
注意:C>0
1.样本不满足约束的程度越低越好
2.每一个松弛变量对应一个代价
3.间隔尽可能大,同时样本被误分类的程度尽可能低
4.参数𝐶控制间隔和松弛变量惩罚项之间的平衡,𝐶越大,对误分类的惩罚越大, 越大,间隔越小
非线性SVM:通过核函数处理非线性可分数据集。
如:《机器学习基础:从入门到求职》书中例图
SVM-Python-sklearn
class sklearn.svm.SVC( C=1.0, # 错误样本的惩罚参数 kernel='rbf', # 使用何种核算法。
linear线性、poly多项式、rbf高斯、sigmod、precomputed自定义 degree=3, # 多项式核函
数的阶数 gamma='auto', # 当kernel为‘rbf’, ‘poly’或‘sigmoid’时的kernel系数。
1/n_features coef0=0.0, # kernel函数的常数项。 shrinking=True, probability=False, # 是否
估计概率。会增加计算时间 tol=0.001, # 误差项达到指定值时则停止训练,默认为0.001
cache_size=200, class_weight=None, verbose=False, max_iter=-1,
decision_function_shape='ovr', random_state=None )
核函数
核函数是SVM中的一个关键概念,它允许算法在高维空间中寻找最优超平面,而无需直接在高维空间中计算点积。常见的核函数包括:
- 线性核:适用于线性可分数据。
- 多项式核:提供不同程度的非线性。
- 径向基函数(RBF)核:最常用的核函数之一,适用于各种非线性问题。
- Sigmoid核:类似于神经网络中的激活函数。
结论
SVM是一种强大的分类算法,适用于各种类型的数据集,特别是高维数据。通过核技巧,它能够有效处理非线性问题,而最大间隔原则则提供了对数据波动的鲁棒性。尽管SVM在计算上可能需要更多的资源,但它的预测准确性和模型性能使其成为许多机器学习任务的首选算法。
优点
-
高维空间处理能力:SVM特别擅长处理高维数据,因为它的复杂度与特征空间的维数无关,而是与支持向量的数量相关。
-
泛化能力强:SVM通过选择支持向量来构建决策边界,这使得它在新数据上的泛化能力较强。
-
核技巧:SVM可以使用核函数将数据映射到高维空间,在高维空间中寻找线性分割的可能性,从而解决非线性问题。
-
稳健性:SVM对于数据中的噪声和异常值具有较好的鲁棒性,因为它只依赖于支持向量,而不是整个数据集。
-
最大间隔:SVM的目标是最大化决策边界的间隔宽度,这有助于提高分类的准确性和模型的泛化能力。
缺点
-
对核函数和参数选择敏感:SVM的性能在很大程度上依赖于核函数的选择和参数(如惩罚参数C和核函数参数)的设置,这可能需要大量的实验调参。
-
数据预处理要求高:SVM对数据的尺度非常敏感,需要进行适当的特征缩放或归一化处理,以避免模型性能受到影响。
-
对不平衡数据集的敏感性:在类别不平衡的数据集中,SVM可能会偏向于多数类,需要采用一些策略(如权重调整)来处理不平衡问题。
SVM的实际应用
- 图像识别:SVM可以用于图像分类和对象识别任务。
- 文本分类:在自然语言处理中,SVM用于文档分类和情感分析。
- 生物信息学:SVM在基因表达数据分析和疾病诊断中得到应用。
- 医疗诊断:SVM用于基于临床数据的疾病预测和诊断。
SVM算法特性
- 最大间隔原则:SVM的目标是找到具有最大间隔的决策边界,这使得模型对数据中的小波动更加鲁棒。
- 核技巧:SVM通过核函数将数据映射到高维空间,以处理非线性问题,而无需显式地计算高维空间中的点积。
- 正则化:SVM通过正则化项控制模型复杂度,防止过拟合。
逻辑斯蒂回归(LR)和支持向量机(SVM)算法比较:
相同点
- 分类算法:LR和SVM都是用于分类的算法,尤其擅长处理二分类问题。
- 线性模型:在不使用核函数的情况下,它们都是线性分类模型,即它们的决策边界是线性的。
- 监督学习:LR和SVM都属于监督学习算法,需要有标签的训练数据来学习模型。
- 判别模型:它们都是判别模型,用于预测给定输入属于特定类别的概率或距离。
不同点
- 损失函数:LR基于最大似然估计,其损失函数是交叉熵损失;而SVM基于间隔最大化,其损失函数是合页损失(Hinge Loss)。
- 概率解释:LR能够提供概率解释,可以生成预测结果的概率;SVM不直接提供概率输出,尽管可以通过某些技术如Platt缩放来获得概率估计。
- 对异常值的敏感度:SVM由于其最大间隔原理,对异常值和噪声具有较高的鲁棒性;LR则对异常值较为敏感。
- 处理非线性问题:SVM可以通过核技巧处理非线性问题,而LR通常不使用核函数,处理非线性问题的能力有限。
- 模型复杂度:SVM通常在模型复杂度上具有优势,因为它只关注支持向量;而LR需要考虑所有数据点。
- 计算复杂度:SVM的计算复杂度通常较高,特别是在使用非线性核时;LR的计算相对简单,适合大规模数据集。
应用场景
- LR:适用于数据集较小、特征维度不太高的场景,以及需要概率解释的情况。
- SVM:适用于数据集较大或特征维度较高的情况,以及需要处理非线性问题的场景。
感谢阅读,如有建议或错误,谢谢提出 !