麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

一 支持向量机 

机器学习的一般框架

  训练集->提取特征向量->结合一点的算法->得到结果

1.超平面的概念 寻找出分两类的超平面,使边际最大 

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

1)将边际设置为最大是为了减少犯错的机会 

2)超平面到两侧最近点的距离是相等的

线性可区分和线性不可区分:上面是可区分 下面是不可区分

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

2.定义与公式建立

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

 

 知乎解释SVM链接:https://www.zhihu.com/question/21094489

二 python代码实现

线性可分的情况下的代码实现

'''
通过调用sklearn svm工具包来实现1
'''
from sklearn import svm

x = [[2,0],[1,1],[2,3]]     #三个点 (2,0) (1,1) (2,3)
y = [0,0,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())
'''
通过调用sklearn svm工具包来实现2
'''
import  numpy as np
import pylab as pl
from sklearn import svm

np.random.seed(0)
X = np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2) + [2,2] ]
Y = [0]*20 + [1]*20
# print(Y)
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]

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

pl.plot(xx,yy,'k-')
pl.show();

 

线性不可分的情况下

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

 

将低维的线性不可分转为高维的线性可分情况,采用kernel trick方法实现

常用核函数:

麦子学院机器学习基础(4)-(支持向量机(SVM))(python)

 

转载于:https://www.cnblogs.com/xiaoqi254789/articles/8353093.html