《机器学习》学习笔记(三):支持向量机(SVM)

    MOOC上的《机器学习》课程已经更新完毕了,通过这一系列的课程,使我对机器学习有了一定的了解。这门课真的很精彩,在此再次感谢Andrew Ng教授的付出。

    本篇博客将谈一下我对支持向量机(SVM)的理解,相比于逻辑回归,支持向量机是一种更强大的二类分类模型,并且有着广泛的应用。

    本文多处公式都将借用Andrew Ng教授授课的PPT,并参考李航博士的《统计学习方法》一书。

    转载请注明出处:http://blog.csdn.net/u010278305

    支持向量机(SVM)是一种二类分类模型,它能使分类间隔最大化,并且还包括核技巧,这些特点都使它成为一个强大的分类器。本文在叙述的过程中,主要给出支持向量机(SVM)的思路,并从工程的角度给出使用方法,如果你对背后的数学原理感兴趣,请自行查阅相关资料,文中如有理解不当的地方,欢迎批评指正。

   支持向量机可以从逻辑回归引申得来,对于逻辑回归,有下图:

                                              《机器学习》学习笔记(三):支持向量机(SVM)_第1张图片

逻辑回归利用误分类最小的策略求得分离超平面,不过这时的解是有无穷多个的,而支持向量机利用间隔最大化求最优分离超平面,其解是唯一的。

支持向量机在此处的不同在于:

                                          

支持向量机的代价函数如下,在训练时,我们的目的就是要最小化该代价函数:

                                 

SVM还可以具有核函数,当我们要解决的问题具有线性的决策边界时,我们使用线性核(即不使用核函数)就可以了,但如果我们要解决更加复杂的非线性分类问题时,就可以使用一些核函数,好比高斯核,进行分类。

在使用核函数时,我们首先选定几个标记(一般选择原始的输入特征即可),然后计算每个特征与每个标记的相似度,之后把相似度作为最后的特征,送进没有核函数的支持向量机进行训练,这就是核技巧。当我们选择使用高斯核时,相似度的计算方法如下:

                                                             《机器学习》学习笔记(三):支持向量机(SVM)_第2张图片

其中,x为特征,l为我们选择的标记(选择输入的特征作为标记即可),我们需要遍历每一个标记l(i),计算输入特征与l(i)的相似度f(i)。其流程总结如下:

                                                   《机器学习》学习笔记(三):支持向量机(SVM)_第3张图片

同逻辑回归一样,我们还可以引进正则化项,来避免对训练数据的过拟合,添加正则化项之后的代价函数如下:

                                        《机器学习》学习笔记(三):支持向量机(SVM)_第4张图片

最后给出实现SVM时的注意事项:

                                     《机器学习》学习笔记(三):支持向量机(SVM)_第5张图片

其中,C可以协调正则化的程度,delta可以协调计算相似度时的方差与偏差。

下面给出高斯核函数的matlab代码:

function sim = gaussianKernel(x1, x2, sigma)
%RBFKERNEL returns a radial basis function kernel between x1 and x2
%   sim = gaussianKernel(x1, x2) returns a gaussian kernel between x1 and x2
%   and returns the value in sim

% Ensure that x1 and x2 are column vectors
x1 = x1(:); x2 = x2(:);

% You need to return the following variables correctly.
sim = 0;

% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return the similarity between x1
%               and x2 computed using a Gaussian kernel with bandwidth
%               sigma
%
%
e=exp(1);
xNorm=norm(x1-x2);
sim=e.^(-xNorm.^2/(2*sigma.^2));


% =============================================================
    
end
转载请注明出处:http://blog.csdn.net/u010278305

你可能感兴趣的:(机器学习,机器学习,支持向量机,SVM,高斯核,matlab)