2013-08-16 53 views
4

當使用matlabs fitensemble來學習分類器時,我可以指定參數prior以及參數classnamesfitensemble中先驗矢量的正確順序是什麼?

兩個向量中元素的順序是否相同?真/假類的標準值是多少?

更具體地說:假設真實類有先驗概率0.6,假類0.4;我應該使用:

ens = fitensemble(...,'prior',[0.6 0.4])

ens = fitensemble(...,'prior',[0.4 0.6])

ens = fitensemble(...,'prior',[0.4 0.6],'classnames',[true false])

ens = fitensemble(...,'prior',[0.4 0.6],'classnames',[false,true])?我在documentation找不到答案。

perfcurve的文檔更specifc:

之前:字符串或陣列的兩個元素。它分別表示正面和負面類別的先驗概率 。 默認值爲'經驗值',即perfcurve從類頻率中導出先驗概率 。如果設置爲「統一」,則perfcurve會將以前的所有 概率設置爲相等。

+0

感謝您的編輯,@丹。尷尬。 –

回答

1

ens = fitensemble(X,Y,method,nlearn,learners)創建一個預測對數據的響應的集合模型。整體由學習者列出的模型組成。

第一部分

您的類標籤的字母順序使用prior

因此,如果標籤['A','B'],您使用'prior',[P(A) P(B)]

,或者如果標籤['true','false'],您使用'prior',[P(false) P(true)]

,或者如果標籤[-1 10],您使用'prior',[P(-1) P(10)]

第二部分

關於classnames,使用此選項,這樣你可以在你的數據調用fitensemble了更少的類。

假設您有四節課A,B,C,D,所以你Y將是這樣的:

Y = [A;A;B;D;B;A;C;A;A;A;D, ... ]; 

現在你可能會寫'classnames',['A';'B'],如果你想fitensemble只是兩個類,這將是一樣'classnames',['B';'A'],

我知道這是一個遲到的答案,我希望它有幫助。

我已經使用 'fisheriris' 數據庫,其中有三個類(setosa',雲芝, virginica`)。

因爲它有150例和50的每個類,我隨機化了數據並選擇了100樣本。

load fisheriris 
rng(12); 
idx = randperm(size(meas,1)); 
meas = meas(idx,:); 
species = species(idx,:); 
meas = meas(1 : 100,:); 
species = species(1 : 100,:); 
trueprior = [ sum(strcmp(species,'setosa')),... 
       sum(strcmp(species,'versicolor')),... 
       sum(strcmp(species,'virginica'))]/100; 

trueprior = [0.32,0.30,0.38]顯示了真實的先驗概率。

在下面的代碼我已經訓練3 fitensembles,第一個使用默認選項,因此先驗概率是empirical(是trueprior爲相同);第二個是用pprior設置爲trueprior的訓練,其結果與第一個拳頭相同(因爲trueprior按類別標籤的字母順序排列)。第三個是用非字母順序進行訓練,並顯示與前兩個不同的結果。

ada1 = fitensemble(meas,species,'AdaBoostM2',20,'tree'); 
subplot(311) 
plot(resubLoss(ada1,'mode','individual')); 
title('Resubstitution error for default prior (empirical)'); 
ada2 = fitensemble(meas,species,'AdaBoostM2',20,'tree','prior',trueprior); 
subplot(312) 
plot(resubLoss(ada2,'mode','individual')); 
title('Resubstitution error for prior with alphabetical order of class labels'); 
ada3 = fitensemble(meas,species,'AdaBoostM2',20,'tree','prior',trueprior(end:-1:1)); 
subplot(313) 
plot(resubLoss(ada3,'mode','individual')); 
title('Resubstitution error for prior with random order'); 

enter image description here

我還培養了fitensemble使用classnames選項

ada4 = fitensemble(meas,species,'AdaBoostM1',20,'tree','classnames',... 
     {'versicolor','virginica'}); 

只有兩班作爲證據AdaBoosM1不支持多類工作正常這裏只有兩個類。

+0

奇怪...合奏的ClassNames屬性應該自動排序。如果你可以在答案的開頭給出一個簡短的用法總結,那麼它會更有用。 –

+0

@YAK,我提供了一個更好的例子。查看編輯。 – Rashid

+0

完美。我只是使用完全隨機數據進行預測,並可以確認您的結果。 –

相關問題