基本介绍
SVM:寻找到一个超平面使样本分成两类,并且间隔最大
SVM能够执行线性或非线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。
适用于中小复杂数据集的分类。
硬间隔
严格的让所有实例都不在最大间隔之间,并且位于正确的一边,就是硬间隔
问题:数据是线性可分离时才有效;对异常值特别敏感
软间隔
尽可能在保持最大间隔宽阔和限制间隔违例(即位于最大间隔之上,甚至在错误的一边的实例)之间找到良好的平衡
更灵活
api初步认识
from sklearn import svm
X = [[0,0], [1,1]]
y = [0, 1]
ss = svm.SVC()
ss.fit(X, y)
print(ss.predict([[2,2]]))
算法原理
详情参考哔哩哔哩FunlnCode的SVM支持向量机的数学精华
Φ(x):核函数,一个确定的特征空间转换函数,作用是将x映射到更高维度
上面的就是线性可分支持向量机的模型表达式,我们需要去求这样一个模型或者是一个超平面y(x)使得能够最优的分离这两个集合(即求一组(w,b))
下一步是求目标函数的最优值,由于目标函数只有一个限制条件,所以使用拉格朗日乘子法
转换成对偶问题,变成极大极小值问题
总而言之啊,总而言之就是求出来了w然后代入超平面表达式,求出b的值,现在的w、b就是我们要寻找的最优超平面的参数
损失函数
0/1损失
分类,分对了误差就为0,分错了误差就为1
SVM Hinge损失(常用)
Logistic损失函数
SVM的核方法
核函数是一个确定的特征空间转换函数,作用是将x映射到更高维度
核函数能对低维数据进行某种低成本的运算使得运算结果等于高维空间映射函数的内积。
从低维空间到高维空间的映射,这个映射可以把低维空间中线性不可分的两类点变成线性可分的。
SVM也可用于回归
SVM的api介绍
SVC
NuSVC
class sklearn.svm.NuSVC(nu=0.5)
# nu:训练误差部分的上限和支持向量部分的下限(0,1),默认为0.5
LinearSVC
总结
SVM主要用于二分类
它的基本模型是在特征空间里寻找间隔最大化的分离超平面的线性分类器
1、当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机
2、当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机
3、当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机
优点:在高维空间非常高效、即使在数据维度比样本数量大的情况下仍然有效、在决策函数(支持向量)中使用训练集的子集,因此它也是高效利用内存的、通用,不同的核函数与特定的决策函数一一对应
缺点:特征数量比样本数量大得多时,选择核函数时要注意不要过拟合、对缺失数据敏感、对核函数的高维映射解释力不强