数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

2023-09-18 17:18:29

全文链接:http://tecdat.cn/?p=27384

在本文中,数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息点击文末“阅读原文”获取完整代码数据

介绍

该数据集(查看文末了解数据获取方式)有1599个观测值和12个变量,分别是固定酸度、挥发性酸度、柠檬酸、残糖、氯化物、游离二氧化硫、总二氧化硫、密度、pH值、硫酸盐、酒精和质量。固定酸度、挥发性酸度、柠檬酸、残糖、氯化物、游离二氧化硫、总二氧化硫、密度、pH、硫酸盐和酒精是自变量并且是连续的。质量是因变量,根据 0 到 10 的分数来衡量。

相关视频

探索性分析

总共有 855 款葡萄酒被归类为“好”品质,744 款葡萄酒被归类为“差”品质。固定酸度、挥发性酸度、柠檬酸、氯化物、游离二氧化硫、总二氧化硫、密度、硫酸盐和酒精度与葡萄酒质量显着相关( t 检验的 P 值 < 0.05),这表明了重要的预测因子。我们还构建了密度图来探索 11 个连续变量在“差”和“好”葡萄酒质量上的分布。从图中可以看出,品质优良的葡萄酒在PH方面没有差异,而不同类型的葡萄酒在其他变量上存在差异,这与t检验结果一致。

na.oit() %>

muate(qal= ase_hen(ality>5 ~good", quaity <=5 ~ "poor")) %>%

muate(qua= s.fatrqual)) %>%

dpeme1 <- rsparentTme(trans = .4)



plot = "density", pch = "|",

auto.key = list(columns = 2))

da1441b30597e222888f139fe796e6fc.png

图 1. 葡萄酒品质和预测特征之间的描述图。
表 1. 优质和劣质葡萄酒的基本特征。

# 在表1中创建一个我们想要的变量b1 <- CeatTableOe(vars  litars, straa = ’qual’ da winetab

08c6580949507ec84ec8b08586b0a2be.png


点击标题查阅往期内容

8e933285294be4cc19c7290bde1af0a1.jpeg

R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图

outside_default.png

左右滑动查看更多

outside_default.png

01

ce540a37caa5709aff8b8fa03c6128b6.png

02

c898b6fc19460ed849fedbed550fd870.png

03

76a3dc1d3d7fe4a6506cbb6b0d9dd4cb.png

04

cda5265f96d1a382437c67f4eb106770.png

模型

我们随机选择 70% 的观测值作为训练数据,其余的作为测试数据。所有 11 个预测变量都被纳入分析。我们使用线性方法、非线性方法、树方法和支持向量机来预测葡萄酒质量的分类。对于线性方法,我们训练(惩罚)逻辑回归模型和线性判别分析(LDA)。逻辑回归的假设包括相互独立的观察结果以及自变量和对数几率的线性关系。LDA 和 QDA 假设具有正态分布的特征,即预测变量对于“好”和“差”的葡萄酒质量都是正态分布的。对于非线性模型,我们进行了广义加性模型(GAM)、多元自适应回归样条(MARS)、KNN模型和二次判别分析(QDA)。对于树模型,我们进行了分类树和随机森林模型。还执行了具有线性和径向内核的 SVM。我们计算了模型选择的 ROC 和准确度,并调查了变量的重要性。10 折交叉验证 (CV) 用于所有模型。

inTrai <- cateatPariti(y  winequal, p = 0.7, lit =FASE)traiData <- wine\[inexTr, teDt <wi\[-idxTrain,\]

线性模型 多元逻辑回归显示,在 11 个预测因子中,挥发性酸度、柠檬酸、游离二氧化硫、总二氧化硫、硫酸盐和酒精与葡萄酒质量显着相关(P 值 < 0.05),解释了总方差的 25.1%。酒质。将该模型应用于测试数据时,准确度为 0.75(95%CI:0.71-0.79),ROC 为 0.818,表明数据拟合较好。在进行惩罚性逻辑回归时,我们发现最大化ROC时,最佳调优参数为alpha=1和lambda=0.00086,准确度为0.75(95%CI:0.71-0.79),ROC也为0.818。由于 lambda 接近于零且 ROC 与逻辑回归模型相同,因此惩罚相对较小,

但是,由于逻辑回归要求自变量之间存在很少或没有多重共线性,因此模型可能会受到 11 个预测变量之间的共线性(如果有的话)的干扰。至于LDA,将模型应用于测试数据时,ROC为0.819,准确率为0.762(95%CI:0.72-0.80)。预测葡萄酒品质的最重要变量是酒精度、挥发性酸度和硫酸盐。与逻辑回归模型相比,LDA 在满足正常假设的情况下,在样本量较小或类别分离良好的情况下更有帮助。

### 逻辑回归cl - tranControlmehod =cv" number  10,

summayFunio = TRUE)

set.seed(1)

moel.gl<- train(x = tainDaa %>% dpyr::selct(-ual),

y = trainDaa$qualmetod "glm",

metic = OC",

tContrl = crl# 检查预测因素的重要性summary(odel.m)

38607053a398e8b96756ee412ffa20d6.png

# 建立混淆矩阵

tetred.prb <- rdct(mod.gl, newdat = tstDat

tye = "robtest.ped <- rep("good", length(pred.prconfusionMatrix(data = as.factor(test.pred),

fd1692916b913bc3237d3e4a6dc427c3.png

774d2b14f157d6aad2b54bb5b18e04ee.png

# 绘制测试ROC图oc.l <- roc(testa$al, es.pr.rob$god)

e6c974f92661a8b8e5d9e0fb5bf6f0ca.png

## 测试误差和训练误差er.st. <- mean(tett$qul!= tt.pred)tranped.obgl <-pric(moel.lmnewda= taiDaa,type = "robmoe.ln <-tai(xtraDa %>% dlyr:seec-qal),y = traDmethd = "met",tueGid = lGrid,mtc = "RO",trontrol  ctl)plotodel.gl, xTras =uction() lg(x)

b888a9b138e12b686656937a1cda98c4.png

#选择最佳参数mol.mn$bestune

22f0721316c88582dd6437b526a278c0.png

# 混淆矩阵tes.red2 <- rp"good" ngth(test.ed.prob2$good))

tst.red2\[tespre.prob2$good < 0.5\] <- "poor

conuionMatridata = as.fcto(test.prd2),

dabbfb3d69f134c63140797219857620.png

5e5f728c82c09f32c30835333f5a6338.png

1daa5650eddeeaf9539097025bccd097.png

d9e0cc7b5de9c294d37a6ae87f67d221.png

9f86ecdd2cb4b285f157542c4894b506.png

非线性模型 在 GAM 模型中,只有挥发性酸度的自由度等于 1,表明线性关联,而对所有其他 10 个变量应用平滑样条。

结果表明,酒精、柠檬酸、残糖、硫酸盐、固定酸度、挥发性酸度、氯化物和总二氧化硫是显着的预测因子(P值<0.05)。

总的来说,这些变量解释了葡萄酒质量总变化的 39.1%。使用测试数据的混淆矩阵显示,GAM 的准确度为 0.76(95%CI:0.72-0.80),ROC 为 0.829。

MARS 模型表明,在最大化 ROC 时,我们在 11 个预测变量中包含了 5 个项,其中 nprune 等于 5,度数为 2。这些预测变量和铰链函数总共解释了总方差的 32.2%。根据 MARS 输出,三个最重要的预测因子是总二氧化硫、酒精和硫酸盐。

将 MARS 模型应用于测试数据时,准确度为 0.75(95%CI:0.72,0.80),ROC 为 0.823。我们还执行了 KNN 模型进行分类。当 k 等于 22 时,ROC 最大化。KNNmodel 的准确度为 0.63(95%CI:0.59-0.68),ROC 为 0.672。

QDA模型显示ROC为0.784,准确率为0.71(95%CI:0.66-0.75)。预测葡萄酒质量的最重要变量是酒精、挥发性酸度和硫酸盐。59-0.68),ROC 为 0.672。QDA模型显示ROC为0.784,准确率为0.71(95%CI:0.66-0.75)。

预测葡萄酒质量的最重要变量是酒精、挥发性酸度和硫酸盐。59-0.68),ROC 为 0.672。QDA模型显示ROC为0.784,准确率为0.71(95%CI:0.66-0.75)。预测葡萄酒质量的最重要变量是酒精、挥发性酸度和硫酸盐。

GAM 和 MARS 的优点是这两个模型都是非参数模型,并且能够处理高度复杂的非线性关系。具体来说,MARS 模型可以在模型中包含潜在的交互作用。然而,由于模型的复杂性、耗时的计算和高度的过拟合倾向是这两种模型的局限性。对于 KNN 模型,当 k 很大时,预测可能不准确。

### GAMse.see(1)

md.gam<- ran(x =trainDta %%dplr::slect(-qal),y = traiat$ual,thod = "am",metri = "RO",trCotrol = ctrl)

moel.gm$finlMdel

879d1580dcd6d3bb01c029071d0d4af3.png

summary(mel.gam)

82b8a97e169e836c8d83057179a11b3b.png

# 建立混淆矩阵test.pr.pob3 - prdict(mod.ga nwdata =tstData,

tye = "prb")

testped3 - rep"good" legt(test.predpob3$goo))

testprd3\[test.predprob3good < 0.5\] <- "poo

referetv = "good")

1ac603b45076dfd0dd6acc56c63183e8.png

f82cc633986faf0cf8d6aef92446e519.png

15a9783666443dda7428a7fb6d5d11f8.png

ee3189f3a5a012ac2d2903228cea7798.png

model.mars$finalModel

aff0ab5a560d10296243fb881accd8fe.png

vpmodl.rs$inlodel)

5272a40f99784bd6016e1a736e2b4a8a.png

2f14c98bc59333cb447458fee6de8a9e.png

02d73d32fee5134f6944968c508cdb9d.png

# 绘制测试ROC图

ocmas <- roctestataqua, tes.pred.rob4god)

## Stting level: conrol = god, case= poor

## Settig diectio: cntrols> caseplot(ro.mars legac.axes = TRE, prin.auc= RUE)

plot(soothroc.mars), co = 4, ad =TRUE)

e1d134b3b4d6f82989859a28c465a16f.png

errr.tria.mas <-man(tainat$qul ! trai.red.ars)### KNNGrid < epa.gri(k seq(from = 1, to = 40, by = 1))

seted(1fknnrainqual ~.,

dta = trnData,

mthd ="knn"metrrid = kid)

ggplot(fitkn

f963409da71cf1542fc4899656244aae.png

d7c396dae4bfa5bb77d8dabcc91984b9.png

# 建立混淆矩阵ts.re.po7 < prdi(ft.kn, ewdt = estDaatype = "prb"

df3d599e3141a5dffc98bb7e83b732fb.png

cb09b439fd550a71f1bf3f462965d33b.png

### QDAseteed1)%>% pyr:c-ual),y= trataq

ethod "d"mric = "OC",tContol =ctl)# 建立混淆矩阵tet.pprob <-pedct(mol.da,nedaa = teDta,te = "pb")

testred6<- rep(o", leng(est.ped.pob6$goo))

e7d4480fb33daf4cff70ee4c1c20d1e3.png

9c43b2263b0ad22932ba29091ad27525.png

55a988ea4be53aba15d8bb31dcbea52c.png

树方法

基于分类树,最大化AUC时最终的树大小为41。测试错误率为 0.24,ROC 为 0.809。此分类树的准确度为 0.76(95%CI:0.72-0.80)。我们还进行了随机森林方法来研究变量的重要性。因此,酒精是最重要的变量,其次是硫酸盐、挥发性酸度、总二氧化硫、密度、氯化物、固定酸度、柠檬酸、游离二氧化硫和残糖。pH 是最不重要的变量。对于随机森林模型,测试错误率为 0.163,准确率为 0.84(95%CI:0.80-0.87),ROC 为 0.900。树方法的一个潜在限制是它们对数据的变化很敏感,即数据的微小变化可能引起分类树的较大变化。

# 分类ctr <- tintol(meod ="cv", number = 10,smmryFuton= twoClassSma

et.se(1rart_grid = a.fra(cp = exp(eq(10,-, len =0)))clsste = traqua~., rainDta,metho ="rprt

tueGrid = patid,

trCtrl  cr)

ggt(class.tee,highight =TRE)

cda86c133bb42ba56283656547e96d8e.png

7aab781e23a93cf3a215b97a333f15f9.png

## 计算测试误差rpartpred = icla.te edta =testata, ye = "aw)

te.ero.sree = mean(testa$a !=rartpre)

rprred_trin  reic(ss.tre,newdta = raiata, tye  "raw")



# 建立混淆矩阵

teste.pob8 <-rdic(cste, edata =tstData,pe = "po"

tet.pd8 - rpgod" legthtetred.rb8d))

af2ebde188985b84ab5835e33c4caff4.png

fd81ad22763300f5c41c0ef7c50f70cd.png

# 绘制测试ROC图

ro.r <-oc(testaual, tstedrob$od)pot(rc.ctreegy.axes  TU pit.a = TRE)plo(ooth(c.tre, col= 4, ad = TRE

ab8fbbff118b93b0e13a7ba12d190206.png

# 随机森林和变量重要性

ctl <traontr(mthod= "cv, numbr = 10,clasPos = RUEoClssSummry)

rf.grid - xpa.gr(mt = 1:10,

spltrule "gini"min.nd.sie =seq(from = 1,to  12, by = 2))se.sed(1)

rf.fit <- inqual

mthd= "ranger",

meric = "ROC",

 = ctrl

gglt(rf.it,hiliht  TRE)

6f308cf8f910aa8d70ff225e74e1193b.png

scle.ermutatin.iportace  TRU)barplt(sort(rangr::imoranc(random

b632666aa29ff6da6d452ed0e5b8c60b.png

b085284932097744535cc31bb27fb76b.png

11e98ed4debb98adb025e10b1b3deb96.png

9ebe5c47f0649cdcc5dc4eb6e40ffca0.png

支持向量机

我们使用带有线性核的 SVM,并调整了成本函数。我们发现具有最大化 ROChad 成本的模型 = 0.59078。该模型的 ROC 为 0.816,准确度为 0.75(测试误差为 0.25)(95%CI:0.71-0.79)。质量预测最重要的变量是酒精;挥发性酸度和总二氧化硫也是比较重要的变量。如果真实边界是非线性的,则具有径向核的 SVM 性能更好。

st.seed(svl.fi <- tain(qual~ . ,data = trainDatamehod= "mLar2",tueGri = data.frae(cos = ep(seq(-25,ln = 0))

4f06dabe8e9b0308b570a7bb89c66841.png

fe8e16afa9452b4bbbbad0abf3a1b096.png

d162020a9bb54e0c3caacd9ba204c101.png

af23a504932fb2d81686c8189d16f9fe.png

3aefb0a7b8029df3f0d8be571790eae9.png

## 带径向核的SVMsvmr.grid  epand.gid(C = epseq(1,4,le=10)),

iga = expsq(8,len=10)))

svmr.it<- tan(qual ~ .,

da = taiDataRialSigma",

preProcess= c("cer" "scale"),

tunnrol = c)

a789cb9d20048fa26d162936cd6d806b.png

19163ced599b8e072347d4586f126221.png

17fe5004186cde723590daef885105ff.png

30f5f975983fdb3e138a43bf2ba9686f.png

模型比较

模型建立后,我们根据所有模型的训练和测试性能进行模型比较。下表显示了所有模型的交叉验证分类错误率和 ROC。结果中,随机森林模型的 AUC 值最大,而 KNN 最小。因此,我们选择随机森林模型作为我们数据的最佳预测分类模型。基于随机森林模型,酒精、硫酸盐、挥发性酸度、总二氧化硫和密度是帮助我们预测葡萄酒质量分类的前 5 个重要预测因子。由于酒精、硫酸盐和挥发性酸度等因素可能决定葡萄酒的风味和口感,所以这样的发现符合我们的预期。在查看每个模型的总结时,我们意识到KNN模型的AUC值最低,测试分类错误率最大,为0.367。其他九个模型的 AUC 值接近,约为 82%。

rsam = rsmes(list(summary(resamp)

6d8183f74e4745487feffff9b2614128.png

09923ec8311b027896d3d58087e0f5d1.png

e53ecf878c0e13dfd657e98c76e1bd6b.png

comrin = sumaryes)$satitics$ROr_quare  smary(rsamp)saisis$sqrekntr::ableomris\[,1:6\])

c8995c8aa06970bd6e9c0412c4261bd5.png

bpot(remp meic = "ROC")

4abfbe1480bda2029c210808ffcc124a.png

f<- datafram(dl\_Name, TainError,Test\_Eror, Tes_RC)

knir::abe(df)

059db5cc724bfb2aa3857e2ba1d9cb0e.png

结论

模型构建过程表明,在训练数据集中,酒精、硫酸盐、挥发性酸度、总二氧化硫和密度是葡萄酒质量分类的前 5 个重要预测因子。我们选择了随机森林模型,因为它的 AUC 值最大,分类错误率最低。该模型在测试数据集中也表现良好。因此,这种随机森林模型是葡萄酒品质分类的有效方法。

数据获取

在下面公众号后台回复“葡萄酒数”,可获取完整数据。


7e19215183c10af0d2a174b60b5011a0.png

点击文末“阅读原文”

获取全文完整资料。

本文选自《R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化》。

4d65cc3baee268c1136dbe7fff0901ab.jpeg

本文中的葡萄酒数据分享到会员群,扫描下面二维码即可加群!

992481c0b254f842ed395cdd30c63eb3.png

b87e2e4d12010c68d8abf48458982575.jpeg

89dbf8964054f7d965eaebe5eed37d2c.png

点击标题查阅往期内容

R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据

逻辑回归Logistic模型原理R语言分类预测冠心病风险实例

数据分享|用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化

R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据(含练习题)

Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言Lasso回归模型变量选择和糖尿病发展预测模型

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

基于R语言实现LASSO回归分析

R语言用LASSO,adaptive LASSO预测通货膨胀时间序列

R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

Python中的Lasso回归之最小角算法LARS

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

R语言实现LASSO回归——自己编写LASSO回归算法

R使用LASSO回归预测股票收益

python使用LASSO回归预测股票收益

2f5f245ab4e551020dc1eb36a39a3a12.png

4ecff0ab3f764a5b7fd5d94330e6e9ff.jpeg

d6db3f0cc0c7b5326e9503f33b4b9d41.png

更多推荐

时间复杂度讲解(数据结构)

目录引言什么是数据,结构和算法时间复杂度的概念如何计算时间复杂度总结引言hello大家好,我是boooooom君家宝。在前期的博客中博主呢对c语言的一些重要知识点进行了讲解,接下来博主的博客内容将为大家呈现的是数据结构算法的知识讲解,纯c语言版本。由于c语言对于数据结构和算法的进阶知识不是非常的契合,所以暂时只用c语言

kafka

1.Kafka概述2.Kafka安装部署3.Kafka架构深入1.Kafka概述1.1定义(1)Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。(传统使用)分布式:多台服务器干一件事。发布/订阅:消息的发布者不会将消息直接发送给特点的订阅者,而是将发布的消

现场总线学习

文章目录1.现场总线现状2.数据编码2.1数字数据的数字编码2.2数字数据的模拟编码3.通信方式!!!4.局域网及其拓扑结构5.工业总线协议6.为什么要在can协议的控制器和bus总线之间,连接一个can收发器?7.那其他协议也需要这种收发器么?8.OSI网络协议体系1.现场总线现状2.数据编码2.1数字数据的数字编码

PyTorch实战:实现Cifar10彩色图片分类

目录前言一、Cifar10数据集classtorch.utils.data.Datasettorch.utils.data.DataLoader二、定义神经网络普通神经网络:定义损失函数和优化器训练网络-NetCPU训练模型准确率​编辑GPU训练训练网络-LeNet模型准确率点关注,防走丢,如有纰漏之处,请留言指教,非

【智能家居-大模型】构建未来,聆思大模型智能家居交互解决方案正式发布

LISTENAI近日,国内11家大模型陆续通过《生成式人工智能服务管理暂行办法》备案,多家大模型产品已正式开放,激发了新一轮大模型热潮。大模型在自然语言理解方面的巨大突破,实现了认知智能的技术跃迁,带来了时代的智慧涌现,更是为智能家居行业带来了重大的发展契机。依托通用认知大模型,聆思率先上线了面向智能家居领域的大模型人

BEiT: BERT Pre-Training of Image Transformers 论文笔记

BEiT:BERTPre-TrainingofImageTransformers论文笔记论文名称:BEiT:BERTPre-TrainingofImageTransformers论文地址:2106.08254]BEiT:BERTPre-TrainingofImageTransformers(arxiv.org)代码地址

Self-paced Multi-grained Cross-modal Interaction Modeling for Referring Expression Comprehension论文阅读

Self-pacedMulti-grainedCross-modalInteractionModelingforReferringExpressionComprehension论文阅读笔记一、Abstract二、引言三、相关工作A、指代表达式理解B、TransformerC、自定进度学习四、方法A、动机和框架总览B、多

论文阅读《ESSWC2018:Modeling Relational Data with Graph Convolutional Networks》

论文链接本文就是大名鼎鼎的R-GCN,由于是比较早的工作了,在这篇博客中我们只讨论它的链接预测部分和模型结构部分。工作简介本文引入了关系图卷积网络(R-GCNs),并将其应用于两个标准的知识库完成任务:链接预测和实体分类。通过使用GNN编码器模型来丰富用于链接预测的因子分解模型DistMult,可以显著改善链接预测的结

JavaScript中的`async`和`await`关键字的作用

聚沙成塔·每天进步一点点⭐专栏简介⭐async关键字⭐await关键字3.错误处理⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基

Leetcode 504.七进制数

给定一个整数num,将其转化为7进制,并以字符串形式输出。示例1:输入:num=100输出:"202"示例2:输入:num=-7输出:"-10"我的答案:一、信息1.目的实现十进制向其他进制的转换。2.原理:公式3.一段运算过程4.根据后面的一段话不难看出根据作者的意思就是用栈的数据结构来存储每次辗转相除后的余数然后输

页面设计都有哪些好用的工具推荐?

对于设计师来说,方便的页面设计工具和稳定的页面设计灵感也同样重要。在今天的信息爆炸中,很容易找到页面设计工具,网上搜索有很多建议,但找到合适的页面设计工具并不那么简单。本文推荐不容错过的9款页面设计工具即时设计即时设计是一款免费的在线UI设计工具,无系统限制,浏览器打开即可使用,更有丰富的在线素材、云端字体、交互动画等

热文推荐