web-dev-qa-db-ja.com

Matlabのディシジョンツリー

Matlabでヘルプを見ましたが、「classregtree」関数でパラメーターを使用する方法を説明せずに例を提供しています。 'classregtree'とそのパラメータの使用法を説明する助けがあれば幸いです。

11
user238469

関数のドキュメントページ classregtree は一目瞭然です...

分類木モデルの最も一般的なパラメータのいくつかを見てみましょう。

  • x:データマトリックス、行はインスタンス、列は属性を予測しています
  • y:列ベクトル、各インスタンスのクラスラベル
  • categorical:どの属性が(連続ではなく)離散型であるかを指定します
  • method:分類ツリーまたは回帰ツリーを生成するかどうか(クラスタイプによって異なります)
  • names:属性に名前を付けます
  • Prune:エラーの少ないプルーニングを有効/無効にします
  • minparent/minleaf:ノードをさらに分割する場合は、ノード内のインスタンスの最小数を指定できます
  • nvartosample:ランダムツリーで使用されます(各ノードでランダムに選択されたK個の属性を考慮してください)
  • weights:重み付けされたインスタンスを指定します
  • cost:コストマトリックスを指定します(さまざまなエラーのペナルティ)
  • splitcriterion:各分割で最適な属性を選択するために使用される基準。私は、情報獲得基準のバリエーションであるジニ係数にのみ精通しています。
  • priorprob:トレーニングデータから計算されるのではなく、以前のクラスの確率を明示的に指定します

プロセスを説明するための完全な例:

%# load data
load carsmall

%# construct predicting attributes and target class
vars = {'MPG' 'Cylinders' 'Horsepower' 'Model_Year'};
x = [MPG Cylinders Horsepower Model_Year];  %# mixed continous/discrete data
y = cellstr(Origin);                        %# class labels

%# train classification decision tree
t = classregtree(x, y, 'method','classification', 'names',vars, ...
                'categorical',[2 4], 'Prune','off');
view(t)

%# test
yPredicted = eval(t, x);
cm = confusionmat(y,yPredicted);           %# confusion matrix
N = sum(cm(:));
err = ( N-sum(diag(cm)) ) / N;             %# testing error

%# Prune tree to avoid overfitting
tt = Prune(t, 'level',3);
view(tt)

%# predict a new unseen instance
inst = [33 4 78 NaN];
prediction = eval(tt, inst)    %# pred = 'Japan'

tree


更新:

上記の classregtree クラスは廃止され、 ClassificationTree および RegressionTree に置き換えられました。 = R2011aのクラス( fitctree および fitrtree 関数、R2014aの新機能を参照)。

新しい関数/クラスを使用した、更新された例を次に示します。

t = fitctree(x, y, 'PredictorNames',vars, ...
    'CategoricalPredictors',{'Cylinders', 'Model_Year'}, 'Prune','off');
view(t, 'mode','graph')

y_hat = predict(t, x);
cm = confusionmat(y,y_hat);

tt = Prune(t, 'Level',3);
view(tt)

predict(tt, [33 4 78 NaN])
34
Amro