2017-06-14 4 views
2

ここにmatlabのfitctreeが機能の注文を考慮に入れた例があります!どうして ?matlab 'fitctree'のCARTアルゴリズムは属性の順序を考慮に入れますなぜ?

load ionosphere % Contains X and Y variables 
Mdl = fitctree(X,Y) 
view(Mdl,'mode','graph'); 
X1=fliplr(X); 
Mdl1 = fitctree(X1,Y) 
view(Mdl1,'mode','graph'); 

同じモデルではないので、同じ機能を扱うにもかかわらず同じ分類精度ではありませんか?

+1

それは並べ替えではないのです。 Xは特徴の行列を表し、Yはクラスラベルの列ベクトルを表す。 ここに簡単な例があります:2つの種類の人がいると仮定しましょう目立つ貪欲な人物5つのリンゴと3つのバナナまたは2つのリンゴと2つのバナナを得ると、最初は幸せになります。バナナや8個のリンゴ、8個のバナナは貪欲です。この場合、トレーニング行列Xは '[5 3]になります。 2 2; 10 9; 8 8]とYは[幸せ幸せ怒り怒り]です。通常、[5 2 10 8] 'と[3 2 9 8]を並べ替えると同じモデルになります – LMarwa

+0

私はあなたのコードを実行すると、かなり似たようなツリーが得られます。私はクラスA = [2 1 2 1]とクラスB = [5 6 5 6]を分けるために(2-5)の間でどこにでも分けることができるので、唯一の違いがあると仮定します。数値ソルバーは真ん中のどこかにあり、正しく分類され、したがって停止します。 –

+0

正常に分類しても、正常に機能の順序と同じモデルを提示する必要はありません。 [2 1 2 1; 5 6 5 6]はY = [A B] 'の訓練行列であるため、[1 1 2 2; 6 6 5 5]同じYのために、正しい? – LMarwa

答えて

0

例では、Xには34個の予測子が含まれています。予測子には名前がなく、fitctreeは列番号x1, x2, ..., x34で参照するだけです。表を反転すると、列番号が変更され、その名前が変更されます。従ってx1 -> x34x2 -> x33など

CARTは常に2つの子ノード間の不純物ゲインを最大にするプレディクタによってノードを分割するので、これは問題ではありません。しかし、時には同じ不純物の増加をもたらす複数の予測因子が存在する。次に、列番号が一番小さいものを選びます。また、予測子を並べ替えることによって列番号が変更されたため、そのノードで別の予測子になります。

など。のは、マークされたスプリットを見てみましょう:

オリジナルオーダー(mdl): noflip ひっくり返し順(mdl1):常に同じ予測変数と値が選択されています。この時点まで flip

。注文に応じて名前が変更されました。新しいモデルの古いデータのx5 = x30。しかし、とx6は実際には異なる予測変数です。 x6は、元の順序でx29です。

もの予測子との間の散布図は、これが起こる可能性を示し:青、シアン線は、そのノードにそれぞれmdlmdl1によって実行される分割をマーク

complot

。わかるように、両方の分割はラベルごとに同じ数の要素を持つ子ノードを生成します!したがって、CARTは2つの予測変数のいずれかを選択することができ、同じ不純物の増加を引き起こします。

その場合は、低い列番号のものを選択するように見えます。フリップされていないテーブルのがx29の代わりに選択されているので、3 < 29です。しかし、テーブルを反転すると、はx32になり、x29x6になります。 6 < 32以降はx6となり、元はx29となります。

最終的にはこれは問題ではありません。反転したテーブルの決定木は良くないか悪いです。これは、ツリーがオーバーフィットし始める下位のノードでのみ発生します。だからあなたは本当に気にする必要はありません。

付録:散布図を生成するための

コード:ラベルを変更しながら

load ionosphere % Contains X and Y variables 
Mdl = fitctree(X,Y); 
view(Mdl,'mode','graph'); 
X1=fliplr(X); 
Mdl1 = fitctree(X1,Y); 
view(Mdl1,'mode','graph'); 

idx = (X(:,5)>=0.23154 & X(:,27)>=0.999945 & X(:,1)>=0.5); 
remainder = X(idx,:); 
labels = cell2mat(Y(idx,:)); 

gscatter(remainder(:,3), remainder(:,(35-6)), labels,'rgb','osd'); 

limits = [-1.5 1.5]; 
xlim(limits) 
ylim(limits) 
xlabel('predictor 3') 
ylabel('predictor 29') 
hold on 
plot([0.73 0.73], limits, '-b') 
plot(limits, [0.693 0.693], '-c') 
legend({'b' 'g'}) 
+0

ありがとうございます。しかし、たとえ "複数の予測変数が同じ不純物の増加をもたらす"としても、意思決定ツリーは、それらを並べ替えてもツリーを構築するのと同じ予測変数を考慮しないのはなぜですか? – LMarwa

+0

@ Lマルワ私は説明を広げた。今はっきりしていますか? –

関連する問題