美文网首页
机器学习算法 - 支持向量机SVM

机器学习算法 - 支持向量机SVM

作者: 创新科技宝典 | 来源:发表于2017-08-02 21:08 被阅读0次

在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM。

SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果。

【案例背景】

从前有两个地主,他们都是占山为王的一方霸主。本来各自吃饱自己的饭万事无忧,可是人心不知足蛇吞象啊,自己总是都想占对方的一亩三分地,冲突争吵从来都没有停歇过。当时的环境就是谁狠这土地就归谁,但是我们现在想从科学的角度来分析,如何让他们的地盘均分,画条边界线,从此互不干扰呢?

【演示代码】

importnumpy as npimportmatplotlib.pylab as pltfromsklearnimportsvm#生成随机分布的点np.random.seed(1)

X=np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]]

Y=[0]*20+[1]*20#在图中画出随机分布的点plt.scatter(X[:,0],X[:,1],c=Y,s=80,cmap=plt.cm.Paired)#这里是SVM核心算法函数clf=svm.SVC(kernel='linear')

clf.fit(X,Y)#画出分割线w=clf.coef_[0]

a=-w[0]/w[1]#得到斜率xx=np.linspace(-5,5)

yy=a*xx-(clf.intercept_[0])/w[1]

plt.plot(xx,yy,'k-')#在图中画出支持向量的点的两条直线b=clf.support_vectors_[0]

yy_down=a*xx+(b[1]-a*b[0])

b=clf.support_vectors_[-1]

yy_up=a*xx+(b[1]-a*b[0])

plt.plot(xx,yy_down,'k--')

plt.plot(xx,yy_up,'k--')#将支持向量的点特殊显示plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100)#在图中显示需要预测的点test_x1, test_y1 = (-3, -3)

test_x2, test_y2= (0, 5)

plt.scatter([test_x1],[test_y1],s=100)

plt.scatter([test_x2],[test_y2],s=100)

Z1=clf.predict([[test_x1, test_y1]])

Z2=clf.predict([[test_x2, test_y2]])print('预测结果:',Z1)#显示预测结果print('预测结果:',Z2)#显示预测结果plt.show()

【执行结果】

预测结果: [0]

预测结果: [1]

【结果分析】

在上图中,用了4种颜色的圆点和三条直线,他们分别表示如下:

浅色点:地主1的建筑物

紫色点:地主2的建筑物

蓝色点:地主1和地主2相邻的关键建筑物

黄色点:预测点1

绿色点:预测点2

实体直线:最终的分界线,即楚河汉界的分界线,直线下方是地主1的地盘,直线上方是地主2的地盘。

虚线:关键点连成的直线,他们到分界线是等距的。

我们看到预测结果,黄点预测结果显示0,表示它在地主1的地盘;绿点预测结果显示1,表示它在地主2的地盘。

当然我们从肉眼也可以判断本次预测结果是对的。

相关文章

网友评论

      本文标题:机器学习算法 - 支持向量机SVM

      本文链接:https://www.haomeiwen.com/subject/vpgylxtx.html