共计 7479 个字符,预计需要花费 19 分钟才能阅读完成。
全文链接: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))
图 1. 葡萄酒品质和预测特色之间的形容图。\
表 1. 优质和劣质葡萄酒的基本特征。
# 在表 1 中创立一个咱们想要的变量 b1 <- CeatTableOe(vars litars, straa =’qual’da winetab
点击题目查阅往期内容
[](http://mp.weixin.qq.com/s?__biz=MzU4NTA1MDk4MA==\&mid=2247515995\&idx=3\&sn=80d496738e98a614e1630d522826cd7d\&chksm=fd928150cae5084645731cb9f737f2cde84394699c372213d4a2ccde2b4101bdd8b86dd8a247\&scene=21#wechat_redirect)R 语言主成分剖析(PCA)葡萄酒可视化:主成分得分散点图和载荷图
左右滑动查看更多
01
02
03
04
模型
咱们随机抉择 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)
# 建设混同矩阵
tetred.prb <- rdct(mod.gl, newdat = tstDat
tye = "robtest.ped <- rep("good", length(pred.prconfusionMatrix(data = as.factor(test.pred),
# 绘制测试 ROC 图 oc.l <- roc(testa$al, es.pr.rob$god)
## 测试误差和训练误差 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)
# 抉择最佳参数 mol.mn$bestune
# 混同矩阵 tes.red2 <- rp"good" ngth(test.ed.prob2$good))
tst.red2[tespre.prob2$good < 0.5] <- "poor
conuionMatridata = as.fcto(test.prd2),
非线性模型 在 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
summary(mel.gam)
# 建设混同矩阵 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")
model.mars$finalModel
vpmodl.rs$inlodel)
# 绘制测试 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)
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
# 建设混同矩阵 ts.re.po7 < prdi(ft.kn, ewdt = estDaatype = "prb"
### 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))
树办法
基于分类树,最大化 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)
## 计算测试误差 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))
# 绘制测试 ROC 图
ro.r <-oc(testaual, tstedrob$od)pot(rc.ctreegy.axes TU pit.a = TRE)plo(ooth(c.tre, col= 4, ad = TRE
# 随机森林和变量重要性
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)
scle.ermutatin.iportace TRU)barplt(sort(rangr::imoranc(random
反对向量机
咱们应用带有线性核的 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))
## 带径向核的 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)
模型比拟
模型建设后,咱们依据所有模型的训练和测试性能进行模型比拟。下表显示了所有模型的穿插验证分类错误率和 ROC。后果中,随机森林模型的 AUC 值最大,而 KNN 最小。因而,咱们抉择随机森林模型作为咱们数据的最佳预测分类模型。基于随机森林模型,酒精、硫酸盐、挥发性酸度、总二氧化硫和密度是帮忙咱们预测葡萄酒品质分类的前 5 个重要预测因子。因为酒精、硫酸盐和挥发性酸度等因素可能决定葡萄酒的风味和口感,所以这样的发现合乎咱们的预期。在查看每个模型的总结时,咱们意识到 KNN 模型的 AUC 值最低,测试分类错误率最大,为 0.367。其余九个模型的 AUC 值靠近,约为 82%。
rsam = rsmes(list(summary(resamp)
comrin = sumaryes)$satitics$ROr_quare smary(rsamp)saisis$sqrekntr::ableomris[,1:6])
bpot(remp meic = "ROC")
f<- datafram(dl_Name, TainError,Test_Eror, Tes_RC)
knir::abe(df)
论断
模型构建过程表明,在训练数据集中,酒精、硫酸盐、挥发性酸度、总二氧化硫和密度是葡萄酒品质分类的前 5 个重要预测因子。咱们抉择了随机森林模型,因为它的 AUC 值最大,分类错误率最低。该模型在测试数据集中也体现良好。因而,这种随机森林模型是葡萄酒品质分类的无效办法。
数据获取
在上面公众号后盾回复“ 葡萄酒数 **** 据 ”,可获取残缺数据。
点击文末 “浏览原文”
获取全文残缺材料。
本文选自《R 语言惩办逻辑回归、线性判别分析 LDA、狭义加性模型 GAM、多元自适应回归样条 MARS、KNN、二次判别分析 QDA、决策树、随机森林、反对向量机 SVM 分类优质劣质葡萄酒十折穿插验证和 ROC 可视化》。
点击题目查阅往期内容
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 回归预测股票收益