predictorImportance
分類木の予測子の重要度の推定
説明
例
予測子の重要度の値の推定
フィッシャーのアヤメのデータセットを読み込みます。
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';
このケースでは、最も重要な予測子は capital_gain
であり、次に重要なのは education_num
です。
入力引数
tree
— 学習済みの分類木
ClassificationTree
モデル オブジェクト | CompactClassificationTree
モデル オブジェクト
学習済みの分類木。ClassificationTree
または CompactClassificationTree
モデル オブジェクトとして指定します。つまり、tree
は fitctree
または compact
が返す学習済み分類モデルです。
出力引数
詳細
予測子の重要度
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
) — ノードのジニ指数は、次の式で表されます。ここで、合計はノードのクラス i 全体が対象であり、p(i) は、ノードに到達したクラス i をもつ観測クラスの比率です。クラスを 1 つだけもつノード ("純粋" ノード) のジニ指数は
0
です。それ以外のノードでは、ジニ指数は正の値です。したがって、ジニ指数はノードの不純度の基準です。逸脱度 (
"deviance"
) — ノードの逸脱度は、ジニ指数と同様に定義された p(i) を用いて次の式で表されます。純粋ノードの逸脱度は
0
です。それ以外のノードでは、逸脱度は正の値です。Twoing 規則 (
"twoing"
) — Twoing はノードの純粋度の基準ではありませんが、ノードの分割を判断するための別の基準の 1 つです。L(i) は、分割後の左側の子ノードのクラス i のメンバーの比率を示し、R(i) は分割後の右側の子ノードのクラス i のメンバーの比率を示すとします。最大化するための分割基準を選択します。ここで、P(L) および P(R) は、それぞれ左側と右側に分割された観測値の比率を表します。式が大きい場合は、分割によって各子ノードの純粋度は高くなります。同様に、式が小さい場合は、分割によって各子ノードが互いに類似するようになります。このため、親ノードとも類似するようになります。分割によるノードの純粋度の向上はありませんでした。
ノード誤差 — ノード誤差はノードで誤分類されたクラスの比率です。j がノードで最大の学習標本数をもつクラスである場合は、ノード誤差は次のように表されます。
1 – p(j).
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2011a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)