线性(SVM):找到最好的决策边界
最大化 Margin: 决策边界最近的距离
最小的Margin之和最大化
低维映射到高维再处理,找到最优的(核方法)
一条直线方程,其中m是斜率,c是直线在y轴的截距:y= mx +c
二维空间里面,一条直线的方程可以表示为:Ax+By+C=0
三维空间里面,平面的方程可以表示为:Ax+By+Cz+D=0
那么超平面方程:
其中 w 和 x 是向量,w^T是两个向量的点积。向量w通常被称为权重。
w , x皆为向量, wx+b=0就是a1*x1+a2*x2+...an*xn+b=0
转换成求最小值:argminw,b12w2 转 换 成 求 最 小 值 : a r g m i n w , b 1 2 w 2 且 yi(wTΦ(xi)+b)⩾1 y i ( w T Φ ( x i ) + b ) ⩾ 1
L(w,b,α)=12||w||2+∑mi=1αi(1−yi(wTxi+b)) L ( w , b , α ) = 1 2 | | w | | 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) )
例题:已知如图训练集:
正例点 x1=(3,3)T,x2=(4,3)T,负例点x3=(1,1)T x 1 = ( 3 , 3 ) T , x 2 = ( 4 , 3 ) T , 负 例 点 x 3 = ( 1 , 1 ) T 。
试求最大间隔分离超平面。
在 SVM 中设定一个参数「C」;从而你可以在两种结果中权衡:
1. 拥有很宽的间隔;
2. 精确分离训练数据;
C 的值越大,意味着在训练数据中允许的误差越少。
必需强调一下这是一个权衡的过程。如果想要更好地分类训练数据,那么代价就是间隔会更宽。
以下几个图展示了在不同的 C 值中分类器和间隔的变化(未显示支持向量)。
假设X是输入空间,H是特征空间,存在一个映射ϕ使得X中的点x能够计算得到H空间中的点h ,对于所有的X中的点都成立:
若x,z是X空间中的点,函数k(x,z)满足下述条件,那么都成立,则称k为核函数,而ϕ为映射函数:
如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
对于一个二位空间 映射到 三维空间: P(x,y)=(x2,2–√xy,y2) P ( x , y ) = ( x 2 , 2 x y , y 2 )
考虑到核函数: K(v1,v2)=<v1,v2>2, K ( v 1 , v 2 ) =< v 1 , v 2 > 2 , 即“内积平方”
设二维空间存在: v1=(x1,y1),v2=(x2,y2) v 1 = ( x 1 , y 1 ) , v 2 = ( x 2 , y 2 ) 两点:
可证
from sklearn.svm.import SVC
svc = SVC(
C = 1.0,
lernel = '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
)
一些重要的参数:
C --误差项惩罚参数,C越大,越容易过拟合
kernel --核参数,'linear','poly','rbf','sigmoid'
gamma --当kernel为'poly','rbf','sigmoid'时,默认1/n_feature
parameters = {
'C':[0.001,0.01,0.1,1,10,1000],
'kernel':['linear','poly','rbf','sigmoid']
'gamma':[0.0001,0.001]
}
svm= SVC()
grid_search = GridSearchCV(svm,parameters,scoring = 'accuracy',cv = 5)
grid_search.fit(x,y)
支持向量机是一个‘超平面分类算法’
最佳超平面-->支持向量Margin(间隔)最大的超平面
支持向量就是离超平面最近的数据点
数据低维--kernel() -->高维,使其线性分开
SVM 主要参数调优:C,gamma,kernel
SVM只支持数值型变量,分类型变量-->onehot编码
SVM对缺失值敏感,需提取处理
SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。