Main Content

predictorImportance

回帰木の予測子の重要度の推定

説明

imp = predictorImportance(tree) は、すべての予測子について分割による平均二乗誤差の変動を合計し、この合計を枝ノード数で除算することにより、tree の予測子の重要度の推定を計算します。imptree.PredictorNames と同じ数の要素をもつ行ベクトルとして返されます。imp のエントリは予測子の重要度の推定で、0 は考えられる最小の重要度を示します。

すべて折りたたむ

データ内のすべての予測子変数について予測子の重要度を推定します。

carsmall データ セットを読み込みます。

load carsmall

AccelerationCylindersDisplacementHorsepowerModel_Year、および Weight を予測子として使用して、MPG の回帰木を成長させます。

X = [Acceleration Cylinders Displacement Horsepower Model_Year Weight];
tree = fitrtree(X,MPG);

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

imp = predictorImportance(tree)
imp = 1×6

    0.0647    0.1068    0.1155    0.1411    0.3348    2.6565

最後の予測子 Weight は、燃費に対する影響が最も大きくなっています。予測に対する影響が最も小さい予測子は、最初の変数 Acceleration です。

代理分岐が含まれている回帰木で、データに含まれているすべての変数について予測子の重要度を推定します。

carsmall データ セットを読み込みます。

load carsmall

AccelerationCylindersDisplacementHorsepowerModel_Year、および Weight を予測子として使用して、MPG の回帰木を成長させます。代理分岐を識別するように指定します。

X = [Acceleration Cylinders Displacement Horsepower Model_Year Weight];
tree = fitrtree(X,MPG,Surrogate="on");

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

imp = predictorImportance(tree)
imp = 1×6

    1.0449    2.4560    2.5570    2.5788    2.0832    2.8938

imp予測子の重要度の推定の結果と比較すると、燃費に対する影響が最も大きいのは依然として Weight ですが、Cylinders は 4 番目に重要な予測子になっています。

carsmall データ セットを読み込みます。与えられた加速、気筒数、エンジン排気量、馬力、製造業者、モデル年および重量に対して自動車の燃費の平均を予測するモデルを考えます。CylindersMfg および Model_Year はカテゴリカル変数であるとします。

load carsmall
Cylinders = categorical(Cylinders);
Mfg = categorical(cellstr(Mfg));
Model_Year = categorical(Model_Year);
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg, ...
    Model_Year,Weight,MPG);

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

numCylinders = numel(categories(Cylinders))
numCylinders = 3
numMfg = numel(categories(Mfg))
numMfg = 28
numModelYear = numel(categories(Model_Year))
numModelYear = 3

CylindersModel_Year には 3 つしかカテゴリがないので、予測子分割アルゴリズムの標準 CART ではこの 2 つの変数よりも連続予測子が分割されます。

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

Mdl = fitrtree(X,"MPG",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";

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

入力引数

すべて折りたたむ

回帰木モデル。fitrtree で学習させた RegressionTree モデル オブジェクト、または compact で作成した CompactRegressionTree モデル オブジェクトとして指定します。

詳細

すべて折りたたむ

予測子の重要度

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

(R1 – R2 – R3)/Nbranch,

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

Ri = PiEi,

ここで、Pi はノード i のノード確率、Ei はノード i の平均二乗誤差です。

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

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

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

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

拡張機能

バージョン履歴

R2011a で導入