1,在svm向量机中我们要找到一个相平面来对数据进行分类;而这个相平面应该怎么样选择呢?
现在我们给出两个相平面的分类图看看,而我们需要找到相平面法中边际最大的一个。
那么我们怎么样来找到这个相平面函数方程呢?
我们可以定义一个向量方程WX +b =0,而在这个例子中我们用到一个二维平面,及方程可以是w0+w1x1+w2x2=0(此方程就是上面larg margin里面的那条实线方程)。
而在上面实线下面的方程可以表示为:w0+w1x1+w2x2<0,而实线上面的方程可以表示为:w0+w1x1+w2x2>0.
为了统一调节weight,我们引入yi(+1或-1),从而将公式统一成一个公式:
因此我们来用数学建模的方法来求解最优解吧!
所以我们用求解直线间的距离公式来求解这两条直线(wx+b=0和w*x+b=c的距离):两条平行直线之间的距离:(我们换中方法来求解两条直线之间的距离,定义直线的方程为L1:Ax+By+c1=0,L2:Ax+By+c2=0;故两直线之间的距离为:
从而我们总结一下公式如下:
所以我们可以得到如下的总结:
约束条件和目标函数:
构建拉格朗日数乘法来求解最优值:待补充:
2,我们来举一个简单例子来说明一下:
代码实现如下:simplesvm.py
from sklearn import svm
x = [[2, 0], [1, 1], [2, 3]]
y = [0, 0, 1]
#调用svm的分类器函数
clf = svm.SVC(kernel = 'linear')
#建立模型
clf.fit(x, y)
print(clf)
# get support vectors
print( clf.support_vectors_)
# get indices of support vectors
print( clf.support_)
# get number of support vectors for each class
print (clf.n_support_)
运行结果如下:
结果说明:SVC就是clf的打印;
[[1,1],[2,3]]是满足svm的值,[1 2]表明支持向量机的下标点[1 2]表明找到第2和3个点满足。
[1 1]表示找到了几个支持向量,相平面上面一个,下面一个。
测试:
代码最后一行加入:
print(clf.predict([[1,1]]))