R语言——线性判别分析(LDA)
R語言——線性判別分析*
線性判別分析是一種經典的線性學習方法,在二分類問題上最早由Fisher在1936年提出,亦稱Fisher線性判別。線性判別的思想非常樸素:給定訓練樣例集,設法將樣例投影到一條直線上,使得同類樣例的投影點盡可能接近,異樣樣例的投影點盡可能遠離;在對新樣本進行分類時,將其投影到同樣的直線上,再根據投影點的位置來確定新樣本的類別 。
LDA與方差分析(ANOVA)和回歸分析緊密相關,這兩種分析方法也試圖通過一些特征或測量值的線性組合來表示一個因變量。然而,方差分析使用類別自變量和連續數因變量,而判別分析連續自變量和類別因變量(即類標簽)。邏輯回歸和概率回歸比方差分析更類似于LDA,因為他們也是用連續自變量來解釋類別因變量的。LDA的基本假設是自變量是正態分布的,當這一假設無法滿足時,在實際應用中更傾向于用上述的其他方法。LDA也與主成分分析(PCA)和因子分析緊密相關,它們都在尋找最佳解釋數據的變量線性組合。LDA明確的嘗試為數據類之間不同建立模型。 另一方面,PCA不考慮類的任何不同,因子分析是根據不同點而不是相同點來建立特征組合。判別的分析不同因子分析還在于,它不是一個相互依存技術:即必須區分出自變量和因變量(也稱為準則變量)的不同。在對自變量每一次觀察測量值都是連續量的時候,LDA能有效的起作用。當處理類別自變量時,與LDA相對應的技術稱為判別反應分析。
下面對R語言實現過程詳細介紹
1.導入數據并做初步處理
mydata <- read.csv("tongji.csv") mydatamydata$Group <- as.factor(mydata$Group) #將Grop中的1,2轉換成因子變量 attach(mydata)2.觀察數據分布情況
library(ggplot2) #導入包ggplot ggplot(data = mydata , aes(x = height , y = weight , shape = Group ,color = Group)) 1. geom_point() + geom_text(aes(label = 性別) , vjust = -0.8) #畫出散點圖,初步觀察數據分布情況
3. 建立判別函數
4.預測并原數據進行比較
sexyPredict <- predict(sexyLd) #根據線性函數模型預測所屬類別 newGroup <- sexyPredict$class #預測的所屬類的結果 cbind(mydata$Group , sexyPredict$x , newGroup) #顯示預測前后分組結果 sexyPredict1 <- predict(sexyLd1) #根據線性函數模型預測所屬類別 newGroup1 <- sexyPredict1$class #預測的所屬類的結果 cbind(mydata$Group , sexyPredict1$x , newGroup1) #顯示預測前后分組結果5.對模型進行評價
tab <- table(mydata$Group , newGroup) #繪制混淆矩陣 tab erro <- 1-sum(diag(prop.table(tab))) #計算誤判率 erro plot(tab) #可視化tab1 <- table(mydata$Group , newGroup1) #繪制混淆矩陣 tab1 erro1 <- 1-sum(diag(prop.table(tab1))) #計算誤判率 erro1 plot(tab1) #可視化> tabnewGroup1 21 137 212 27 109> erro [1] 0.1632653> tab1newGroup11 21 158 02 2 134 > erro1 [1] 0.006802721 #顯然考慮的因素多了,判斷率正確率明顯提高
6.給定數字進行判別分類
predict(sexyLd , newdata = data.frame(height = 171 , weight = 50)) #預測1predict(sexyLd1 , newdata = data.frame(height = 168, weight = 60 , Vital.capacity = 3500 , sprint = 7.1 , Endurance.running = 4.20 , Sitting.body.flexion = 10.3, jump = 2.29, Sit.ups = 25 , point = 80)) #預測2> predict(sexyLd , newdata = data.frame(height = 171 , weight = 50)) #預測1$class [1] 2> predict(sexyLd1 , newdata = data.frame(height = 168, weight = 60 , Vital.capacity = 3500 , sprint = 7.1 , Endurance.running = 4.20 , Sitting.body.flexion = 10.3, jump = 2.29, Sit.ups = 25 , point = 80))$class [1] 1 # 1代表女性 2代表男性`
總結
以上是生活随笔為你收集整理的R语言——线性判别分析(LDA)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费开源CDN jsDelivr使用
- 下一篇: 想要成为数据分析师 需要具备哪些专业技能