数据挖掘十大经典算法之支持向量机(SVM)

支持向量机(SVM) 它是一种监督式学习的方法,广泛应用于统计分类和回归分析中。
一、主要思想 1. 它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;
2. 它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。
概括:支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。
有很多个分类器(超平面)可以把数据分开,但是只有一个能够达到最大分割。 我们通常希望分类的过程是一个机器学习的过程。这些数据点并不需要是中的点,而可以是任意(统计学符号)中或者(计算机科学符号) 的点。我们希望能够把这些点通过一个n-1维的超平面分开,通常这个被称为线性分类器。有很多分类器都符合这个要求,但是我们还希望找到分类最佳的平面,即使得属于两个不同类的数据点间隔最大的那个面,该面亦称为最大间隔超平面,会更有鲁棒性。如果我们能够找到这个面,那么这个分类器就称为最大间隔分类器。
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
图解 二、目标函数: SVM是要使到超平面最近的样本点的“距离”最大。
使margin最大化,margin为
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
之后再进行化简转化...
具体推导见:https://zhuanlan.zhihu.com/p/77750026?utm_source=wechat_session
线性不可分时: 将低维空间映射到高维空间,使其线性可分。例如
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
线性不可分 数据挖掘十大经典算法之支持向量机(SVM)
文章图片
映射到高维空间后可分 而此时,会造成计算量太大,也容易过拟合,有学者已经解决了这个问题。使用核函数k(x,y)的计算结果与高维空间的内积计算相同,可以代替。
常用核函数有:线性核函数、多项式核函数和高斯核函数。
三、优缺点 1. 优点
有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
能找出对任务至关重要的关键样本(即:支持向量);
采用核函数技巧之后,可以处理非线性分类/回归任务;
最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
2. 缺点
训练时间长。
当采用核技巧时,如果需要存储核矩阵,则空间复杂度为;
模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。
因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。但是有的说适用于大量数据,笔者还未弄明白。
四、SVC方法 sklearn.svm.SVC(C=1.0,kernel='rbf', degree=3, gamma='auto',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200, class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)
参数说明:
lC:C-SVC的惩罚参数C?默认值是1.0
C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
lkernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
0 – 线性:u’v
1 – 多项式:(gamma*u’*v + coef0)^degree
2 – RBF函数:exp(-gamma|u-v|^2)
3 –sigmoid:tanh(gamma*u’*v + coef0)
ldegree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
lgamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features
lcoef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
lprobability :是否采用概率估计?.默认为False
lshrinking :是否采用shrinking heuristic方法,默认为true
ltol :停止训练的误差值大小,默认为1e-3
lcache_size :核函数cache缓存大小,默认为200
lclass_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
lverbose :允许冗余输出?
lmax_iter :最大迭代次数。-1为无限制。
ldecision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
lrandom_state :数据洗牌时的种子值,int值
主要调节的参数有:C、kernel、degree、gamma、coef0。
五、SVR 1. 介绍
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
SVM/SVR图示 SVR回归与SVM分类的区别在于,SVR的样本点最终只有一类,它所寻求的最优超平面不是SVM那样使两类或多类样本点分的“最开”,而是使所有的样本点离着超平面的总偏差最小。SVM是要使到超平面最近的样本点的“距离”最大;SVR则是要使到超平面最远的样本点的“距离”最小。
【数据挖掘十大经典算法之支持向量机(SVM)】统计上的理解就是:使得所有的数据的类内方差最小,把所有的类的数据看作是一个类。
传统的回归方法当且仅当回归f(x)完全等于y时才认为是预测正确,需计算其损失;而支持向量回归(SVR)则认为只要是f(x)与y偏离程度不要太大,既可认为预测正确,不用计算损失。具体的就是设置一个阈值α,只是计算 |f(x) - y| > α 的数据点的loss。如图:支持向量回归表示只要在虚线内部的值都可认为是预测正确,只要计算虚线外部的值的损失即可。
数据挖掘十大经典算法之支持向量机(SVM)
文章图片
SVR超平面示意图 损失函数相关的问题及改进:
在SVR中对于损失函数构成的模型,有些权重很大,有些权重很小,这样就会容易导致过拟合(就是过分拟合了训练数据集),而过拟合则是因为样本太多的特征被包含进来,很多与项目本身无关的特征也被包含进来。
解决过拟合问题有很多方式,常见的有以下几种:
1).喂数据,也就是给足够多的数据,只有数据多了,数据的很多特征才会更加明显的体现出来,训练的模型也会不断的修正,特征的作用也会体现的越来越大。
2).特征降维,越多的特征导致训练集的维度越高,降维就是把高维空间的数据投影到低维空间中(保存下来的特征是数据量大的)。主要有:PCA降维(主成分分析,无监督)、反向特征消除、随机森林/组合树、LDA(线性判别分析,有监督)、LLE(局部线性嵌入)、Laplacian Eigenmaps(拉普拉斯特征映射)等
3).针对具体的负荷预测,对电量值进行标准化或者归一化。可以时特征训练集能够快速的收敛,可以使特征值域范围变小,有利于提高精度。
2. svr方法
sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto_deprecated', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)
参数解释:
kernel: type: string;optional(default=‘rbf’)
算法中所使用的核函数类型,其中有(‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’,‘precomputer’,默认使用‘rbf’)
degree:type:int, optional(default=3)
多项式核函数的次数,默认为3,所以当核函数为‘poly’时用到,其它核函数忽略
gamma:type:float, optional(default=‘auto’)
核函数的系数, 在核函数为‘rbf’, ‘poly’, ‘sigmoid’时使用,其他核函数忽略。gamma的值必须大于0, 随着gamma的增大,对于测试集分类效果越差,对于训练集分类效果好,并且使模型的复杂度提高,泛化能力(对未知数的预测能力)较差,从而出现过拟合的情况。
coef0:type:float, optional(default=0.0)
核函数中的独立项,只在核函数为‘poly’跟‘sigmoid’时使用。
tol:type:float, optional(default=1e-3)停止判断的公差
C:type:float, optional(default=1.0)
错误项的惩罚因子:表征有多重视离群点,C越大越重视,也就是越不想丢掉这些离群点。C值大时对误差分类的惩罚增大,C值小时对误差分类的惩罚减小。当C趋近于无穷大时,表示不允许分类误差的存在;当C趋于0时,表示不再关注分类是否正确。
epsilon:type:float, optional(default=0.1)
shrinking:type:boolean,optional(default=True)
是否使用收缩启发式
cache_size:type:float, optional
内核缓存的大小
verbose:type:bool, default:False
启用详细输出。如果启用,在多线程环境下可能无法正常工作
max_iter:type:int, optional(default=-1)
解算器内迭代的硬性限制,默认为-1(无限制)
SVM常见面试问题:https://blog.csdn.net/yanhx1204/article/details/79481003
参考:
https://blog.csdn.net/u011067360/article/details/24368085
https://blog.csdn.net/qq_36523839/article/details/82383597
数学解释:https://zhuanlan.zhihu.com/p/77750026?utm_source=wechat_session
SVC方法解释:https://www.imooc.com/article/details/id/40903
SVR介绍:https://zhuanlan.zhihu.com/p/76609851、https://www.jianshu.com/p/399ddcac2178

    推荐阅读