机器学习第三个算法SVM上(支持向量机)

突然发现看彭亮老师视频的人很多,而且看完写博客的人也很多,见到一个哥们基本上把彭良老师的视频内容完整的搬抄到博客上,代码什么的也基本没改动,这就可以让我先看博客再看视频,最后自己写博客这样一种思路来学习。然后看博客的过程中发现了好多大神。
那哥们博客


SVM 全名support vector Machine ,翻译成中文是支持向量机,据说是机器学习中近十几年来最好的算法之一,最早是由Vladimir N.Vapnik 和Alexey Ya.Chervonenkis 在1963年提出的。这也是一种分类算法,根据所给数据,画出一条超平面将数据隔开,而这个超平面就是我们所需要训练的模型。
(机器学习一般框架:训练集->提取特征向量->结合一定算法,分类器:比如决策树,KNN->得到结果)


具体举例:
这里写图片描述

图中所示,如果让和我们去画一条直线去区别这两类数据,很明显根据直观判断我们也会选取H2这条直线来区别两类,而这中间的数学依据我们把他抽象成超平面。
这里写图片描述
总共可能有多个超平面?无数条,那么如何选取超平面呢?直观上就是选取使得边际最大的超平面,但是在数学上如何实现呢?


超平面定义:
如果是二维的,可以近似看成一条直线
如果是二维的则近似成了一条直线
这里写图片描述
用到初高中的数学基本知识,方程大于0则在线的右上方,小于0则在左下方。
这里写图片描述
抽象一下,将所有的数据点代入超平面方程,发现值大于1,我们则标记成1,小于-1,我们则标记成-1。而继续抽象综合,我们将其有的标记值也放进方程,就能得到一个凸优化的方程,具体的数学推导彭良老师忽略了,但是如果要成为高手,这个应该是需要知道的。

这里写图片描述
重要概念理一下:
我们建立的模型是一个超平面:
指得是两类数据中最中的那条线(平面)
而靠近两边数据的两条虚线是边界线边界线的斜率和超平面斜率一致。
在边界线上的数据点,成为支持向量。


举个具体例子:
这里写图片描述

简单例子里只有三个数据,分成两类,(1,1)和(2,0)是一类,(2,3)是一类,根据描述,(1,1)和(2,3)是支持向量。
简单代码如下我增加了两个点:

from sklearn import svm
import pylab as pl
import numpy as np


x = [[2,0],[0,0],[1,1],[2,3],[4,5]] #点的坐标
y = [0,0,0,1,1]  #对应的分类



clf = svm.SVC(kernel = 'linear')  #线性分类
clf.fit(x,y)

#print(clf)
#print(clf.support_vectors_)  #    支持向量
#print(clf.support_)         
#print(clf.n_support_)
#print(clf.predict([[5,6]]))

w = clf.coef_[0]   #目前只有一个权重
#print(w)
a = -w[0]/w[1]     #斜率
xx = np.linspace(-5,5)
yy = a*xx -(clf.intercept_[0]/w[1])
#print(clf.intercept_[0])


b = clf.support_vectors_[0]#支持向量,第一个点
#print(b)
yy_down = a * xx +(b[1] - a * b[0])  #截距
b = clf.support_vectors_[-1]  #最后一个点
yy_up = a * xx +(b[1] - a *b[0])

print("w:"+str(w))
print("a:"+str(a))
print("support_vectors_:"+str(clf.support_vectors_))
print("coef_:"+str(clf.coef_))



pl.plot(xx,yy,'r-')       #中间那条线
pl.plot(xx,yy_up,'k--')   #这画的是上面支持向量
pl.plot(xx,yy_down,'k--') #这画的是下面的支持向量

print(clf.support_vectors_)




pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100,facecolor='k')

pl.scatter([2,0,1,2,4],[0,0,1,3,5],c = y,cmap=pl.cm.Paired,s=50)

pl.axis("tight")
pl.show()


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值