支持向量机之计算最大间隔超平面

1.导入模块

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt
%matplotlib inline
#导入支持向量机
from sklearn.svm import SVC

2.生成聚类数据

smaples,target = make_blobs(n_samples=40,n_features=2,centers=2)

#make_blobs为聚类数据生成器
参数含义:
n_samples是待生成的样本的总数。
n_features是每个样本的特征数。
centers表示类别数。
cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]
  • 生成的聚类数据如图:

这里写图片描述

3.创建向量机对象,指定内核

svc = SVC(kernel='linear')

4.训练模型

svc.fit(samples,target)

5.确定最大间隔超平面

  • 计算超平面的斜率
#svc.coef_为向量机模型系数,w为待求的超平面斜率
w = (-svc.coef_[:,0]/svc.coef_[:,1])[0]
  • 计算超平面的截距
#k为待求的超平面截距
k=svc.intercept_[0]
  • 计算超平面
#超平面计算公式:y=w*x +k
xmin,xmax = samples[:,0].min(),samples[:,0].max()
x= np.arange(xmin,xmax,0.01)
y=w*x+k
  • 绘制超平面
plt.plot(x,y)
plt.scatter(samples[:,0],samples[:,1],c=target)

这里写图片描述

6.获取支持向量

#直接获取支持向量a1为第一个支持向量,a2为第二个支持向量
a1 = svc.support_vectors_[0]
a2 = svc.support_vectors_[-1]
display(a1,a2)

7.画出约束边界

  • 计算约束边界的截距(斜率和超平面斜率一致,不需要重新计算)
#y1 = w*x +k1 ---->  k1 = y1 -wx1
#y2 = w*x +k2 ---->  k2 = y2 -wx2

k1 = a1[1]-w*a1[0]
k2 = a2[1]-w*a2[0]
  • 画出约束边界、支持向量
#计算边界坐标
y1 = w*x +k1
y2 = w*x +k2

#绘制约束边界

#边界线1
plt.plot(x,y1,color='blue')
#边界线2
plt.plot(x,y2,color='blue')

#最大间隔超平面
plt.plot(x,y)
#原图像分布点
plt.scatter(samples[:,0],samples[:,1],c=target)
#支持向量
plt.scatter(svc.support_vectors_[:,0],svc.support_vectors_[:,1],color='r')

这里写图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值