ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

oobPermutedPredictorImportance

回帰木のランダム フォレストに対する out-of-bag 予測子の並べ替えによる予測子の重要度の推定

説明

Imp = oobPermutedPredictorImportance(Mdl) は、回帰木のランダム フォレスト Mdl を使用して、並べ替えによる out-of-bag 予測子の重要度の推定を返します。MdlRegressionBaggedEnsemble モデル オブジェクトでなければなりません。

Imp = oobPermutedPredictorImportance(Mdl,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。たとえば、並列計算を使用して計算を高速化したり、予測子の重要度の推定に使用する木を指定できます。

入力引数

すべて展開する

回帰木のランダム フォレスト。fitrensemble によって作成された RegressionBaggedEnsemble モデル オブジェクトを指定します。

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

予測子の重要度の推定に使用する学習器のインデックス。'Learners' と正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。値は Mdl.NumTrained 以下でなければなりません。oobPermutedPredictorImportance は、予測子の重要度を推定するときに、Mdl.Trained(learners) の学習器のみを含めます。learners'Learners' の値です。

例: 'Learners',[1:2:Mdl.NumTrained]

並列計算オプション。'Options'statset によって返される構造体配列から構成されるコンマ区切りのペアとして指定します。'Options' を指定するには、Parallel Computing Toolbox™ のライセンスが必要です。

oobPermutedPredictorImportance'UseParallel' フィールドのみを使用します。statset('UseParallel',true) はワーカーのプールを呼び出します。

例: 'Options',statset('UseParallel',true)

出力引数

すべて展開する

並べ替えによる out-of-bag 予測子の重要度の推定。1 行 p 列の数値ベクトルとして返されます。p は学習データ内の予測子変数の個数 (size(Mdl.X,2)) です。Imp(j) は予測子 Mdl.PredictorNames(j) の重要度です。

すべて展開する

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);

データセット全体を使用して、50 本の回帰木のランダム フォレストに学習をさせることができます。

Mdl = fitrensemble(X,'MPG','Method','Bag','NumLearningCycles',500);

'Method''Bag' である場合、fitrensemble は既定の木テンプレート オブジェクト templateTree() を弱学習器として使用します。この例では、再現性を得るため、木テンプレート オブジェクトを作成するときに 'Reproducible',true を指定し、このオブジェクトを弱学習器として使用します。

rng('default') % For reproducibility
t = templateTree('Reproducible',true); % For reproducibiliy of random predictor selections
Mdl = fitrensemble(X,'MPG','Method','Bag','NumLearningCycles',50,'Learners',t);

MdlRegressionBaggedEnsemble モデルです。

out-of-bag 観測値を並べ替えることにより、予測子の重要度の尺度を推定します。棒グラフを使用して推定を比較します。

imp = oobPermutedPredictorImportance(Mdl);

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

imp は、予測子の重要度の推定が含まれている 1 行 7 列のベクトルです。大きい値は、予測子が予測に与える影響が大きいことを示します。このケースでは、最も重要な予測子は Weight であり、次に重要なのは Model_Year です。

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 つの変数よりも連続予測子が分割されます。

データセット全体を使用して、500 本の回帰木のランダム フォレストに学習をさせます。偏りの無い木を成長させるため、予測子の分割に曲率検定を使用するよう指定します。データには欠損値が含まれているので、代理分岐を使用するよう指定します。無作為な予測子の選択を再現するため、rng を使用して乱数発生器のシードを設定し、'Reproducible',true を指定します。

rng('default'); % For reproducibility
t = templateTree('PredictorSelection','curvature','Surrogate','on', ...
    'Reproducible',true); % For reproducibility of random predictor selections
Mdl = fitrensemble(X,'MPG','Method','bag','NumLearningCycles',500, ...
    'Learners',t);

out-of-bag 観測値を並べ替えることにより、予測子の重要度の尺度を推定します。並列計算を実行します。

options = statset('UseParallel',true);
imp = oobPermutedPredictorImportance(Mdl,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

棒グラフを使用して推定を比較します。

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

このケースでは、最も重要な予測子は Model_Year であり、次に重要なのは Cylinders です。これらの結果を予測子の重要度の推定の結果と比較します。

詳細

すべて展開する

ヒント

fitrensemble の使用によりランダム フォレストを成長させる場合、

  • 標準 CART アルゴリズムには、相違する値が少ない分割予測子 (カテゴリカル変数など) よりも、相違する値が多い分割予測子 (連続変数など) を選択する傾向があります[3]。予測子データセットが異種混合である場合や、一部の予測子が相違する値を他の変数よりも相対的に少なく含んでいる場合は、曲率検定または交互作用検定の指定を検討してください。

  • 標準 CART を使用して成長させた木は、予測子変数の交互作用の影響を受けません。また、多くの無関係な予測子が存在する状況では、このような木によって重要な変数が特定される可能性は、交互作用検定を適用した場合より低くなります。このため、予測子の交互作用を考慮し、重要度変数の特定を多くの無関係な変数が存在する状況で行うには、交互作用検定を指定します[2]

  • 多数の予測子が学習データに含まれている場合に予測子の重要度を分析するには、アンサンブルの木学習器について関数 templateTree'NumVariablesToSample' として 'all' を指定します。このようにしないと、重要度が過小評価されて一部の予測子が選択されない可能性があります。

詳細については、templateTree および分割予測子選択手法の選択を参照してください。

参考文献

[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Boca Raton, FL: CRC Press, 1984.

[2] Loh, W.Y. “Regression Trees with Unbiased Variable Selection and Interaction Detection.” Statistica Sinica, Vol. 12, 2002, pp. 361–386.

[3] Loh, W.Y. and Y.S. Shih. “Split Selection Methods for Classification Trees.” Statistica Sinica, Vol. 7, 1997, pp. 815–840.

拡張機能

R2016b で導入