數據分享|R語言邏輯回歸、線性判別分析LDA、GAM、MARS、KNN、QDA|附代碼數據

2023-08-16     tecdat拓端

原標題:數據分享|R語言邏輯回歸、線性判別分析LDA、GAM、MARS、KNN、QDA|附代碼數據

全文連結: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

點擊標題查閱往期內容

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

線性模型 多元邏輯回歸顯示,在 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

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回歸預測股票收益

文章來源: https://twgreatdaily.com/zh/de394b5982d04d0b257317a5dd7900df.html