4

matlabsfitensembleを使用して分類子を学習する場合、パラメーターpriorとパラメーターを指定できますclassnames

両方のベクトルの要素の順序は同じですか? そして、真/偽クラスの標準値は何ですか?

より具体的には、真のクラスの事前確率が 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])?

ドキュメントで答えが見つかりません。

perfcurveのドキュメントはより具体的です:

以前: 文字列または 2 つの要素を持つ配列。これは、それぞれ陽性クラスと陰性クラスの事前確率を表します。既定値は '経験的' です。つまり、perfcurve はクラス頻度から事前確率を導き出します。'uniform' に設定すると、perfcurve はすべての事前確率を等しく設定します。

4

1 に答える 1

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

あなたが4つのクラスを持っていると想像してA,B,C,Dください。あなたYは次のようになります:

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

2 つのクラスだけが必要な場合は、次のように記述'classnames',['A';'B'],できます。fitensembleこれは と同じになります'classnames',['B';'A'],

これが遅い答えであることは知っています。役に立てば幸いです。

setosa',3 つのクラス ( versicolor ,virginica`)を持つ「fisheriris」データベースを使用しました。

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]、真の事前確率を示しています。

次のコードではfitensembles、最初の 1 つをデフォルト オプションでトレーニングしたため、事前確率はempirical(と同じtruepriorです); 2 番目のものは、拳と同じ結果になるppriorset toでトレーニングされます (クラス ラベルのアルファベット順であるため)。3 つ目は、アルファベット順ではない順序でトレーニングされ、最初の 2 つとは異なる結果を示しています。truepriortrueprior

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');

ここに画像の説明を入力

オプションfitensembleを使用して2つのクラスのみでトレーニングも行いましたclassnames

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

AdaBoosM12 つ以上のクラスをサポートしない証明として、ここでは 2 つのクラスのみで問題なく機能します。

于 2014-11-01T11:12:33.890 に答える