R语言手把手教你进行支持向量机分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知样本的良好泛化能力。
支持向量机的理论最初来自对两类数据分类问题的处理。SV M 考虑寻找一个超平面, 以使训练集中属于不同分类的点正好位于超平面的不同侧面, 并且,还要使这些点距离该超平面尽可能远。 即寻找一个超平面, 使其两侧的空白区域最大

在这里插入图片描述
如上图所示为二维两类线性可分模式 , 图中的圆圈和三角分别表示两类训练样本 , H 为把两类正确分开的分类线 , H 1、 H 2: 分别为各类 样本中离分类线最近的点且平行于分类线的直线 , 那么 , H1 , 和H 2之间的距离即为两类的分类间隔。 所谓最优分类线 , 就是要求分类线不但要将两类训练样本无错误地分开 , 并且,还要使两类的分类间隔最大 。推广到高维空间 , 最优分类线就成为最优超平面.

下面咱们来演示一下使用到的是e1071包,咱们先导入R包和数据

library(e1071)
library(caret)
bc<-read.csv("E:/r/test/demo.csv",sep=',',header=TRUE)

数据不能有缺失,不然会有各种各样的问题

bc <- na.omit(bc)

在这里插入图片描述
数据变量很多,我解释几个我等下要用的,HBP:是否发生高血压,结局指标,AGE:年龄,是我们的协变量,BMI肥胖指数,FEV1肺活量指标,WEIGHT体重,“SBP”,“DBP”:收缩压和舒张压。公众号回复:体检数据,可以获得数据。
有些变量用不到,我先精简一下,把结局变量变成因子,这个很重要。

bc<-bc[,c("HBP","BMI","AGE","FEV1","WEIGHT","SBP","DBP")]
bc$HBP<-as.factor(bc$HBP)

在这里插入图片描述
进行分析前还需对数据进行预处理,如果你是多分类的,并且数据差异大,可以使用分层抽样,尽量是数据匹配一下,方法详见我既往文章《R语言两种方法实现随机分层抽样》,我这里是二分类,我就不弄了。
接下来就是对数据进行标准化,这样可以消除数据见的差异。
定义一个标准化的小程序

f1<-function(x){return((x-min(x)) / (max(x)-min(x)))
}

接下进行标准化,标准化不要放入结局变量

bc.scale<-as.data.frame(lapply(bc[2:7],f1))

把结局变量加入表转化后数据中,得到新的数据

bc.scale<-cbind(HBP=bc$HBP,bc.scale)

在这里插入图片描述

弄好数据之后咱们就可以进行分析了,先把数据分为建模组和验证组

#分成建模和验证组
set.seed(12345)
tr1<- sample(nrow(bc.scale),0.7*nrow(bc.scale))##随机无放抽取
bc_train <- bc.scale[tr1,]#70%数据集
bc_test<- bc.scale[-tr1,]#30%数据集

分析很简单,一句话代码

fit <- svm(HBP~.,data=bc_train)
summary(fit)

在这里插入图片描述
上图给出了一些模型的基本参数,默认情况下,gamma为预测变量个数的倒数,cost为1。gamma控制分割超平面的形状,gamma越大通常导致支持向量越多,cost越大意味着模型对误差的惩罚更大,从而将生成一个更复杂的分类边界。
假设想知道在模型划分下的BMI和SBP边界

plot(fit,data = bc_train,BMI~SBP)

在这里插入图片描述
上图可以看到,划分还是不是很好,咱们还可以通过slice参数来控制划分范围。
下面咱们预测数据,

pred <- predict(fit,bc_train)

使用混淆矩阵看下分类情况

tab <- table(Predicted = pred,Actual = bc_train$HBP)
tab

在这里插入图片描述
上图可以看到0这里有一个算错了,1这里有7个算错了,计算一下准确率

sum(diag(tab))/sum(tab)

在这里插入图片描述
使用confusionMatrix函数也是一样的

confusionMatrix(pred,bc_train$HBP)

在这里插入图片描述
接下来就是怎么调参,调高模型的准确率了,目前有多个方法调参,我介绍一下我自认为比较简单的,tune函数来调参,需要生成epsilon列表和cost列表,让函数交叉验证出最佳参数

tmodel <- tune(svm,HBP~.,data = bc_train,ranges = list(epsilon = seq(0,1,0.1,),cost = 2^(2:9)))

绘图

plot(tmodel)

在这里插入图片描述
在performance数值比较低,就是比较深颜色的地区,精度是比较好的
解析一下模型,可以看到不同参数的情况表达,最好的为0.06131579

summary(tmodel)

在这里插入图片描述
接下来咱们可以从tmodel中提取出最佳模型

mymodel <- tmodel$best.model
summary(mymodel)

在这里插入图片描述
加下来咱们看下调参数后模型的预测准确率,0和1一个都没有分类错

pred <- predict(mymodel,bc_train)
tab <- table(Predicted = pred,Actual = bc_train$HBP)
tab

在这里插入图片描述
看下准确率,达到了100%

sum(diag(tab))/sum(tab)

在这里插入图片描述
如果咱们想看预测组的,预测组也分得很准

pred1 <- predict(mymodel,bc_test)
tab1 <- table(Predicted = pred1,Actual = bc_test$HBP)
tab1
sum(diag(tab1))/sum(tab1)

在这里插入图片描述
下面咱们来进行ROC曲线绘制
从新生成一下原来的模型和预测值

fit <- svm(HBP~.,data=bc_train)
pred <- predict(fit,bc_train)
pred<-as.numeric(pred)

生成ROC并绘图

roc1 <- roc(bc_train$HBP,as.numeric(pred))
plot(roc1)

在这里插入图片描述
此外还可以进行校准曲线和决策曲线的绘制,如果大家有兴趣,我改天再写写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/698020.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从头开始学Spring—02基于XML管理bean

目录 1.实验一&#xff1a;入门案例 2.实验二&#xff1a;获取bean 3.实验三&#xff1a;依赖注入之setter注入 4.实验四&#xff1a;依赖注入之构造器注入 5.实验五&#xff1a;特殊值处理 6.实验六&#xff1a;为类类型属性赋值 7.实验七&#xff1a;为数组类型属性赋值…

【kubeflow文档】kubeflow介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习&#xff08;ML&#xff09;工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务&#xff0c;而是提供一种直接的方法&#xff0c;将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

[windows系统安装/重装系统][step-3]装驱动、打驱动、系统激活

重装系统三部曲 [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载-CSDN博客 [windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]-CSDN博客 [windows系统安装/重装系统][step-3]装驱动…

第 397 场 LeetCode 周赛题解

A 两个字符串的排列差 模拟&#xff1a;遍历 s s s 记录各字符出现的位置&#xff0c;然后遍历 t t t 计算排列差 class Solution {public:int findPermutationDifference(string s, string t) {int n s.size();vector<int> loc(26);for (int i 0; i < n; i)loc[s…

了解C++中STL的堆操作:构建、拆解和排序 堆(Heap)

在C中使用STL构建、拆解和排序堆 一、简介二、std::push_heap三、std::pop_heap四、std::sort_heap五、总结 一、简介 首先要要熟悉堆&#xff08;Heap&#xff09;是什么以及它们是如何工作的&#xff0c;如果你不知道什么是堆&#xff08;Heap&#xff09;&#xff0c;可以先…

数据库——SQL SERVER(先学删库跑路)

目录 一&#xff1a;什么是数据库 二&#xff1a;为什么需要数据库 三&#xff1a;数据库的安装 四&#xff1a;学前必备知识 1. 数据库原理 2. 数据库与编程语言 3. 数据库与数据结构的区别 4. 连接 5. 有了编程语言为啥还要数据库 6. 初学者学习数据库的三个方面 …

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM&#xff0c;最近在工作中又接触到Faster LIO相关的工作&#xff0c;于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结&#xff0c;以加深自己对激光SLAM算法的理解…

【GlobalMapper精品教程】082:WGS84/CGCS2000转阿尔伯斯(Albers)投影

参考阅读: ArcGIS实验教程——实验十:矢量数据投影变换 【ArcGIS Pro微课1000例】0024:自定义坐标系统—以阿尔伯斯投影(Albers)为例 【ArcGIS风暴】ArcGIS自定义坐标系统案例教程—以阿尔伯斯投影(Albers)为例 文章目录 一、加载实验数据二、设置输出坐标系三、数据导出…

基于C#开发web网页管理系统模板流程-登录界面

前言&#xff0c;首先介绍一下本项目将要实现的功能 &#xff08;一&#xff09;登录界面 实现一个不算特别美观的登录窗口&#xff0c;当然这一步跟开发者本身的设计美学相关&#xff0c;像蒟蒻博主就没啥艺术细胞&#xff0c;勉强能用能看就行…… &#xff08;二&#xff09…

mikefile函数与实用模板

文章目录 0.概述1.函数调用语法2.字符串处理函数2.1 subst&#xff08;字符串替换函数&#xff09;2.2 patsubst&#xff08;模式字符串替换函数&#xff09;2.3 strip&#xff08;去空格函数&#xff09;2.4 findstring&#xff08;查找字符串函数&#xff09;2.5 filter&…

企业网站HTTP网站业务被慢连接攻击了该怎么办

企业的网站建设中遇到网络攻击会出现哪些问题&#xff1f;一些中小型企业对于网络安全的认知不足&#xff0c;网站建设种类众多&#xff0c;电子商城类&#xff0c;小型游戏&#xff0c;支付类型&#xff0c;H5页面的网站&#xff0c;开发等等&#xff0c;如遇见网络攻击造成的…

vue3专栏项目 -- 四、前后端结合(下)

一、async 和 await 1、使用async 和 await 改造异步请求 在接触后端API以后就遇到了越来越多的异步请求&#xff0c;现在我们就使用async 和 await 改造异步请求。 async function是把返回内容包裹成个Promise返回Promise await 它在async function里面才起作用&#xff0…