1、背景
1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出
1.2 目前的版本(soft margin)是由Corinna Cortes 和 Vapnik在1993年提出,并在1995年发表
1.3 深度学习(2012)出现之前,SVM被认为机器学习中近十几年来最成功,表现最好的算法
2、机器学习的一般框架
训练集==提取特征向量==结合一定的算法==(分类器:决策树、,KNN)==得到结果
3、介绍
3.1例子:
介绍:二类线?那条线更好
![](https://img.haomeiwen.com/i11593188/c3a54dd2b134424b.png)
3.2svm寻找区分的超平面(hyper plane),边界最大
![](https://img.haomeiwen.com/i11593188/f08bdb442397f739.png)
总共可以有多少可能的超平面,?如何选取使得平面最大的超平面(max margin hyperplane)
超平面到一侧最近点的距离等于另外一侧最近点的距离,二侧的二个超平面平行。
3、线性可分(linear separable)和线性不可分(linear inseparable)
![](https://img.haomeiwen.com/i11593188/6910292d785de91f.png)
4、定义和公式
超平面的定义:
W*X+b=0
W={w1,w2,....wn}
W: weight vectot,n是特征值的个数, X: 训练实例,b: bias
4.1假设为2维特征向量:X=(x1,x2)
![](https://img.haomeiwen.com/i11593188/143ba10772455535.png)
![](https://img.haomeiwen.com/i11593188/bf2ba2af3daffbee.png)
![](https://img.haomeiwen.com/i11593188/e5c5756f94da34d5.png)
5.2对于任何测试(要归类)代入公式,得出的符号是正还是负
![](https://img.haomeiwen.com/i11593188/ce283e7c0005dc80.png)
测试代码:
from sklearnimport svm
x=[[2,0],[1,1],[2,3],[3,4],[3,5]]
y=[0,0,1,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([[2,0]]))#测试
import numpyas np
import pylabas pl
#主要对Python进行画图的操作
from sklearnimport svm
#产生数据,随机数
np.random.seed(100)
X=np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]]
#产生20个点的2维的,均值和方差都为2的二维数组,可以使用一条直线分开
Y=[0]*20+[1]*20
#使用svm,产生模型
clf=svm.SVC(kernel='linear')
clf.fit(X,Y)
#得到超平面get the separating hyperplane
w=clf.coef_[0]#参数
a=-w[0]/w[1]#斜率
xx=np.linspace(-5,5)#xx的值
yy=a*xx-(clf.intercept_[0])/w[1]#画出斜线
#取出二个支持向量,求出二个向量的直线,最大化边界
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])
print ("w:",w)
print ("a:",a)
print ("support_vectors_",clf.support_vectors_)
print ("clf.coef_",clf.coef_)
pl.plot(xx,yy,'k-')
pl.plot(xx,yy_down,'k--')
pl.plot(xx,yy_up,'k--')
pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,-1],s=80,facecolors='none')
pl.scatter(X[:,0],X[:,-1],c=Y,cmap=pl.cm.Paired)#scatter显示出离散的点
pl.axis('tight')
pl.show()
网友评论