免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【R分享|實戰(zhàn)】LDA 線性判別分析



 No one konws everything, and you don't have to.”   --科白君


"R數(shù)據(jù)分析"專題·第22篇
  編輯 |Linnaea borealis 
  4502字 | 14分鐘閱讀

本期推送內(nèi)容
之前我們分享了不少降維相關(guān)的分析方法,例如PCoA,NMDS,PCA分析,它們都是無監(jiān)督學習。無監(jiān)督學習指我們事先沒有任何訓練樣本,直接對數(shù)據(jù)進行建模。無監(jiān)督學習的主要算法是聚類,聚類目的在于把相似的東西聚在一起,主要通過計算樣本間和群體間距離得到。與之相對的便是有監(jiān)督學習,它通過已有的訓練樣本得到一個最優(yōu)模型,再利用這個模型將所有的輸入映射為相應的輸出,對輸出進行簡單的判斷從而實現(xiàn)預測和分類。在這一期我們將與大家分享有監(jiān)督學習中LDA分析的基本知識,以及如何在R語言中實現(xiàn)LDA分析與預測。

01

線性判別分析(LDA)的基本介紹


本期內(nèi)容提到的LDA分析全稱是Linear discriminant Analysis,即線性判別分析。最早由Fisher在1936年提出,多用于數(shù)據(jù)降維以及分類預測,例如:①根據(jù)給出的性狀指標,區(qū)分物種類別。②判斷一個人信用標準的好壞,③判斷學生是否能被高校錄取。LDA與回歸分析類似,但它的解釋變量是分類的而不是連續(xù)的。LDA的中心思想可以用一句話概括:"投影后類內(nèi)方差最小,類間方差最大",換句話說就是我們將不同種類的高維數(shù)據(jù)投影到低維度上,希望投影結(jié)果中相同種類數(shù)據(jù)的投影點盡可能接近,而不同種類數(shù)據(jù)的中心點盡可能遠離。

如下圖所示的藍紅兩類數(shù)據(jù),我們試圖將他們投影到一維上,保證同類相近,不同類分離。仔細觀察兩種投影方案,我們可以發(fā)現(xiàn)第二種方案的投影效果要比第一種好,因為它不僅將兩類數(shù)據(jù)完全分離開,且二者在自己的位置更為集中。以上就是LDA的主要思想了,在實際應用中,我們的數(shù)據(jù)是多個類別的,我們的原始數(shù)據(jù)一般也是超過二維的,投影后的也一般不是直線,而是一個低維的超平面。

相比于DA(判別分析),LDA突出的是“Linear(線性)”,它試圖按預先分類找到能夠分離總體樣本的最佳線性組合(函數(shù))。

Z便是上文中提到最佳線性函數(shù)。

02

LDA與PCA的異同點


作為常用的線性降維方法,LDA與PCA有很多異同點。LDA是有監(jiān)督的降維方法,在降維時它會考慮已知的分類關(guān)系,通過線性判別式區(qū)分出一系列類別間的差異,而PCA是無監(jiān)督的降維方法,它在降維時不關(guān)注數(shù)據(jù)的分組,目的是找到代表數(shù)據(jù)集方差最大化方向的一系列正交的主成分軸。可能有點抽象,我們可以根據(jù)以下圖像來評估在不同分布的數(shù)據(jù)中LDA與PCA的表現(xiàn)。

LDA傾向于分類性能最好的投影方向,而PCA選擇樣本點投影具有最大方差的方向。當兩組數(shù)據(jù)方差大小相近時,LDA的分類性能優(yōu)于PCA。


在某些方面,如每類數(shù)據(jù)中涉及的對象數(shù)量相對較少或是均值相近時,PCA的性能反而優(yōu)于LDA。


03

LDA在R語言中的實現(xiàn)


在使用LDA分析之前,我們得清楚它的幾點假設:

1) 樣本量容量:樣本量應該超過自變量的數(shù)目。根據(jù)經(jīng)驗,對于少數(shù)(4或5)個自變量,樣本量應該超過20。假如樣本容量為n,那自變量數(shù)目應小于n-2。雖然這種低樣本量可能有效,但通常不鼓勵這樣做,最好有4~5倍的樣本量。

2) 正態(tài)分布:測試數(shù)據(jù)最好符合多元正態(tài)分布。你可以用頻率分布的直方圖或者mshapiro.test()函數(shù)對測試數(shù)據(jù)進行檢驗。對于LDA來說,正態(tài)分布并不是必須的,如果非正態(tài)性并不是由異常值引起的,那么結(jié)果仍然是可靠的。

3) 方差齊次:LDA對方差-協(xié)方差矩陣的異質(zhì)性非常敏感。在接受一項重要研究的最終結(jié)論之前,最好回顧一下組內(nèi)方差和相關(guān)性矩陣??梢杂蒙Ⅻc圖來檢驗方差齊性,使用數(shù)據(jù)轉(zhuǎn)換方式來修正非其次。

我將從機器學習的角度介紹LDA的功能,首先將數(shù)據(jù)集分為兩部分,一部分作為訓練集構(gòu)建LDA分類預測模型,一部分作為測試集評估預測模型的精確性。我們使用R中自帶的iris數(shù)據(jù)集,數(shù)據(jù)集內(nèi)包含 3 類共 150 條記錄,每類各 50 個數(shù)據(jù),每條記錄都有 4 項特征:花萼(Sepal)長度、花萼寬度、花瓣(Petal)長度、花瓣寬度,可以通過這4個特征預測鳶尾花卉屬于(setosa, versicolour, virginica)中的哪一品種。而LDA可以通過預先提供的品種分類,對特征數(shù)據(jù)進行降維投影。

library(MASS)
library(ggplot2)
#iris <- scale(iris[,1:4]) #對數(shù)據(jù)進行標準化
set.seed(1)#設置種子保證(包含隨機函數(shù)的)代碼結(jié)果可重復
trainset<- sample(rownames(iris),nrow(iris)*0.7) #隨機抽取訓練集
traindata<- subset(iris, rownames(iris) %in% trainset) #區(qū)分訓練級與測試集數(shù)據(jù)
testdata<- subset(iris, !rownames(iris) %in% trainset)

ldamodel<- lda(traindata, Species~.)
ldamodel


①:Coefficents of linear discriminants 是每個分類變量的線性判別系數(shù),可以根據(jù)線性函數(shù)表達式Z=b1x1+b2x2+ b3x3+ b4x4生成得到用于LDA分類決策的線性回歸組合。例如LD1 = 0.828*Sepal.Length + 1.438*Sepal.Width - 2.179*Petal.Length - 2.656*Petal.Width,可在降維后預測訓練集的分類

②:Proportion of trace,類似于PCA中的“方差解釋率”,可用于評估LDA各軸的重要性。

graphset<- cbind(trainset, predict(ldamodel)$x)#通過predict函數(shù)獲得數(shù)據(jù)集通過LDA的投影點坐標并構(gòu)建繪圖數(shù)據(jù)集
ggplot(graphset, aes(LD1,LD2)+
geom_point+
theme_bw()+
theme(panel.grid.major = element_blank(),
      panel.grid.minor = element_blank())+
stat_ellipse(level = 0.95)+
xlab("LDA1(99.2%)")+ ylab("LDA2(0.8%)")#Proportion of trace

根據(jù)圖片可以看出,LDA投影的第一軸將訓練數(shù)據(jù)集區(qū)分的效果最好,接下來讓我們來檢驗模型對訓練集和測試集分類的精確度。

predictions <- predict(ldamodel, traindata)
mean(predictions$class == traindata$Species)

Predictions<- predict(ldamodel, testdata)
mean(predictions$class == testdata$Species)

在沒有對模型進行優(yōu)化的情況下,訓練集97%的對象能被分類到正確的類別中,而測試集中所有的對象都匹配到正確的類別中,說明LDA分類模型的精確度是相當可靠的。我們證明了LDA分類的可信度,現(xiàn)在就可以試著用它來對數(shù)據(jù)集進行降維分類了。

library(tidyverse)
lda<- lda(Species~.,iris) %>%
    predict()
cbind(iris,lda$x) %>%
    ggplot(.,aes(LD1, LD2,color=Species)) +
    geom_point()+
    theme_bw()+
    theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank())+
stat_ellipse(level = 0.95)+
xlab("LDA1(99.12%)")+ ylab("LDA2(0.88%)")

04

LDA進行預測分類


既然知道了LDA可以根據(jù)預先提供的分類信息準確地對數(shù)據(jù)集進行分類,那我們是否可以用a數(shù)據(jù)集中的分類特征訓練機器學習模型,再使用模型去預測具有相同分類特征的b數(shù)據(jù)集呢?

library(mlr)
test<- makeClassifTask(data=iris, target = "Species") #訓練lda機器學習模型
lda <- makeLearner("classif.lda")
ldaModel <- train(lda, test)
LdaModelResult <- getLearnerModel(ldaModel)

#LdaPreds <- predict(LdaModelResult)$x
#head(LdaPreds) #正常的lda降維分
kFold <- makeResampleDesc(method = "RepCV", folds = 10, reps = 50,
                          stratify = TRUE)
ldaCV <- resample(learner = lda, task = test, resampling = kFold,
                  measures = list(mmce, acc))#10倍交叉檢驗,檢驗模型精確度


交叉驗證的結(jié)果顯示模型的準確度達到98%

newcase<- tibble(Sepal.Length= runif(50,min=4,max=8),
                 Sepal.Width= runif(50,min=2,max=4.5),
                 Petal.Length= runif(50,min=1,max=7),
                 Petal.Width= runif(50,min=0,max=2.5))#創(chuàng)建新的待測數(shù)據(jù)集

case<- predict(ldaModel,newdata = newcase)#預測數(shù)據(jù)集結(jié)果
case$data

參考鏈接:

https://blog.sciencenet.cn/blog-661364-961033.html

https://mp.weixin.qq.com/s/nhfF70wiJHBw0IvYevcrfQ

https://mp.weixin.qq.com/s/Wsst2nLKu1xGNi0XN7iSBA

https://www.cnblogs.com/pinard/p/6244265.html

https://zhuanlan.zhihu.com/p/25595297

如果有什么問題想要討論可以加群交流。

方法如下:

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
LDA線性判別分析
四大機器學習降維算法:PCA、LDA、LLE、Laplacian Eigenmaps
LDA?線性判別分析
數(shù)據(jù)降維算法-從PCA到LargeVis
比PCA更好用的監(jiān)督排序—LDA分析、作圖及添加置信-ggord
線性判別分析(LDA)基本原理及實現(xiàn)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服