目录
1. 支持向量机原理
1.1 分类问题
添加一组数据,会发现右边的数据更加合理
那么,如何选择最好的那条线?
1.2 支持向量机本质
理解支持向量机的第一个层次==>支持向量
•找到正确分类训练数据的一组直线。
•在找到的所有直线中,选择那条离最接近的数据点距离最远的直线。
距离最接近的数据点称为支持向量(support vector)。支持向量定义的沿着分隔线的
区域称为 间隔(margin)
目标:找到一个超平面,使得它能够尽可能多的将两类数据点正确的分开,同时使分开的两类数据点距离分类面最远。
理解支持向量机的第二个层次==>允许误差
SVM允许我们通过参数 C 指定愿意接受多少误差:如图所示,如果误差为零则是黑虚线;如果允许误差可能会得到粉红实现,得
到更好的分类效果。
理解支持向量机的第三个层次==>非线性可分——降维打击
在低维线性不可分可以投影到高维空间进行区分
再将高维空间的数据映射回去:
思考:映射回原空间的分类超平面是什么样的?
理解支持向量机的第四个层次==>核函数
实际中,会经常遇到线性不可分的样例。此时常用做法是把样例特征映射到高维空间中去,相关特征便被分开了,也就达到了分类的目的;
但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的。
核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数事先在低维.上进行计算,而将实质.上的分类效果表现在了高维上,也就避免了直接在高维空间中的复杂计算。
能这样做的条件是:
- 定义的核函数能够对应于特征空间中的内积;
- 识别方法中不需要计算特征空间中的矢量本身,而只须就算特征空间中两个矢量的内积。
几类常用的核函数:
1、线性核函数
2、多项式核函数
d为多项式阶数
3、高斯核函数
*2为方差
2.支持向量机实战
步骤:
1.导入库 from sklearn import svm
2.模型定义 model = svm. SVC()
3.模型函数 model. fit(trainingMat, hwl abels )
4. 模型测试 classifierResult = model. predict (vectorUnderTest)
实现代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm #1.导入库
fight=(3,2,1,101,99,98)
kiss=(104,100,81,10,5,2)
filmtype=(1,1,1,2,2,2)
plt.scatter(fight,kiss,c=filmtype)
x=np.array([fight,kiss])
y=np.array(filmtype)
x=x.T
print(x)
print(y)
model=svm.SVC()#2.训练模型
model.fit(x,y)#3.训练函数
xx=np.array([18,90])
result = model.predict(xx.reshape(1,-1))#4.模型测试,reshape将数据归整
print("result",result)
运行结果:result [1]