2013-12-11 42 views
0

我想對我的小數據集(65x8)執行簡單的LDA。我有65個實例(樣本),8個特徵(屬性)和4個類別。任何LDA的matlab代碼,因爲我知道Matlab Toolbox沒有LDA函數所以我需要編寫自己的代碼。任何幫助?MatLab中的任何LDA代碼示例?

我在網上找到這段代碼

load /Data; 
All_data= Data(:,1:8); 
All_data_label= Data(:,9); 
testing_ind = []; 
for i = 1:length(Data) 
    if rand>0.8 
     testing_ind = [testing_ind, i]; 
     end 
end 
training_ind = setxor(1:length(Data), testing_ind); 

[ldaClass,err,P,logp,coeff] = classify(Data(testing_ind,:),... 
    Data((training_ind),:),Data_label(training_ind,:),'linear'); 
[ldaResubCM,grpOrder] = confusionmat(All_data_label(testing_ind,:),ldaClass) 

然後我得到這個結果 ldaClass =

3 
2 
3 
2 
1 
4 
3 
3 
1 
2 
1 
1 
2 

ERR =

0.2963 

P =

0.0001 0.0469 0.7302 0.2229 
0.1178 0.5224 0.3178 0.0419 
0.0004 0.2856 0.4916 0.2224 
0.0591 0.6887 0.1524 0.0998 
0.8327 0.1637 0.0030 0.0007 
0.0002 0.1173 0.3897 0.4928 
0.0000 0.0061 0.7683 0.2255 
0.0000 0.0241 0.5783 0.3976 
0.9571 0.0426 0.0003 0.0000 
0.2719 0.5569 0.1630 0.0082 
0.9999 0.0001 0.0000 0.0000 
0.9736 0.0261 0.0003 0.0000 
0.0842 0.6404 0.2634 0.0120 

=係數_

4×4結構陣列字段: 類型 NAME1 NAME2 常量 線性

ldaResubCM =

4  0  0  0 
0  3  1  0 
0  1  1  0 
0  0  2  1 

grpOrder =

1 
2 
3 
4 

所以我有65個實例,8個屬性和4個類(1,2,3,4)。所以不知道如何解釋這些結果。任何幫助?

+0

LDA在Statistics Toolbox的'classify'中實現。如果你沒有 - 呃,你有什麼嘗試? [LDA公式](https://en.wikipedia.org/wiki/Linear_discriminant_analysis)可以直接在Matlab中實現。你卡在哪裏? –

+0

我編輯我的問題。我用分類,但不知道這些結果是什麼意思 – user3035413

+0

我修改了這個問題。找到一個代碼,並使用分類,但不知道我得到的是平庸的,以及如何使用這些結果。 – user3035413

回答

1

結果的解釋直接來自classify的文檔。

classify根據訓練數據和標籤(第二和第三個參數)訓練分類器,並將分類器應用於測試數據(第一個參數)。

ldaClass根據已使用訓練數據點和標籤進行訓練的分類器給出爲測試數據點選擇的類。

err是訓練錯誤率,訓練數據點的分數,使用使用該數據進行訓練的分類器進行錯誤分類。訓練錯誤率低估了獨立測試數據預期的錯誤。

P給出了後驗概率。即對於每個測試數據點(行),它爲每個類(列)提供數據點屬於該類的概率。概率之和爲1(對於每一行)。 ldaClass中的確定分類來自後驗概率,使得對於每個測試數據點,選擇具有最高概率的類別:[~, ind] = max(P')結果爲ind = ldaClass'

coeff包含有關訓練分類器的詳細信息。爲了使用它,你必須詳細研究分類器是如何工作的。

confusionmat將分類器分配的類別與測試數據與已知的真實類別進行比較,並生成結果表格confusion matrix。每行對應於測試數據點的真實類,每列對應於分類器分配的類。對角線上的數字表示正確的分類;在你的結果中,你有一個測試錯誤1 - sum(diag(confusionmat))/sum(confusionmat(:))爲0.308。特別是,混淆矩陣向您顯示了屬於第二類的四個測試數據點,其中三個已被正確分類,一個錯誤地歸類(屬於第三類)。

grpOrder只給出編號爲1到4的四個類的顯式類標籤;在你的情況下,索引和標籤是相同的。

相關問題