Main Content

oobPermutedPredictorImportance

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

説明

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

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

入力引数

すべて展開する

分類木のランダム フォレスト。fitcensemble によって作成された ClassificationBaggedEnsemble モデル オブジェクトとして指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

予測子の重要度の推定に使用する学習器のインデックス。'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) の重要度です。

すべて展開する

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

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

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

Mdl = fitcensemble(X,'salary','Method','Bag','NumLearningCycles',50);

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

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

MdlClassificationBaggedEnsemble モデルです。

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

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

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

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: 32561×1 double

        Values:

            Min        17  
            Median     37  
            Max        90  

    workClass: 32561×1 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: 32561×1 double

        Values:

            Min              1       
            Median          10       
            Max             16       

    marital_status: 32561×1 categorical

        Values:

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

    race: 32561×1 categorical

        Values:

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

    sex: 32561×1 categorical

        Values:

            Female    10771
            Male      21790

    capital_gain: 32561×1 double

        Values:

            Min               0     
            Median            0     
            Max           99999     

    capital_loss: 32561×1 double

        Values:

            Min               0     
            Median            0     
            Max            4356     

    hours_per_week: 32561×1 double

        Values:

            Min               1       
            Median           40       
            Max              99       

    salary: 32561×1 categorical

        Values:

            <=50K     24720  
            >50K       7841  

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

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

rng('default') % For reproducibility
t = templateTree('PredictorSelection','curvature','Surrogate','on', ...
    'Reproducible',true); % For reproducibility of random predictor selections
Mdl = fitcensemble(X,'salary','Method','bag','NumLearningCycles',50, ...
    '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';

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

詳細

すべて展開する

ヒント

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

  • 標準 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 で導入