SVM原理
二分类模型,学习策略为间隔最大化(基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器)
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
- 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
- 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
注:以上各SVM的数学推导应该熟悉:硬间隔最大化(几何间隔)—学习的对偶问题—软间隔最大化(引入松弛变量)—非线性支持向量机(核技巧)。
logistic回归
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x)=g(\theta^Tx)=\frac 1 {1+e^{-\theta^{Tx}}}
hθ(x)=g(θTx)=1+e−θTx1
自变量(
θ
T
x
\theta^Tx
θTx)的取值为正负无穷,将其使用logstic回归函数进行映射到(0,1),映射后的值被称为属于y=1的概率;
对于分类问题,只需要知道
h
θ
(
x
)
h_\theta(x)
hθ(x),当
h
θ
(
x
)
h_\theta(x)
hθ(x)大于0.5则分类为1,否则是0类;而实际这只是一个映射函数,只需要知道自变量的取值即可:
当自变量
θ
T
x
>
0
\theta^Tx>0
θTx>0,此时y>0.5,分为1类;
θ
T
x
<
0
\theta^Tx<0
θTx<0,分为0类
现在改变类别为-1,1类,并且假设
z
=
θ
T
x
z=\theta^Tx
z=θTx;其中
θ
T
x
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
\theta^Tx=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n
θTx=θ0+θ1x1+θ2x2+...+θnxn,将
θ
0
\theta_0
θ0换成b后,等式化简为
θ
T
x
=
w
T
x
+
b
\theta^Tx=w^Tx+b
θTx=wTx+b;
有新的映射关系:
g
(
z
)
=
{
1
z
>
=
0
−
1
z
<
0
g(z)=\begin{cases} 1&z>=0 \\-1&z<0\end{cases}
g(z)={1−1z>=0z<0
线性分类
分隔超平面,将数据分开,其中分隔超平面可以是
f
(
x
)
=
w
T
x
+
b
f(x)=w^Tx+b
f(x)=wTx+b;此时的f(x)也就相当于上面的自变量z
当f(x)等于0,x便是位于超平面上的点,
当f(x)>0对应的便是y=1的点,
当f(x)<0便是对应y=-1的点
判定分隔超平面的标准是,找到的这条直线离两边的数据间隔最大,即寻找最大间隔超平面
函数间隔、几何间隔
超平面wx+b=0确定后,|wx+b|就能够表示点x到超平面距离的远近;y*(w*x+b)的正负性就可以判断分类的准确性;
函数间隔:
γ
^
=
y
(
w
T
x
+
b
)
=
y
f
(
x
)
\hat\gamma=y(w^Tx+b)=yf(x)
γ^=y(wTx+b)=yf(x);所有样本点的函数间隔最小值,记为 超平面(w,b)关于训练集的函数间隔
但这样定义,当w,b若改为2w,2b后,函数间隔就变成了原来的两倍,而此时的超平面并没有改变,因此提出了几个间隔;
假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,为样本x到超平面的距离,如图:
根据平面几何知识,有:
x0在超平面上,有
w
T
x
0
=
−
b
w^Tx_0=-b
wTx0=−b;||w||为w的二阶范数,恒有
∣
∣
w
∣
∣
2
=
w
T
w
||w||^2=w^Tw
∣∣w∣∣2=wTw;上面x的等式,两边同时成
w
T
w^T
wT,化简得:
γ
=
f
(
x
)
∣
∣
w
∣
∣
\gamma=\frac {f(x)} {||w||}
γ=∣∣w∣∣f(x)
为了得到
γ
\gamma
γ的绝对值,可以乘对应的类别y,于是有几何间隔:
γ
‾
=
γ
^
∣
∣
w
∣
∣
\overline\gamma=\frac{\hat\gamma} {||w||}
γ=∣∣w∣∣γ^
几何间隔y*(wx+b)=y*f(x)实际上就是|f(x)|
最大间隔分类器
几何间隔最大化,最大间隔分离超平面,具体是可以表示为下面的约束最优化问题:
max
w
,
b
γ
\max_{w,b} \gamma
w,bmaxγ
s.t.
y
i
(
w
∣
∣
w
∣
∣
∗
x
i
+
b
∣
∣
w
∣
∣
)
>
=
γ
y_i(\frac w{||w||}*x_i+\frac b{||w||})>=\gamma
yi(∣∣w∣∣w∗xi+∣∣w∣∣b)>=γ其中约束条件表示超平面(w,b)关于每一个训练样本点的几何间隔至少是
γ
\gamma
γ;
SVM是用的是哪个库?Sklearn/libsvm中的SVM都有什么参数可以调节?
采用sklearn.svm.SVC设置的参数。
SVC函数的训练时间是随训练样本平方级增长,所以不适合超过10000的样本。
对于多分类问题,SVC采用的是one-vs-one投票机制,需要两两类别建立分类器,训练时间可能比较长。
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)
参数:
C:C-SVC的惩罚参数C?默认值是1.0; C越大,相当于惩罚松弛变量,希望松弛变量接近0,
即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,
但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
kernel :核函数,默认是rbf,可以是‘linear’,‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
0 – 线性;1 – 多项式;2 – RBF函数;–sigmoid
degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
Gamma :‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是‘auto’,则会选择1/n_features
coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
probability :是否采用概率估计?.默认为False
shrinking :是否采用shrinking heuristic方法,默认为true
tol :停止训练的误差值大小,默认为1e-3
cache_size :核函数cache缓存大小,默认为200
class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
verbose :允许冗余输出?
max_iter :最大迭代次数。-1为无限制。
decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
random_state :数据洗牌时的种子值,int值
主要调节的参数有:C、kernel、degree、gamma、coef0。
参考文献:
https://blog.csdn.net/v_july_v/article/details/7624837
李航,统计学习方法