python3 svm实现

1,在svm向量机中我们要找到一个相平面来对数据进行分类;而这个相平面应该怎么样选择呢?
在这里插入图片描述
现在我们给出两个相平面的分类图看看,而我们需要找到相平面法中边际最大的一个。
在这里插入图片描述
在这里插入图片描述那么我们怎么样来找到这个相平面函数方程呢?
我们可以定义一个向量方程WX +b =0,而在这个例子中我们用到一个二维平面,及方程可以是w0+w1x1+w2x2=0(此方程就是上面larg margin里面的那条实线方程)。
而在上面实线下面的方程可以表示为:w0+w1x1+w2x2<0,而实线上面的方程可以表示为:w0+w1x1+w2x2>0.
为了统一调节weight,我们引入yi(+1或-1),从而将公式统一成一个公式:
在这里插入图片描述
在这里插入图片描述
因此我们来用数学建模的方法来求解最优解吧!
在这里插入图片描述所以我们用求解直线间的距离公式来求解这两条直线(w
x+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]]))
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开缓缓归以

你的鼓励将是我创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值