支持向量机SVM
SVM-核函数(Kernels)
非线性决策边界
对于下图中的数据集分类,我们一般会想到构造多项式特征变量:
现在我们在仅有x1和x2组成的特征轴上选取三个点-landmarks(忽略x0):\(l^{(1)},l^{(2)},l^{(3)}\)。接下来按照以下方式定义新的特征变量:
给定x:f1= similarity\((x,l^{(1)})\)=exp(\(-\frac{\left \|x-l^{(1)} \right \|^2}{2\delta^2}\))
f2= similarity\((x,l^{(2)})\)=exp(\(-\frac{\left \|x-l^{(2)} \right \|^2}{2\delta^2}\))
f3= similarity\((x,l^{(3)})\)=exp(\(-\frac{\left \|x-l^{()3} \right \|^2}{2\delta^2}\))
这里的相似度函数similarity为核函数(Gaussian kernels)
现在对于给定初识条件:
对于有一个训练样本x为图中红点处,模型设计算出参数值\(\theta_0=-0.5,\theta_1=1,\theta_2=1,\theta_3=0\),现在样本距离标点1处很近,而与标点2、3的距离较远,所以f1=1,f2=0,f3=0(实为近似,即约为)。
核函数-Kernels
上一小节中介绍了在非线性决策边界中,不使用原本的多项式特征量,而使用高斯核函数构成特征向量,但如何选择相应的标记点(landmarks),及是否有其他的核函数并未做说明。
对于给定的m个样本\((x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\),选择标记点的选择为:
\(f_1=similarity(x,l^{(1)})\) \(f_2=similarity(x,l^{(2)})\) ....
特征向量为:,其中\(f_0=1\)
总结一下,对于任意样本(x(i),y(i))有:
对于参数theta的训练,按照以下公式(建议利用其他数值分析方面的高手提供的包来处理)
SVM-支持向量机的参数问题
-
C(=1/lambda)
C值较大时:高方差,低偏差 C值较小下:高偏差,低方差
-
\(\delta^2\)如下图
\(\delta^2\)较大时:特征很松散,高偏差,低方差
\(\delta^2\)较小下:特征很紧凑,低偏差,高方差
使用SVM
一般使用SVM软件处理包(如:liblinear,libsvm,....)以解决参数theta的优化问题。
但之前需要明确:参数C的选择,核函数(相似度函数)的选择问题。
敝如:无核函数(“linear kernel”) -->当\(\theta^Tx \ge 0\),预测“y=1”
高斯核函数:,需要注意参数\(\delta^2\)的选择。
核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数有:线性核函数,多项式核函数Polynomial'kernel ,径向基核函数,Sigmoid核函数和复合核函数,傅立叶级数核,B 样条核函数和张量积核函数等。
多类分类问题,如下图所示:
逻辑回归vs神经网络vsSVMs
n=特征数目,m=训练样本数目
-
如果n的数目远远大于m:
使用逻辑回归或不含核(线性核)的SVM
-
如果n很小,m取值介于中间(m=10-10000)
使用带有高斯核的SVM
-
若n很小,m值很大(m=50000+)
创建/增加更多的特征,然后使用逻辑回归或不含核函数的SVM
-
神经网络对于上述较多的情形,但训练量很大,训练很慢