网站首页 > 技术文章 正文
本节我们使用支持向量机分析预测一个测试数据集,形成可视化效果。代码如下和运行效果如下,具体解释每句代码的含义。
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入绘图库
from sklearn.svm import SVC #导入支持向量机
from sklearn.datasets import make_blobs #导入数据集
#创建数据集
X,y=make_blobs(n_samples=80,centers=2,random_state=77) #创建由80个数据点组成的二分类数据集
svc=SVC(kernel='linear',C=100) #创建一个线性支持向量机,C为正则化系数,表示对误差的容忍度,越大则对模型要求越严格,越不能容忍误差,反之相反
plt.scatter(X[:,0],X[:,1],c=y,s=60,cmap=plt.cm.PRGn_r,edgecolors='w') #绘制所有特征点,特征点坐标由X[:,0]和X[:,1]共同组成
ax=plt.gca() #获取该坐标系
xlim=ax.get_xlim() #把数据集中X[:,0]的最小值和最大值赋值给变量xlim,xlim[1]为最大值 xlim[0]为最小值,ax.get_xlim()是返回图像横轴的最小值和最大值
ylim=ax.get_ylim() #把数据集中X[:,1]的最小值和最大值赋值给变量ylim,ylim[1]为最大值 ylim[0]为最小值,,ax.get_ylim()是返回图像纵轴的最小值和最大值
xx=np.linspace(xlim[0],xlim[1],20) #生成由20个数值组成的等差数列xx,点与点之间差值为(xlim[1]-xlim[0])/19
yy=np.linspace(ylim[0],ylim[1],20) #生成由20个数值组成的等差数列yy,点与点之间差值为(ylim[1]-ylim[0])/19
YY,XX=np.meshgrid(yy,xx) #画出用yy和xx的值构成的网格
xy=np.vstack([XX.ravel(),YY.ravel()]).T #ravel函数是把多维数组拉成一维数组,vstack是垂直堆叠两个数组,.T是转置原矩阵
svc.fit(X,y) #使用之前数据集创建的数据点,训练支持向量机
Z=svc.decision_function(xy).reshape(XX.shape) #decision_function通过度量样本距离分隔线的距离来表示置信度,这里用来确定分隔线和两条经过支持向量线的位置
ax.contour(XX,YY,Z,levels=[-1,0,1],alpha=0.6,linestyles=["--",'-','--']) #contour函数用来绘制等高线,这里绘制分隔线和两条经过支持向量的线
ax.scatter(svc.support_vectors_[:,0],svc.support_vectors_[:,1],s=100,linewidth=5,facecolors='red') #绘制支持向量点,用红色表示
plt.show() #显示绘制的图像
前面构造的数据集,X的形状是(80,2)即80行2列,表示特征值,y为(80,)即一行80个数据,表示标签值。正则化系数C越小代表当前构建的模型对误差的容忍度越强,对模型要求越低,我们来极端一点取C的值为0.001。
可以看到间隔更宽,支持向量点更多地落在间隔里。YY,XX=np.meshgrid(yy,xx)具体解释给个例子,如果x=[1,2],y=[4,5,6],y和x共同构建网格就是[[4,1],[5,1],[6,1]
[4,2],[5,2],[6,2]],然后我们分别取出YY=[[4,5,6] , XX=[[1,1,1],这时生成的YY和XX就是两个大小相等矩阵。YY每行都是其
[4,5,6]] [2,2,2]]
自身的副本,XX每列都是其自身的副本。YY和XX在以上程序中均为20*20的矩阵,xy=np.vstack([XX.ravel(),YY.ravel()]).T,首先把XX和YY展成一维也就是一行400个值,然后vstack
把两者垂直堆叠起来变成2*400的矩阵,接着.T进行转置变成400*2的矩阵。这样我们就构造出一个和原数据集取值范围相同的新的数据集。Z=svc.decision_function(xy).reshape(XX.shape),接着使用支持向量机预测新数据集的所有点,得到每个点属于正样本的可信度,也就是距离分隔线的距离。使用ax.contour(XX,YY,Z,levels=[-1,0,1],alpha=0.6,linestyles=["--",'-','--'])绘制三条线,分别是距离为-1的经过绿色支持向量点的直线,距离为0分隔线,以及距离为1的经过紫色支持向量点的直线,三者平行。
- 上一篇: 支持向量机(SVM)说明及示例
- 下一篇: 浅谈支持向量机(3)
猜你喜欢
- 2024-11-19 零基础学习!数据分析分类模型「支持向量机」
- 2024-11-19 机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 2024-11-19 我以前一直没有真正理解支持向量机,直到我画了一张图
- 2024-11-19 研一小姑娘分享机器学习之SVM支持向量机
- 2024-11-19 [机器学习] sklearn支持向量机
- 2024-11-19 支持向量机
- 2024-11-19 初探支持向量机:用大白话解释、原理详解、Python实现
- 2024-11-19 支持向量机的核函数
- 2024-11-19 初探支持向量机模型
- 2024-11-19 如何使用支持向量机学习非线性数据集
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)