R -- 二分类问题的分类+预测

news2024/9/25 23:23:28

brief

分类大致分为有监督分类和无监督分类,这里学习有监督分类。有监督分类一般包括逻辑回归、决策树、随机森林、支持向量机、神经网络等。
有监督学习基于一组包含预测变量值和输出变量值的样本单元。然后可以将全部数据分为一个训练数据集和一个验证数据集,其中训练数据集用于建立预测模型,验证数据集用于测试模型的准确性。
这里将通过 rpart、rpart.plot和party包实现决策树模型和可视化
通过randomForest包拟合随机森林
通过e1071包构造支持向量机
通过glm函数实现逻辑回归。

pkgs <- c("rpart", "rpart.plot", "party","randomForest", "e1071")

install.packages(pkgs, depend=TRUE)

数据准备

在这里插入图片描述
在这里插入图片描述

loc <- "http://archive.ics.uci.edu/ml/machine-learning-databases/"
ds <- "breast-cancer-wisconsin/breast-cancer-wisconsin.data"
url <- paste(loc, ds, sep="")

breast <- read.table(url, sep=",", header=FALSE, na.strings="?")
names(breast) <- c("ID", "clumpThickness", "sizeUniformity",
                   "shapeUniformity", "maginalAdhesion",
                   "singleEpithelialCellSize", "bareNuclei",
                   "blandChromatin", "normalNucleoli", "mitosis", "class")

df <- breast[-1]
df$class <- factor(df$class, levels=c(2,4),
                   labels=c("benign", "malignant"))
set.seed(1234)
train <- sample(nrow(df), 0.7*nrow(df))
df.train <- df[train,]
df.validate <- df[-train,]
table(df.train$class)
table(df.validate$class)

逻辑回归

逻辑回归(logistic regression)是广义线性模型的一种,可根据一组数值变量预测二元输出。R中的基本函数glm()函数可用于拟合逻辑回归模型。glm()函数自动将预测变量中的分类变量编码为相应的虚拟变量。本次的数据集预测变量都是数值向量,因此不必进行编码。代码如下:

fit.logit <- glm(class~., data=df.train, family=binomial())
summary(fit.logit)

在这里插入图片描述

  • 预测变量的系数显著性检验表示有些变量系数很显著,有些不显著,这就是说有些预测变量对模型的解释度不够,可以舍弃。这里我们就不进行预测变量的优化了。

  • 要注意的是logistic回归的结果变量的值是Y=1优势比,可以转换成概率 。

  • 下面我们用上述的回归模型进行预测,此时的结果是对应的概率

# predict 默认输出对数概率,设置type = “response”返回概率值

prob <- predict(fit.logit, df.validate, type="response")# 进行预测

logit.pred <- factor(prob > .5, levels=c(FALSE, TRUE),
                     labels=c("benign", "malignant")) # 进行预测

logit.perf <- table(df.validate$class, logit.pred,
                    dnn=c("Actual", "Predicted")) #评估预测准确性

logit.perf
  • 混淆矩阵
    在这里插入图片描述

决策树

决策树试数据挖掘领域中常用的模型,其基本思想是对预测变量进行二元分离,从而构建一颗可用于预测新样本单元所属类别的树。

经典树

在这里插入图片描述

library(rpart)
set.seed(1234)
dtree <- rpart(class ~ ., data=df.train, method="class",
               parms=list(split="information"))

print(dtree)
summary(dtree)
# 复杂度参数 cp 用于惩罚过大的树
# 树的大小也就是分支nsplit,有n个分支的树会有n+1个node
# rel error 栏即训练集中各种树对应的误差
# 交叉验证错误 xerror 即基于训练样本所得的10折交叉验证误差
# xstd 栏为交叉验证误差的标准差
dtree$cptable
plotcp(dtree) 
  • dtree的总结
    在这里插入图片描述
  • 交叉验证的误差以及可视化
    交叉验证误差 小于 最小的交叉验证误差一个标准误差范围内的树,就是最小的最优的树。
    最小的xerror + 对应的xstd = 水平虚线,node=5时xerror 低于虚线,则nsplit=4最优。
    在这里插入图片描述
    在这里插入图片描述
  • 最终修剪和可视化
# 在完整树的的基础上,prune根据复杂度参数剪掉最不重要的枝,从而将树控制在理想范围内
dtree.pruned <- prune(dtree, cp=.01) # 剪枝

# rpart.plot包中的prp函数可以画出最终的决策树
library(rpart.plot)
prp(dtree.pruned, type = 2, extra = 104,
      fallen.leaves = TRUE, main="Decision Tree")

在这里插入图片描述

  • 进行预测
# 进行预测
dtree.pred <- predict(dtree.pruned, df.validate, type="class")
# 混淆矩阵
dtree.perf <- table(df.validate$class, dtree.pred,
                      dnn=c("Actual", "Predicted"))
dtree.perf

在这里插入图片描述

条件推断树

在这里插入图片描述
在这里插入图片描述
预测变量与响应变量的回归关系是否显著以及显著性大小为分割变量

library(party)
fit.ctree <- ctree(class~., data=df.train)  # 推断决策
plot(fit.ctree, main="Conditional Inference Tree") #结果可视化
#预测
ctree.pred <- predict(fit.ctree, df.validate, type="response")
#混淆矩阵
ctree.perf <- table(df.validate$class, ctree.pred,
                      dnn=c("Actual", "Predicted"))
ctree.perf

在这里插入图片描述
在这里插入图片描述

随机森林

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

library(randomForest)
set.seed(1234)
fit.forest <- randomForest(class~., data=df.train,
                             na.action=na.roughfix,
                             importance=TRUE)
fit.forest

importance(fit.forest, type=2)
# predict 
forest.pred <- predict(fit.forest, df.validate)
forest.perf <- table(df.validate$class, forest.pred,
                       dnn=c("Actual", "Predicted"))
forest.perf

支持向量机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于SVM应用两类线性不可分的分类问题时如何解决,我觉得这个的视频做的蛮通俗易懂的,链接。

kernlab包中的ksvm()和e1071包中的svm()都可以实现支持向量机算法,kernlab包中的ksvm()功能更强大,意味着参数更多学习成本更高,所以用e1071包中的svm()演示。

在这里插入图片描述
在这里插入图片描述

  • 由于方差较大的预测变量对SVM的生成影响更大,svm()函数默认在生成模型前对每个变量标准化,使其均值为0,标准差为1.与随机森林算法不同的是,SVM在预测新样本单元时不允许有缺失值出现。
library(e1071)
set.seed(1234)
fit.svm <- svm(class~., data=df.train)
fit.svm

svm.pred <- predict(fit.svm, na.omit(df.validate))
svm.perf <- table(na.omit(df.validate)$class,
                    svm.pred, dnn=c("Actual", "Predicted"))
svm.perf
# 利用tune.svm()
set.seed(1234)
tuned <- tune.svm(class~., data=df.train,
                    gamma=10^(-6:1),
                    cost=10^(-10:10))
tuned #根据返回的结果设置gamma值和cost值

fit.svm <- svm(class~., data=df.train, gamma=.01, cost=1)
svm.pred <- predict(fit.svm, na.omit(df.validate))
svm.perf <- table(na.omit(df.validate)$class,
                    svm.pred, dnn=c("Actual", "Predicted"))
svm.perf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【好刊推荐】知名出版社影响因子7+被踢出SCI,投稿前如何选期刊?

今年3月Hindawi旗下的19本期刊被SCIE剔除&#xff0c;其中有一本影响因子7&#xff0c;以下从期刊各个指标方面分析一下具体原因&#xff1a; 期刊剔除&#xff1a;影响因子7 期刊简介 期刊名称&#xff1a; OXIDATIVE MEDICINE AND CELLULAR LONGEVITY ISSN / eISSN&#…

Stacking算法预测银行客户流失率

Stacking算法预测银行客户流失率 描述 为了防止银行的客户流失&#xff0c;通过数据分析&#xff0c;识别并可视化哪些因素导致了客户流失&#xff0c;并通过建立一个预测模型&#xff0c;识别客户是否会流失&#xff0c;流失的概率有多大。以便银行的客户服务部门更加有针对…

Android桌面长按图标快捷方式——Shortcuts

简介 当我们在长按Android应用的桌面图标时&#xff0c;一般回弹出一个列表&#xff0c;上面一般有应用信息、卸载应用等功能&#xff0c;并且部分应用在这里还添加了自己的快捷方式&#xff0c;今天主要介绍如何添加自定义的快捷方式。 长按桌面显示的快捷方式在Android中叫…

中小企业面临怎样的数字化转型局面

当前&#xff0c;我国经济长期向好的基本面没有改变&#xff0c;但承受着“需求收缩、供给冲击、预期减弱”的三重压力&#xff0c;中小企业的数字化转型之路较之以往更加艰难、曲折。为帮助中小企业纾困解难、平稳渡过危机&#xff0c;需进一步优化政策“组合拳”&#xff0c;…

单片机中常用的轻量级校验算法

UART有一个奇偶校验&#xff0c;CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。 在自定义数据存储时&#xff0c;有经验的工程师都会添加一定校验信息。 你平时通信&#xff0c;或者数据存储时&#xff0c;你有用到校验信息吗&#xff1f;下面就介绍几种常见…

Java面试题总结 | Java面试题总结3-JVM模块(持续更新)

JVM 文章目录JVMJVM的内存组成模型java的内存模型定义了什么java的内存分布情况程序计数器是什么&#xff1f;堆、栈、方法区都存放的是什么堆和栈的区别类加载JMM主内存和本地内存交互操作volatile如何保证可见性volatile如何保证有序性happen-before了解过吗&#xff1f;内存…

【JS】BOM 详解(工作必备)

文章目录BOM一、History &#xff08;浏览器记录&#xff09;1.1、history.go&#xff08;指定页&#xff09;1.2、history.back&#xff08;上一页&#xff09;1.3、history.forword&#xff08;下一页&#xff09;二、Location&#xff08;浏览器地址&#xff09;2.1、操作属…

基于OpenCV的图片和视频人脸识别

目录 &#x1f969;前言 &#x1f356;环境使用 &#x1f356;模块使用 &#x1f356;模块介绍 &#x1f356;模块安装问题: &#x1f969;人脸检测 &#x1f356;Haar 级联的概念 &#x1f356;获取 Haar 级联数据 &#x1f357; 1.下载所需版本 &#x1f357; 2.安…

前后端不分离项目如何使用elementUI

首先&#xff0c;去官网下载element 的js和css和字体等文件 其次&#xff0c;分别将js和css 引入到项目 然后就可以使用了&#xff0c;使用方法和vue中使用element方法一致、

5款最新最实用的小软件,让你的工作和生活更轻松

我喜欢发现和分享一些好用的软件&#xff0c;我觉得它们可以让我们的工作和生活更加轻松和快乐。今天给大家介绍五款我最近发现的软件&#xff0c; GIF录制工具——Screen To Gif Screen To Gif是一款完全免费的GIF录制神器&#xff0c;可以让你轻松地录制屏幕、摄像头或画板…

学生信息管理案例

效果图&#xff1a; 业务模块&#xff1a; 点击录入按钮可以录入数据点击删除可以删除当前的数据 注意&#xff1a;本次案例&#xff0c;我们尽量减少dom操作&#xff0c;采用操作数据的形式。增加和删除都是针对数组的操作&#xff0c;然后根据数组数据渲染页面 核心思路:…

5款办公神器软件推荐:提高效率,享受分享

给大家分享一些优秀的软件工具,是一件让人很愉悦的事情&#xff0c;今天继续带来5款优质软件。 图床管理——PicGo PicGo是一款图床管理工具&#xff0c;可以快速上传图片到各种图床&#xff0c;并生成链接。你可以使用PicGo来管理你的图片资源&#xff0c;或者作为Markdown编…

STM32F4_定时器输入捕获详解

目录 1. 输入捕获简介 2. 输入捕获框图 3. 输入捕获模式 4. 相关寄存器 4.1 TIMx_ARR、TIMx_PSC 4.2 捕获/比较寄存器1&#xff1a;TIMx_CCMR1 4.3 捕获/比较使能寄存器 TIMx_CCER 4.4 中断使能寄存器 TIMx_DIER 5. 库函数配置输入捕获高电平脉冲宽度 6. 实验程序 6…

【4.14】今天讲两道TCP面试题

文章目录TCP Keepalive 和HTTP Keep-Alive是一个东西吗&#xff1f;TCP协议有什么缺陷TCP Keepalive 和HTTP Keep-Alive是一个东西吗&#xff1f; 对于这个问题&#xff0c;我们要先知道这两个KeepAlive分别代表什么&#xff1f; TCP的Keepalive是由TCP层&#xff08;内核层&a…

移远通信率先通过ISO/SAE 21434汽车网络安全管理体系认证

近日&#xff0c;移远通信车载前装BU获得了由国际独立第三方检测、检验和认证机构TV NORD颁发的ISO/SAE 21434汽车网络安全管理体系认证证书。 ISO/SAE 21434标准认证的通过&#xff0c;表明移远通信车载前装BU的网络安全风险管理满足了产品从概念设计、开发、生产、运营到售后…

我的面试八股(数据库)

数据库范式&#xff1f; 数据库范式有三种 1NF 第一范式&#xff0c;属性&#xff08;对应表中的字段&#xff09;不能再分割&#xff0c;就是这个字段只能是一个值&#xff0c;不能再分为多个其它字段了&#xff0c;1NF是所有关系型数据库的最基本要求。 2NF 第二范式&am…

Spring Security 02 搭建环境

搭建环境 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifa…

第31天-贪心-第八章 ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录1. 买卖股票的最佳时机2. 跳跃游戏3. 跳跃游戏 ||1. 买卖股票的最佳时机 - LeetCode链接 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 …

docker安装jenkins安装流程(一)

1.下载安装jdk 官网&#xff1a;https://jdk.java.net/ https://www.oracle.com/java/technologies/downloads/ 上传到linux服务器 cd /usr mkdir jdk tar -zxvf 所要解压的文件名 编辑profile文件&#xff1a;vim /etc/profile 把光标移到最后一行&#xff0c;键盘按 i&…

技术分享 | 如何优雅的删除 Zabbix 的 history 相关历史大表

作者&#xff1a;徐文梁 爱可生DBA成员&#xff0c;一个执着于技术的数据库工程师&#xff0c;主要负责数据库日常运维工作。擅长MySQL,redis&#xff0c;其他常见数据库也有涉猎&#xff0c;喜欢垂钓&#xff0c;看书&#xff0c;看风景&#xff0c;结交新朋友。 本文来源&…