classregtree(X、Y)関数を使用して決定木を作成しています。Xをサイズ70X9の行列(70個のデータオブジェクト、それぞれに9つの属性を持つ)として渡し、Yを70X1行列として渡します。私のY値はそれぞれ2または4です。ただし、形成された決定木では、一部のリーフノードに2.5または3.5の値が与えられます。
これが引き起こされる可能性がある理由はありますか?
classregtree(X、Y)関数を使用して決定木を作成しています。Xをサイズ70X9の行列(70個のデータオブジェクト、それぞれに9つの属性を持つ)として渡し、Yを70X1行列として渡します。私のY値はそれぞれ2または4です。ただし、形成された決定木では、一部のリーフノードに2.5または3.5の値が与えられます。
これが引き起こされる可能性がある理由はありますか?
classregtreeを回帰モード(デフォルトモード)で使用しています。モードを分類モードに変更します。
分類に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
を実行するオプションを誤って使用した可能性があります。