R中的實現
1 相關軟件包
R中的實現主要涉及4個軟件包中的相關函數,它們依次為MASS.klaR、class和 kknn。
其中,MASS包的名稱為Modern Applied Statistics with S的縮寫,即S語言的現代應用統計,
該包中含有大量實用而先進的統計技術函數及適用數據集;klaR 與class 都主要用於分類技術,其中 klaR還含有若干用於可視化技術的函數;而kknn中則是基於有權重K最鄰近原理的分類、回歸及聚類技術的相關函數。
2 核心函數
(1) lda()函數
我們從上表知道,lda()函數是實現線性判別的核心函數,該函數有三種使用格式,在默認情況下,即使用對象為數據框data.frame時,其基本格式為:
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和 subset都用於以formula為對象的函數格式中,分別用於指明該formula 中變量所來自的數據集名稱及所納入規則建立過程的樣本;grouping 則指明每個觀測樣本所屬類別;;prior可設置各類別的先驗概率,在無設置情況下,R默認取訓練集中各類別樣本的比例;tol用於保證判別效果,可通過設置篩選變量,默認取0.0001;na.action用於選擇對於缺失值的處理,默認情況下,若有缺失值,則該函數無法運行,當更改設置為na.omit時,則自動刪除在用於判別的特征變量中含有缺失值的觀測樣本。
(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時則為曼哈頓距離,當取無窮時的極限情況下,可以得到切比雪夫距離。