1

classregtree(X、Y)関数を使用して決定木を作成しています。Xをサイズ70X9の行列(70個のデータオブジェクト、それぞれに9つの属性を持つ)として渡し、Yを70X1行列として渡します。私のY値はそれぞれ2または4です。ただし、形成された決定木では、一部のリーフノードに2.5または3.5の値が与えられます。

これが引き起こされる可能性がある理由はありますか?

4

2 に答える 2

3

classregtreeを回帰モード(デフォルトモード)で使用しています。モードを分類モードに変更します。

于 2011-08-08T11:37:42.733 に答える
1

分類にCLASSREGTREEを使用する例を次に示します。

%# load dataset
load fisheriris

%# split training/testing
cv = cvpartition(species, 'holdout',1/3);
trainIdx = cv.training;
testIdx = cv.test;

%# train
t = classregtree(meas(trainIdx,:), species(trainIdx), 'method','classification', ...
    'names',{'SL' 'SW' 'PL' 'PW'});

%# predict
pred = t.eval(meas(testIdx,:));

%# evaluate
cm = confusionmat(species(testIdx),pred)
acc = sum(diag(cm))./sum(testIdx)

出力(混同行列と精度):

cm =
    17     0     0
     0    13     3
     0     2    15
acc =
          0.9

木

これで、ターゲットクラスが数値としてエンコードされている場合、返される予測は文字列のセル配列のままであるため、数値に戻す必要があります。

%# load dataset
load fisheriris
[species,GN] = grp2idx(species);

%# ...

%# evaluate
cm = confusionmat(species(testIdx),str2double(pred))
acc = sum(diag(cm))./sum(testIdx)

分類は常に文字列を返すことに注意してください。そのため、分類(個別のターゲット)ではなく回帰(数値のターゲット)method=regressionを実行するオプションを誤って使用した可能性があります。

于 2011-08-04T20:09:12.620 に答える