判別分析--R中的實現、核心函式
R中的實現
1相關軟體包
R中的實現主要涉及4個軟體包中的相關函式,它們依次為MASS.klaR、class和 kknn。
其中,MASS包的名稱為Modern Applied Statistics with S的縮寫,即S語言的現代應用統計,
該包中含有大量實用而先進的統計技術函式及適用資料集;klaR 與class 都主要用於分類技術,其中 klaR還含有若干用於視覺化技術的函式;而kknn中則是基於有權重K最鄰近原理的分類、迴歸及聚類技術的相關函式。
2核心函式
(1) lda()函式
我們從上表知道,lda()函式是實現線性判別的核心函式,該函式有三種使用格式,在預設情況下,即使用物件為資料框
lda (x,grouping, prior = proportions,tol = 1.0e-4, method,CV = FALSE,nu,...)
另有分別適用於公式formula形式及矩陣matrix形式的兩種格式:
lda (formula, data, .. ., subset, na.action)
lda (x,grouping, .. ., subset,na.action)
其中,x為該函式將要處理的資料框 data.frame或資料矩陣 matrix;;formula則放置用於生成判別規則的公式,以y~x1+x2+x3格式呈現;;data和
(2) qda()函式
該函式同lda()一樣,也有著三種分別用於資料框、公式和矩陣物件的函式格式,預設(資料框為物件)格式為
qda(x,grouping,prior = proportions, method,CV = FALSE,nu,...)
適用於公式及矩陣形式的兩種格式分別為:
qda (formula, data, ..., subset,na.action)
qda (x, grouping, ..., subset, na.action)
(3) NaiveBayes()函式
該函式有兩種使用格式,一種為預設情況:
NaiveBayes(x,grouping,prior,usekernel = FALSE,fL= 0, ...)
當物件為公式時,則取:
NaiveBayes(formula,data,..., subset,na.action = na.pass)
其中的x、grouping、prior、formula、data 及 subset引數不再贅述。需要注意的是,雖該函式中也有na.action引數,但與lda()和qda()中的不同,此處在預設情況下為na.pass,表示不將缺失值納入計算,並不會導致函式無法執行,當取值為na.omit時則與lda()函式相同,表示刪除相應的含有缺失值的觀測樣本。
另外,usekernel引數用於選擇函式計算過程中,密度估計所採用的演算法,預設時取FALSE,表示使用標準密度估計,也可通過取值為TRUE,選擇使用核密度估計法。
fL用於設定進行拉普拉斯修正(Laplace Correction)的引數值,預設取0,即不進行修正,該修正過程在資料量較小的情況下十分必要。這是因為樸素貝葉斯方法的一個致命缺點在於對稀疏資料問題過於敏感,它以各特徵變數條件獨立為前提,因此使用相乘的方式來計算所需結果,若其中任一項由於資料集中不存在滿足條件的樣本,使得該項等於0,都會導致整體乘積結果為0,得到無效判別結果。因此,為了解決這個問題,拉普拉斯修正就可以給未出現的特徵值,賦予一個“小”的值而不是0。
(4) knn(函式
該函式的基本格式如下:
knn (train,test,cl, k = 1, 1 = 0, prob = FALSE,use.all = TRUE)
首knn()函式預設選擇歐氏距離來尋找所需的K的最近樣本,在可變引數中,train和 test引數分別代表訓練集和測試集; cl用於放置訓練集中各已知類別樣本的類別取值;k為控制最近鄰域大小的引數,1設定得到確切判別結果所需滿足的最少票數。prob控制輸出“勝出”類別的得票比例,比如 k=10時,若其中有8個屬於類別1,2個屬於類別2,類別1則為“勝出”類別,且 prob取TRUE時,可輸出該待判樣本所對應的 prob值為8/10=0.8; use.all用於選擇再出現“結點”時的處理方式,所謂結點即指距離待判樣本第K近的已知樣本不止一個,比如,已知樣本i和j與待判樣本n的距離相等,都剛好第K近,那麼當use.all 預設取TRUE時就將i和j都納入判別過程,這時n的K近鄰就有K+1個樣本,若use.all取FALSE,則R軟體會在i與j中隨機選出一個以保證K近鄰中剛好有K個樣本。
(5) kknn()函式
該函式的基本格式如下。
kknn (formula = formula(train), train,test,na.action = na.omit(),k = 7,distance "2, kernel = "optimal", ykernel = NOLL,scale=TRUE, contrasts = c('unordered’=
"contr.dummy" , ordered = "contr.ordinal"))
其中 formula、train、test等主要引數在之前的各函式中都已說明。distance引數用於設定選擇計算樣本間距離的具體方法,通過設定明氏距離(Minkowski Distance)中的引數來實現,取1或2時的明氏距離是最為常用的,引數取⒉即為歐氏距離,而取1時則為曼哈頓距離,當取無窮時的極限情況下,可以得到切比雪夫距離。
本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15244240.html