网站首页 > 技术文章 正文
本节我们使用支持向量机分析预测一个测试数据集,形成可视化效果。代码如下和运行效果如下,具体解释每句代码的含义。
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的经过紫色支持向量点的直线,三者平行。
- 上一篇: 基于小波变换和机器学习的地震信号处理和识别
- 下一篇: 不能错过!初学者三种类型机器学习必看指南
猜你喜欢
- 2024-11-24 7000字,Python分析:泰坦尼克号中女生更容易生还?
- 2024-11-24 SVM 算法 和 梅尔倒谱系数 结合使用噪音检测的应用
- 2024-11-24 scikit-learn的5大新功能
- 2024-11-24 机器学习集成方法:Bagging, Boosting, Stacking, Voting, Blending
- 2024-11-24 Kaggle练习赛---Titanic的分析与整理
- 2024-11-24 超参数自动调参库介绍
- 2024-11-24 支持向量机SVM(Support Vector Machine) Ⅰ原创 Yu
- 2024-11-24 集成学习小介
- 2024-11-24 如何利用手机远训练机器学习模型
- 2024-11-24 使用SVC支持向量机算法来进行人脸识别的CNN神经网络训练
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)