2011-08-04 14 views
1

私はclassregtree(X、Y)関数を使って意思決定ツリーを作っています。私はXを70X9のサイズの行列(70個のデータオブジェクト、それぞれが9個の属性を持つ)として渡しています.Yを70X1の行列として渡しています。私のY値はそれぞれ2または4のいずれかです。しかし、形成された決定木では、いくつかの葉ノードに対して2.5または3.5の値が与えられます。Matlab:決定木が無効な出力値を表示

これはなぜ起こり得るのでしょうか?ここ

+0

また、私たちはこのトピックについて話していますが、classregtreeは属性の欠落をどのように処理していますか?私は、データセットに欠落している属性を持つオブジェクトをいくつか持っていますが、これを処理するためにMATLABがどのメソッドを使用しているかわかりません。そのようなオブジェクトを削除しますか?それらを補間しますか?サロゲート分割を使用しますか? – Karan

+1

欠損値を表すには 'NaN'を使います。 CLASSREGTREEには、トレーニングフェーズで欠損値を処理するためのオプション「サロゲート」があります。問題の関数のドキュメントを参照してください。欠落値を平均/モードに置き換えることによって、いつでもデータを前処理することができます。 – Amro

+0

私のデータでは、欠損値に対してNaNを書いています。 Iveは欠けているデータをclassregtreeにどう対処するかに関する他の情報は提供しませんでした。では、classregtreeがNaN値を扱うために使用するデフォルトのメソッドは何ですか? – Karan

答えて

3

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

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 

tree

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

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

%# ... 

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

分類は常に文字列を返しますので、私はあなたが誤ってregressionを行いmethod=regressionオプション、(数値目標)ではないclassification(離散ターゲット)を使用していたかもしれないと思うことに注意