资源描述:
《程序员训练机器学习 svm算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法。本文主要阐述了SVM是如何进行工作的,同时也给出了使用PythonScikits库的几个示例。SVM作为一种训练机器学习的算法,可以用于解决分类和回归问题,还使用了kerneltrick技术进行数据的转换,再根据转换信息在可能的输出之中找到一个最优的边界。【CSDN报道】支持向量机(SupportVectorMachine)已经成为一种非常受欢迎的算法。在这篇文章里,GregLamp简单解释了它是如何进行工作的,同时他也给出了使用PythonScikits库的几
2、个示例。所有代码在Github上都是可用的,GregLamp以后还会对使用Scikits以及Sklearn的细节问题进行更深一步的阐述。CSDN对本篇技术性文章进行了编译整理:SVM是什么?SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为kerneltrick的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界。简单来说,就是做一些非常复杂的数据转换工作,然后根据预定义的标签或者输出进而计算出如何分离用户的数据。是什么让它变得如此的强大?当然,对于SVM来
3、说,完全有能力实现分类以及回归。在这篇文章中,GregLamp主要关注如何使用SVM进行分类,特别是非线性的SVM或者SVM使用非线性内核。非线性SVM意味着该算法计算的边界没有必要是一条直线,这样做的好处在于,可以捕获更多数据点集之间的复杂关系,而无需靠用户自己来执行困难的转换。其缺点就是由于更多的运算量,训练的时间要长很多。什么是kerneltrick?kerneltrick对接收到的数据进行转换:输入一些你认为比较明显的特征进行分类,输出一些你完全不认识的数据,这个过程就像解开一个DNA链。你开始是寻找数据的矢
4、量,然后把它传给kerneltrick,再进行不断的分解和重组直到形成一个更大的数据集,而且通常你看到的这些数据非常的难以理解。这就是神奇之处,扩展的数据集拥有更明显的边界,SVM算法也能够计算一个更加优化的超平面。其次,假设你是一个农场主,现在你有一个问题——你需要搭建一个篱笆来防止狼对牛群造成伤害。但是篱笆应该建在哪里呢?如果你是一个以数据为驱动的农场主,那么你就需要在你的牧场上,依据牛群和狼群的位置建立一个“分类器”,比较这几种(如下图所示)不同的分类器,我们可以看到SVM完成了一个很完美的解决方案。GregL
5、amp认为这个故事漂亮的说明了使用非线性分类器的优势。显而易见,逻辑模式以及决策树模式都是使用了直线方法。实现代码如下:farmer.pyPython1.importnumpyasnp2.importpylabaspl3.fromsklearnimportsvm4.fromsklearnimportlinear_model5.fromsklearnimporttree6.importpandasaspd7.8.9.defplot_results_with_hyperplane(clf,clf_name,df,plt_
6、nmbr):10.x_min,x_max=df.x.min()-.5,df.x.max()+.511.y_min,y_max=df.y.min()-.5,df.y.max()+.512.13.#stepbetweenpoints.i.e.[0,0.02,0.04,...]14.step=.0215.#toplottheboundary,we'regoingtocreateamatrixofeverypossiblepoint16.#thenlabeleachpointasawolforcowusingourclass
7、ifier17.xx,yy=np.meshgrid(np.arange(x_min,x_max,step),18.np.arange(y_min,y_max,step))19.Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])1.#thisgetsourpredictionsbackintoamatrix2.ZZ=Z.reshape(xx.shape)3.4.#createasubplot(we'regoingtohavemorethan1plotonagivenimage)5.p
8、l.subplot(2,2,plt_nmbr)6.#plottheboundaries7.pl.pcolormesh(xx,yy,Z,cmap=pl.cm.Paired)8.9.#plotthewolvesandcows10.foranimalindf.animal.unique():11.pl.scatter(df[df.animal==an