1. 程式人生 > 其它 >判別分析--R中的實現、核心函式

判別分析--R中的實現、核心函式

R中的實現

1相關軟體包

R中的實現主要涉及4個軟體包中的相關函式,它們依次為MASS.klaRclasskknn

其中,MASS包的名稱為Modern Applied Statistics with S的縮寫,即S語言的現代應用統計,

該包中含有大量實用而先進的統計技術函式及適用資料集;klaR class 都主要用於分類技術,其中 klaR還含有若干用於視覺化技術的函式;kknn中則是基於有權重K最鄰近原理的分類、迴歸及聚類技術的相關函式。

2核心函式

(1) lda()函式

我們從表知道,lda()函式是實現線性判別的核心函式,該函式有三種使用格式,在預設情況下,即使用物件為資料框

data.frame時,其基本格式為:

lda (xgrouping, prior = proportionstol = 1.0e-4, methodCV = FALSEnu...)

另有分別適用於公式formula形式及矩陣matrix形式的兩種格式:

lda (formula, data, .. ., subset, na.action)

lda (x,grouping, .. ., subset,na.action)

其中,x為該函式將要處理的資料框 data.frame或資料矩陣 matrix;;formula則放置用於生成判別規則的公式,以y~x1+x2+x3格式呈現;;data

subset都用於以formula為物件的函式格式中,分別用於指明該formula 中變數所來自的資料集名稱及所納入規則建立過程的樣本;grouping 則指明每個觀測樣本所屬類別;;prior可設定各類別的先驗概率,在無設定情況下,R預設取訓練集中各類別樣本的比例;tol用於保證判別效果,可通過設定篩選變數,預設取0.0001;na.action用於選擇對於缺失值的處理,預設情況下,若有缺失值,則該函式無法執行,當更改設定為na.omit時,則自動刪除在用於判別的特徵變數中含有缺失值的觀測樣本。

(2) qda()函式

該函式同lda()一樣,也有著三種分別用於資料框、公式和矩陣物件的函式格式,預設(資料框為物件)格式為

:

qda(x,grouping,prior = proportions, methodCV = FALSE,nu,...)

適用於公式及矩陣形式的兩種格式分別為:

qda (formula, data, ..., subset,na.action)

qda (x, grouping, ..., subset, na.action)

(3) NaiveBayes()函式

該函式有兩種使用格式,一種為預設情況:

NaiveBayes(x,groupingprior,usekernel = FALSE,fL= 0, ...)

當物件為公式時,則取:

NaiveBayes(formula,data,..., subset,na.action = na.pass)

其中的xgroupingpriorformuladata 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的最近樣本,在可變引數中,traintest引數分別代表訓練集和測試集; cl用於放置訓練集中各已知類別樣本的類別取值;k為控制最近鄰域大小的引數,1設定得到確切判別結果所需滿足的最少票數。prob控制輸出勝出類別的得票比例,比如 k=10時,若其中有8個屬於類別12個屬於類別2,類別1則為勝出類別,且 probTRUE時,可輸出該待判樣本所對應的 prob值為8/10=0.8; use.all用於選擇再出現結點時的處理方式,所謂結點即指距離待判樣本第K近的已知樣本不止一個,比如,已知樣本ij與待判樣本n的距離相等,都剛好第K近,那麼當use.all 預設取TRUE時就將ij都納入判別過程,這時nK近鄰就有K+1個樣本,若use.allFALSE,則R軟體會在ij中隨機選出一個以保證K近鄰中剛好有K個樣本。

(5) kknn()函式

該函式的基本格式如下。

kknn (formula = formula(train), train,testna.action = na.omit(),k = 7distance "2kernel = "optimal", ykernel = NOLL,scale=TRUE, contrasts = c('unordered’=

"contr.dummy" , ordered = "contr.ordinal"))

其中 formulatraintest等主要引數在之前的各函式中都已說明distance引數用於設定選擇計算樣本間距離的具體方法,通過設定明氏距離(Minkowski Distance)中的引數來實現,取12時的明氏距離是最為常用的,引數取即為歐氏距離,而取1時則為曼哈頓距離,當取無窮時的極限情況下,可以得到切比雪夫距離。

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15244240.html