判別分析做的好的話能提高論文質量,挖掘數據最大的價值,為論文加分。判別分析(discriminat analysis)他要解決的問題是在一些已知研究對象已經用某種方法分成若干類的情況下,確定新的樣品屬於已知類別中的哪一類。如已知健康人和冠心病人的血壓、血脂等資料,以此建立判別函數,對新樣品分類進行預測。在模式識別領域(比如人臉識別,艦艇識別等圖形圖像識別領域)中有非常廣泛的應用。判別分析在處理問題時,通常要給出一個衡量新樣品與各已知類別接近程度的描述統計模型,即判別函數,同時也需要指定一種判別規則,以判斷新樣品的歸屬。判別規則可以是確定性的也可以是統計性的分別對應Fisher判別和Bayes判別。今天明明同學給大家講講《判別分析原理及R語言實現》。
目錄:
線性判別分析距離判別分析二次判別分析Bayes判別分析1、線性判別分析
提出:
最早由fisher(1936)提出,用於花卉分類上,將花卉的各種特徵(如花瓣長與寬,花萼長與寬等)利用線性組合方法變成單變量值,再以單值比較方法來判別事物間的差別。
示例:
以兩類判別為例說明。設有兩類樣品,分別為n1,n2個樣品,各測得p個指標,觀察值如下表所示。
可以預設線性判別函數為Y = a1X1+ a2X2+……+ apXp = a'X 。使得該判別函數能根據指標X1,X2,XP 之值區分各樣品歸屬哪一類。
步驟:
1、 求Fisher線性判別函數(Fisher線性判別準則要求各類之間的變異儘可能地大,而各類內部的變異儘可能地小,變異用離均差平方和表示)
2、 計算判別界值(求的ai後,代入判別函數式即得判別函數)
3、 建立判別標準
下面舉例說明R語言實現過程。
例1:根據經驗,今天和昨天氣溫差x1和x2是預報明天下雨或不下雨的兩個重要因子,實驗記錄如下表格,試問,今天測得x1=8.1,x2=2.0,明天應該預報下雨還是晴天?
R語言中進行線性判別得函數為lda()
形式如下:
lda(formula , data,……)
formula和上次明明同學介紹的迴歸分析中的形式一樣。
Data為數據框。
1、首先把數據加載到R語言中 ,然後畫出數據散點圖,初步觀察數據分佈。
R語言代碼
原始數據散點圖
2、建立判別函數
R語言代碼
3、用訓練的判別函數對源數據進行檢測
R語言代碼
由結果可知,兩類中分別有一個判別錯誤,判對的共有18對。判對率為18/20=90%
4、構造混淆矩陣,求出判對率
R語言代碼
由這個結果也可以看出,判對率為90%。求出的判別函數為y=-0.1035x1+0.2248x2 。
畫出分類線為:
兩類判別分類線
5、對新數據進行預測
R語言代碼
由結果可以看出,當x1 = 8.1 , x2 = 2.0 時,明天天氣分類為1,即明天天氣為下雨。
把新點添加到圖層,查看可視化效果,圖中箭頭指向的黑色點就是新點。也可以看出,該點落在有雨的類別中。
新點加入原始圖直觀觀察分類
2、距離判別分析
距離判別的基本思想:
根據已知分類的數據,分別計算各類的重心,即各組的均值。距離判別的準則是:對任給的一次觀測,若它與第i類的重心距離最近,就認為它來自第i類。通常採用馬氏距離進行判別。
判別標準:
設有兩總體G1、G2,從第一個總體中抽取n1個樣品,從第二個總體中抽取n2個樣品,對每個樣品測量P個指標。任取一個樣品實測指標為X =(x1,x2,…… ,xp)'。分別計算樣品X到總體G1、G2的距離D(X , G1)和D(X , G2),按距離最近準則判別歸類。即:
在R語言中利用WeDiBaDis包可以實現加權馬氏距離判別分析。
下面舉例說明R語言實現過程。
從市場上隨機抽取了20中牌子的電視機進行調查。按照電視機的質量評分、功能評分、銷售價格以及銷售情況(共兩種,暢銷和滯銷)進行如下統計。
現有一新廠商來推銷其產品,質量評分8.0,功能評分7.5,售價65百元。該廠商的場景如何?
R語言實現過程:
1)載入數據,分析數據呈現方式
R語言代碼
質量和功能散點圖
質量和售價散點圖
功能和售價散點圖
2)、導入WeDiBaDis包,建立馬氏距離模型。使用WDBdisc ()函數建立模型。
WDBdisc函數結構為:
WDBdisc(data, datatype, classcol, new.ind, distance, type, method)
Data: 一個訓練數據矩陣或者訓練數據距離矩陣。
Datatype:如果數據是數據矩陣,則datatype = "m",如果數據是距離矩陣,則datatype = "d"。
Classcol:分類變量所在的列,默認為第一列。
new.ind:為測試數據,可選參數,如果需要測試新數據的話需要加上。
distance: 判別分析採用的距離方法。默認為歐式距離。可選"correlation" , "Bhattacharyya", "Gower", "Mahalanobis", "BrayCurtis", "Orloci", "Hellinger"or "Prevosti"。
type: 如果距離為"Gower"距離,則需要該參數。該參數是一個列表。
Method:判別分析採用的方法,為"DB" 或者"WDB",默認為"WDB"。
R語言代碼
判別結果
由此可見訓練結果可知,類別1有兩個判錯的,類別2有一個判錯的,判對率為85%。
新數據代入模型,判斷新類別的分類。
預測結果
由預測結果可知,新類別所屬分類為1,即新廠商推廣的產品為暢銷,新廠商前景比較樂觀。
3、二次判別分析
當多總體之間的協方差矩陣不相同時,距離判別函數為非線性形式,一般為二次函數。R語言中用MASS包裡的qda()函數來建立模型。
qda()函數書寫形式和lda一樣,這裡明明同學簡單略過。你們可以回頭看看線性判別函數lda()書寫。
本次還以距離判別的數據為例,用二次判別建立模型,看看模型判對率。
R語言代碼
結果如下:
二判別結果
原始數據和預測數據對比結果
判對率
由此可見,我們給定的20個樣本訓練數據訓練的模型全部判對。判對率為100%。由此可見應用二次判別比馬氏距離判別效果好。
4、 Bayes判別分析
前面講的幾種判別分析方法計算簡單,結果明確,比較實用。但是存在兩個缺點,
我們還以二次判別分析的例子用bayes建模。
1、 假設先驗概率相等,即q1=q2=1/2,此時判別函數等價於fisher線性判別函數。
先驗概率相等的R語言代碼和判別結果
2、 先驗概率不一樣,取q1=13/20 , q2=7/20,然後建立bayes判別函數
先驗概率不相等的R語言代碼和判別結果
由於我們樣本數據少的原因,本結果中無論是先驗概率一樣還是先驗概率不一樣的bayes判別都對本實驗數據完美的進行了判別。判別結果好過馬氏距離判別分析。
由於篇幅有限,本文關於各種判別函數的建立與推導並沒有寫出,希望大家自己查看資料學習。學習更多R語言數據分析使用技巧、EXCEL和PPT製作教程請查看歷史文章。
有任何問題可以私信明明同學,幫助你解決數據分析,PPT製作,論文做圖、以及高質量圖片處理的難處。