SVM支持向量机分类算法

SVM(Support Vector Machine)支持向量机是建立于统计学习理论上的一种二类分类算法,适合处理具备高维特征的数据集。它对数据的分类有两种模式,一种是线性可分割,另一种是线性不可分割(即非线性分割)。SVM思想是:通过某种核函数,将数据在高维空间里寻找一个最优超平面,能够将两类数据分开。支持向量是距离最优超平面最近的实例,因此有该算法用到的实例数据量相较其他会少巨多的说法,可以研究体会下。
 
针对不同数据集,不同核函数的分类效果可能完全不一样。可选的核函数有这么几种:
线性函数:形如K(x,y)=x*y这样的线性函数;
多项式函数:形如K(x,y)=[(x·y)+1]^d这样的多项式函数;
径向基函数:形如K(x,y)=exp(-|x-y|^2/d^2)这样的指数函数;
Sigmoid函数:......
 
SVM的一般流程
(1)收集数据:可以适用任意方法
(2)准备数据:需要数值型数据
(3)分析数据:有助于可视化分割 超平面
(4)训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优
(5)测试算法:十分简单的计算过程就可以实现
(6)使用算法:几乎所有二类分类问题都可以使用SVM,对多类问题需要对代码做一些修改
 
 
简单示例1
import numpy as np
import pylab as pl
from sklearn import svm
 
x = [[1, 1], [2, 5], [5, 5], [2, 4]]
y = [5, 6, 5,6]  #对应x的分类标记
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([[4, 4]])  #测试数据
 
输出:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
[[1. 1.]
 [5. 5.]
 [2. 4.]]
[0 2 3]
[2 1]
[5]
 
 
简单示例2
import numpy as np
import pylab as pl
from sklearn import svm
 
#生成随机点数据集
np.random.seed(0) 
x = np.r_[np.random.randn(5, 2) - [2, 2], np.random.randn(5, 2) + [2, 2]]
y = [0] *5 +[1] * 5
print x
print y
 
clf2 = svm.SVC(kernel='linear')
clf2.fit(x, y)
print clf2.support_
print clf2.support_vectors_  
 
#画出散点图
#画出支持向量的点,参数:x,y,大小
pl.scatter(clf2.support_vectors_[:, 0],clf2.support_vectors_[:, 1],s=100)
#画出全部的点,参数:x,y,颜色,colormap,形状
pl.scatter(x[:, 0],x[:, 1],c=y,cmap=pl.cm.Paired,marker='o')
pl.axis('tight')
pl.savefig('LinearSVC.png')
pl.show()
 
输出:
LinearSVC.png图片粘贴失败,程序运行看吧。
 
 
posted @ 2019-11-01 14:05  数之美  阅读(1977)  评论(0编辑  收藏  举报