介紹
資料包含有關葡萄牙“Vinho Verde”葡萄酒的資訊。該資料集有1599個觀測值和12個變量,分别是固定酸度、揮發性酸度、檸檬酸、殘糖、氯化物、遊離二氧化硫、總二氧化硫、密度、pH值、硫酸鹽、酒精和品質。固定酸度、揮發性酸度、檸檬酸、殘糖、氯化物、遊離二氧化硫、總二氧化硫、密度、pH、硫酸鹽和酒精是自變量并且是連續的。品質是因變量,根據 0 到 10 的分數來衡量。
探索性分析
總共有 855 款葡萄酒被歸類為“好”品質,744 款葡萄酒被歸類為“差”品質。固定酸度、揮發性酸度、檸檬酸、氯化物、遊離二氧化硫、總二氧化硫、密度、硫酸鹽和酒精度與葡萄酒品質顯着相關( t 檢驗的 P 值 < 0.05),這表明了重要的預測因子。我們還建構了密度圖來探索 11 個連續變量在“差”和“好”葡萄酒品質上的分布。從圖中可以看出,品質優良的葡萄酒在PH方面沒有差異,而不同類型的葡萄酒在其他變量上存在差異,這與t檢驗結果一緻。
1.
2. na.oit() %>
3. muate(qal= ase_hen(ality>5 ~good", quaity <=5 ~ "poor")) %>%
4. muate(qua= s.fatrqual)) %>%
5. dpeme1 <- rsparentTme(trans = .4)
6.
7. plot = "density", pch = "|",
8. auto.key = list(columns = 2))
圖 1. 葡萄酒品質和預測特征之間的描述圖。
表 1. 優質和劣質葡萄酒的基本特征。
- # 在表1中建立一個我們想要的變量
- b1 <- CeatTableOe(vars litars, straa = ’qual’ da wine
- tab
模型
我們随機選擇 70% 的觀測值作為訓練資料,其餘的作為測試資料。所有 11 個預測變量都被納入分析。我們使用線性方法、非線性方法、樹方法和支援向量機來預測葡萄酒品質的分類。對于線性方法,我們訓練(懲罰)邏輯回歸模型和線性判别分析(LDA)。邏輯回歸的假設包括互相獨立的觀察結果以及自變量和對數幾率的線性關系。LDA 和 QDA 假設具有正态分布的特征,即預測變量對于“好”和“差”的葡萄酒品質都是正态分布的。對于非線性模型,我們進行了廣義加性模型(GAM)、多元自适應回歸樣條(MARS)、KNN模型和二次判别分析(QDA)。對于樹模型,我們進行了分類樹和随機森林模型。還執行了具有線性和徑向核心的 SVM。我們計算了模型選擇的 ROC 和準确度,并調查了變量的重要性。10 折交叉驗證 (CV) 用于所有模型。
1.
2. inTrai <- cateatPariti(y winequal, p = 0.7, lit =FASE)
3. traiData <- wine[inexTr,
4. 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 在滿足正常假設的情況下,在樣本量較小或類别分離良好的情況下更有幫助。
1. ### 邏輯回歸
2. cl - tranControlmehod =cv" number 10,
3. summayFunio = TRUE)
4. set.seed(1)
5. moel.gl<- train(x = tainDaa %>% dpyr::selct(-ual),
6. y = trainDaa$qual
7. metod "glm",
8. metic = OC",
9. tContrl = crl
10. # 檢查預測因素的重要性
11. summary(odel.m)
1. # 建立混淆矩陣
2. tetred.prb <- rdct(mod.gl, newdat = tstDat
3. tye = "rob
4. test.ped <- rep("good", length(pred.pr
5. confusionMatrix(data = as.factor(test.pred),
6.
- # 繪制測試ROC圖
- oc.l <- roc(testa$al, es.pr.rob$god)
1. ## 測試誤差和訓練誤差
2. er.st. <- mean(tett$qul!= tt.pred)
3. tranped.obgl <-pric(moel.lmnewda= taiDaa,
4. type = "rob
5. moe.ln <-tai(xtraDa %>% dlyr:seec-qal),
6. y = traD
7. methd = "met",
8. tueGid = lGrid,
9. mtc = "RO",
10. trontrol ctl)
11. plotodel.gl, xTras =uction() lg(x)
- #選擇最佳參數
- mol.mn$bestune
1. # 混淆矩陣
2.
3. tes.red2 <- rp"good" ngth(test.ed.prob2$good))
4. tst.red2[tespre.prob2$good < 0.5] <- "poor
5. conu
1. ionMatridata = as.fcto(test.prd2),
2.
非線性模型 在 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 很大時,預測可能不準确。
1. ### GAM
2. se.see(1)
3. md.gam<- ran(x =trainDta %%dplr::slect(-qal),
4. y = traiat$ual,
5. thod = "am",
6. metri = "RO",
7. trCotrol = ctrl)
8. moel.gm$finlMdel
summary(mel.gam)
1. # 建立混淆矩陣
2. test.pr.pob3 - prdict(mod.ga nwdata =tstData,
3. tye = "prb")
4. testped3 - rep"good" legt(test.predpob3$goo))
5. testprd3[test.predprob3good < 0.5] <- "poo
6. referetv = "good")
model.mars$finalModel
vpmodl.rs$inlodel)
- # 繪制測試ROC圖
- ocmas <- roctestataqua, tes.pred.rob4god)
- ## Stting level: conrol = god, case= poor
- ## Settig diectio: cntrols> case
- plot(ro.mars legac.axes = TRE, prin.auc= RUE)
- plot(soothroc.mars), co = 4, ad =TRUE)
1.
2. errr.tria.mas <-man(tainat$qul ! trai.red.ars)
3. ### KNN
4. Grid < epa.gri(k seq(from = 1, to = 40, by = 1))
5. seted(1
6. fknnrainqual ~.,
7. dta = trnData,
8. mthd ="knn"
9. metrrid = kid)
10. ggplot(fitkn
- # 建立混淆矩陣
- ts.re.po7 < prdi(ft.kn, ewdt = estDaa
- type = "prb"
1. ### QDA
2. seteed1)%>% pyr:c-ual),
3. y= trataq
4. ethod "d"
5. mric = "OC",
6. tContol =ctl)
7. # 建立混淆矩陣
8. tet.pprob <-pedct(mol.da,nedaa = teDta,
9. te = "pb")
10. testred6<- rep(o", leng(est.ped.pob6$goo))
11.
樹方法
基于分類樹,最大化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。樹方法的一個潛在限制是它們對資料的變化很敏感,即資料的微小變化可能引起分類樹的較大變化。
1. # 分類
2. ctr <- tintol(meod ="cv", number = 10,
3. smmryFuton= twoClassSma
4. et.se(1
5. rart_grid = a.fra(cp = exp(eq(10,-, len =0)))
6. clsste = traqua~., rainDta,
7. metho ="rprt
8. tueGrid = patid,
9. trCtrl cr)
10. ggt(class.tee,highight =TRE)
1. ## 計算測試誤差
2. rpartpred = icla.te edta =testata, ye = "aw)
3. te.ero.sree = mean(testa$a !=rartpre)
4. rprred_trin reic(ss.tre,newdta = raiata, tye "raw")
5.
6. # 建立混淆矩陣
7. teste.pob8 <-rdic(cste, edata =tstData,pe = "po"
8. 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
1. # 随機森林和變量重要性
2. ctl <traontr(mthod= "cv, numbr = 10,
3. clasPos = RUEoClssSummry)
4. rf.grid - xpa.gr(mt = 1:10,
5. spltrule "gini"
6. min.nd.sie =seq(from = 1,to 12, by = 2))
7. se.sed(1)
8. rf.fit <- inqual
9. mthd= "ranger",
10. meric = "ROC",
11. = ctrl
12. 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 性能更好。
1. st.seed(
2. svl.fi <- tain(qual~ . ,
3. data = trainData
4. mehod= "mLar2",
5. tueGri = data.frae(cos = ep(seq(-25,ln = 0))
1. ## 帶徑向核的SVM
2. svmr.grid epand.gid(C = epseq(1,4,le=10)),
3. iga = expsq(8,len=10)))
4. svmr.it<- tan(qual ~ .,
5. da = taiDataRialSigma",
6. preProcess= c("cer" "scale"),
7. tunnrol = c)
模型比較
模型建立後,我們根據所有模型的訓練和測試性能進行模型比較。下表顯示了所有模型的交叉驗證分類錯誤率和 ROC。結果中,随機森林模型的 AUC 值最大,而 KNN 最小。是以,我們選擇随機森林模型作為我們資料的最佳預測分類模型。基于随機森林模型,酒精、硫酸鹽、揮發性酸度、總二氧化硫和密度是幫助我們預測葡萄酒品質分類的前 5 個重要預測因子。由于酒精、硫酸鹽和揮發性酸度等因素可能決定葡萄酒的風味和口感,是以這樣的發現符合我們的預期。在檢視每個模型的總結時,我們意識到KNN模型的AUC值最低,測試分類錯誤率最大,為0.367。其他九個模型的 AUC 值接近,約為 82%。
- rsam = rsmes(list(
- summary(resamp)
- comrin = sumaryes)$satitics$RO
- r_quare smary(rsamp)saisis$sqre
- kntr::ableomris[,1:6])
bpot(remp meic = "ROC")
- f<- datafram(dl_Name, TainError,Test_Eror, Tes_RC)
- knir::abe(df)