SVM算法

2018-05-16  本文已影响0人  遇见百分百

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例子:

    介绍:二类线?那条线更好

3.2svm寻找区分的超平面(hyper plane),边界最大

总共可以有多少可能的超平面,?如何选取使得平面最大的超平面(max margin hyperplane)

超平面到一侧最近点的距离等于另外一侧最近点的距离,二侧的二个超平面平行。

3、线性可分(linear separable)和线性不可分(linear inseparable)

4、定义和公式

超平面的定义:

W*X+b=0

W={w1,w2,....wn}

 W: weight vectot,n是特征值的个数, X: 训练实例,b: bias

4.1假设为2维特征向量:X=(x1,x2)

5.2对于任何测试(要归类)代入公式,得出的符号是正还是负

测试代码:

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()

上一篇 下一篇

猜你喜欢

热点阅读