Main Content

predictorImportance

分類木の予測子の重要度の推定

説明

imp = predictorImportance(tree) は、すべての予測子上の分割によるリスク変動を合算し、枝ノード数でこの和を除算することにより、tree での予測子の重要度の推定を計算します。

すべて折りたたむ

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

分類木を成長させます。

Mdl = fitctree(meas,species);

すべての予測子変数について予測子の重要度の推定を計算します。

imp = predictorImportance(Mdl)
imp = 1×4

         0         0    0.0907    0.0682

imp の最初の2 つの要素は 0 です。そのため、最初の 2 つの予測子では、アヤメ種を分類する Mdl の計算は開始されません。

予測子の重要度の推定は、代理分岐を使用する場合、予測子の順序には依存しませんが、代理分岐を使用しない場合には、予測子の順序に依存します。

前の例のデータ列の順序を並べ替え、別の分類木を成長させ、予測子の重要度の推定を計算します。

measPerm  = meas(:,[4 1 3 2]);
MdlPerm = fitctree(measPerm,species);
impPerm = predictorImportance(MdlPerm)
impPerm = 1×4

    0.1515         0    0.0074         0

この予測子の重要度の推定は、imp の並べ替えにはなっていません。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

分類木を成長させます。代理分岐の使用を指定します。

Mdl = fitctree(meas,species,'Surrogate','on');

すべての予測子変数について予測子の重要度の推定を計算します。

imp = predictorImportance(Mdl)
imp = 1×4

    0.0791    0.0374    0.1530    0.1529

すべての予測子に多少の重要度があります。最初の 2 つの予測子は最後の 2 つほど重要ではありません。

前の例のデータ列の順序を並べ替え、代理分岐の使用を指定して別の分類木を成長させ、予測子の重要度の推定を計算します。

measPerm  = meas(:,[4 1 3 2]);
MdlPerm = fitctree(measPerm,species,'Surrogate','on');
impPerm = predictorImportance(MdlPerm)
impPerm = 1×4

    0.1529    0.0791    0.1530    0.0374

この予測子の重要度の推定は、imp の並べ替えになっています。

census1994 データセットを読み込みます。年齢、労働階級、教育レベル、婚姻区分、人種、性別、資本利得および損失、および 1 週間の勤務時間が与えられた個人の給与カテゴリを予測するモデルを考えます。

load census1994
X = adultdata(:,{'age','workClass','education_num','marital_status','race',...
    'sex','capital_gain','capital_loss','hours_per_week','salary'});

summary を使用して、カテゴリカル変数で表現されるカテゴリの個数を表示します。

summary(X)
Variables:

    age: 32561x1 double

        Values:

            Min          17   
            Median       37   
            Max          90   

    workClass: 32561x1 categorical

        Values:

            Federal-gov            960  
            Local-gov             2093  
            Never-worked             7  
            Private              22696  
            Self-emp-inc          1116  
            Self-emp-not-inc      2541  
            State-gov             1298  
            Without-pay             14  
            NumMissing            1836  

    education_num: 32561x1 double

        Values:

            Min           1   
            Median       10   
            Max          16   

    marital_status: 32561x1 categorical

        Values:

            Divorced                   4443  
            Married-AF-spouse            23  
            Married-civ-spouse        14976  
            Married-spouse-absent       418  
            Never-married             10683  
            Separated                  1025  
            Widowed                     993  

    race: 32561x1 categorical

        Values:

            Amer-Indian-Eskimo       311  
            Asian-Pac-Islander      1039  
            Black                   3124  
            Other                    271  
            White                  27816  

    sex: 32561x1 categorical

        Values:

            Female     10771  
            Male       21790  

    capital_gain: 32561x1 double

        Values:

            Min            0  
            Median         0  
            Max        99999  

    capital_loss: 32561x1 double

        Values:

            Min            0  
            Median         0  
            Max         4356  

    hours_per_week: 32561x1 double

        Values:

            Min           1   
            Median       40   
            Max          99   

    salary: 32561x1 categorical

        Values:

            <=50K     24720  
            >50K       7841  

カテゴリカル変数で表現されるカテゴリの数は連続変数のレベル数と比較するとわずかなので、予測子分割アルゴリズムの標準 CART ではカテゴリカル変数よりも連続予測子が分割されます。

データセット全体を使用して分類木に学習をさせます。偏りの無い木を成長させるため、予測子の分割に曲率検定を使用するよう指定します。データには欠損観測値が含まれているので、代理分岐を使用するよう指定します。

Mdl = fitctree(X,'salary','PredictorSelection','curvature',...
    'Surrogate','on');

すべての予測子について分割によるリスク変動を合計し、この合計を枝ノード数で除算することにより、予測子の重要度の値を推定します。棒グラフを使用して推定を比較します。

imp = predictorImportance(Mdl);

figure;
bar(imp);
title('Predictor Importance Estimates');
ylabel('Estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

Figure contains an axes object. The axes object with title Predictor Importance Estimates, xlabel Predictors, ylabel Estimates contains an object of type bar.

このケースでは、最も重要な予測子は capital_gain であり、次に重要なのは education_num です。

入力引数

すべて折りたたむ

学習済みの分類木。ClassificationTree または CompactClassificationTree モデル オブジェクトとして指定します。つまり、treefitctree または compact が返す学習済み分類モデルです。

出力引数

すべて折りたたむ

予測子の重要度の推定。tree.X の予測子 (列) の数と同じ数の要素をもつ行ベクトルとして返されます。0 は考えられる最小の重要度を示します。

詳細

すべて折りたたむ

予測子の重要度

predictorImportance は、すべての予測子について分割によるノード リスクの変動を合計し、この合計を枝ノードの総数で除算することにより、木における予測子の重要度の尺度を計算します。ノード リスクの変動は、親ノードのリスクと 2 つの子のリスク合計との差です。たとえば、木で親ノード (例: ノード 1) が 2 つの子ノード (例: ノード 2 とノード 3) に分割される場合、predictorImportance は、次によって分割予測子の重要度を高めます。

(R1 – R2 – R3)/Nbranch,

ここで、Ri はノード i のノード リスク、Nbranch は枝ノードの総数です。"ノード リスク" は、ノード確率によって重み付けされたノード誤差またはノードの不純度として定義されます。

Ri = PiEi,

ここで、Pi はノード i のノード確率、Ei はノード i のノード誤差 (twoing 基準を最小化することで成長させた木の場合) またはノードの不純度 (ジニ指数や逸脱度などの不純度基準を最小化することで成長させた木の場合) です。

予測子の重要度の推定は、学習に代理分岐を使用するかどうかによって変化します。

  • 代理分岐を使用する場合、predictorImportance は、各枝ノードにおいて代理分岐を含むすべての分割上でノード リスクの変動を合計します。代理分岐を使用しない場合、この和は各枝ノードで検出される最適分割上で計算されます。

  • 予測子の重要度の推定は、代理分岐を使用する場合、予測子の順序には依存しませんが、代理分岐を使用しない場合には、予測子の順序に依存します。

  • 代理分岐を使用する場合、predictorImportance は、枝刈り (または葉のマージ) によってツリーが縮小する前に、推定を計算します。代理分岐を使用しない場合、predictorImportance は、枝刈りによってツリーが縮小した後に、推定を計算します。そのため、枝刈りは、代理分岐を含まずに成長したツリーでの予測子の重要度には影響を与え、代理分岐を含めて成長したツリーでの予測子の重要度には影響を与えません。

不純度とノード誤差

決定木では、"不純度" または "ノード誤差" に基づいてノードを分割します。

不純度とは、SplitCriterion 名前と値の引数によって、次のいずれかの意味を表します。

  • ジニ多様性指数 (gdi) — ノードのジニ指数は、次の式で表されます。

    1ip2(i),

    ここで、合計はノードのクラス i 全体が対象であり、p(i) は、ノードに到達したクラス i をもつ観測クラスの比率です。クラスを 1 つだけもつノード ("純粋" ノード) のジニ指数は 0 です。それ以外のノードでは、ジニ指数は正の値です。したがって、ジニ指数はノードの不純度の基準です。

  • 逸脱度 ("deviance") — ノードの逸脱度は、ジニ指数と同様に定義された p(i) を用いて次の式で表されます。

    ip(i)log2p(i).

    純粋ノードの逸脱度は 0 です。それ以外のノードでは、逸脱度は正の値です。

  • Twoing 規則 ("twoing") — Twoing はノードの純粋度の基準ではありませんが、ノードの分割を判断するための別の基準の 1 つです。L(i) は、分割後の左側の子ノードのクラス i のメンバーの比率を示し、R(i) は分割後の右側の子ノードのクラス i のメンバーの比率を示すとします。最大化するための分割基準を選択します。

    P(L)P(R)(i|L(i)R(i)|)2,

    ここで、P(L) および P(R) は、それぞれ左側と右側に分割された観測値の比率を表します。式が大きい場合は、分割によって各子ノードの純粋度は高くなります。同様に、式が小さい場合は、分割によって各子ノードが互いに類似するようになります。このため、親ノードとも類似するようになります。分割によるノードの純粋度の向上はありませんでした。

  • ノード誤差 — ノード誤差はノードで誤分類されたクラスの比率です。j がノードで最大の学習標本数をもつクラスである場合は、ノード誤差は次のように表されます。

    1 – p(j).

拡張機能

バージョン履歴

R2011a で導入