ドキュメンテーション

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

TreeBagger クラス

説明

TreeBagger は、分類または回帰のいずれかについて決定木のアンサンブルをバギングします。"バギング" とは、"bootstrap aggregation" を意味します。アンサンブル内の各ツリーは、個々に抽出された入力データのブートストラップ複製上で成長します。この複製に含まれない観測値は、このツリーにとって "out of bag" となります。

個別のツリーの成長に関して、TreeBaggerClassificationTreeRegressionTree の機能に依存します。特に、ClassificationTreeRegressionTree は各決定分岐について無作為に選択された特徴量の個数をオプションの入力引数として受け入れます。つまり、TreeBagger はランダム フォレスト アルゴリズム[1]を実装します。

回帰問題の場合、TreeBagger は平均および分位点回帰 (つまり、分位点回帰フォレスト[2]) をサポートします。

  • 与えられたデータに対する平均応答の予測または平均二乗誤差の推定を行うには、TreeBagger モデルとデータを predict または error にそれぞれ渡します。out-of-bag 観測値について同様の操作を実行するには、oobPredict または oobError を使用します。

  • 与えられたデータに対する応答分布の分位数または分位数誤差を推定するには、TreeBagger モデルとデータを quantilePredict または quantileError にそれぞれ渡します。out-of-bag 観測値について同様の操作を実行するには、oobQuantilePredict または oobError を使用します。

構築

TreeBagger決定木の bag of trees の作成

メソッド

appendアンサンブルに新しいツリーを追加する
compact決定木のコンパクトなアンサンブル
error誤差 (誤分類の確率または MSE)
fillprox学習データの近接行列
growTrees追加のツリーの育成とアンサンブルへの追加
margin分類マージン
mdsprox近接行列の多次元尺度構成法
meanMargin平均分類マージン
oobErrorout-of-bag 誤差
oobMarginout-of-bag マージン
oobMeanMarginout-of-bag 平均マージン
oobPredictout-of-bag 観測に対するアンサンブル予測
oobQuantileError回帰の bag of trees の out-of-bag 分位点損失
oobQuantilePredict回帰の bag of trees による out-of-bag 観測値の分位数予測
predictバギングされた決定木のアンサンブルの使用による応答の予測
quantileError回帰の bag of trees の使用による分位点損失
quantilePredict回帰の bag of trees の使用による応答の分位数の予測

プロパティ

ClassNames

応答変数 Y 用のクラス名を含む cell 配列です。回帰木の場合、このプロパティは空です。

ComputeOOBPrediction

観測の学習用に out-of-bag 予測を計算するかどうかを指定する論理フラグです。既定の設定は false です。

このフラグが true の場合、次のプロパティを使用できます。

  • OOBIndices

  • OOBInstanceWeight

このフラグが true の場合、次のメソッドを呼び出すことができます。

  • oobError

  • oobMargin

  • oobMeanMargin

ComputeOOBPredictorImportance

変数の重要度の out-of-bag 推定を計算するかどうかを指定する論理フラグです。既定の設定は false です。このフラグが true の場合、ComputeOOBPrediction も true になります。

このフラグが true の場合、次のプロパティを使用できます。

  • OOBPermutedPredictorDeltaError

  • OOBPermutedPredictorDeltaMeanMargin

  • OOBPermutedPredictorCountRaiseMargin

Cost

正方行列。Cost(i,j) は真のクラスが i である場合に 1 つの点をクラス j に分類するためのコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。Cost の行および列の数は、応答に含まれている一意なクラスの数です。

このプロパティは次のようになります。

  • 読み取り専用

  • 回帰木のアンサンブルの場合は空 ([])

DefaultYfit

predictoobPredict が返す既定値。DefaultYfit プロパティで、予測が不可能な場合にどのような予測値を返すかを指定します。たとえば、oobPredict でアンサンブルのすべてのツリーで in-bag である観測の予測を行う必要があるとします。

  • 分類では、このプロパティを '' または 'MostPopular' に設定できます。'MostPopular' (既定の設定) を選択すると、プロパティ値は学習データの中で最も可能性の高いクラスの名前になります。'' を選択すると、in-bag の観測値が out-of-bag の誤差およびマージンの計算から除外されます。

  • 回帰では、このプロパティを任意のスカラー値に設定できます。既定値は学習データの応答値の平均です。このプロパティを NaN に設定すると、in-bag の観測が out-of-bag の誤差およびマージンの計算から除外されます。

DeltaCriterionDecisionSplit

各変数の分割全体で合計され、成長したツリーのアンサンブル全体で平均化された分割基準の変化を示す、サイズが 1 行 Nvars 列の数値配列です。

InBagFraction

各ブートストラップ複製について復元抽出により無作為に選択される観測値の比率。各複製のサイズは、Nobs × InBagFraction により指定されます。Nobs は、学習セット内の観測数です。既定値は 1 です。

MergeLeaves

同じ親をもつ決定木の葉を、総リスクを減少させない分割のためにマージするかどうかを指定する論理フラグ。既定値は false です。

Method

ツリーで使用されるメソッド。アンサンブル分類には 'classification'、アンサンブル回帰には 'regression' の値を使用できます。

MinLeafSize

ツリー リーフ 1 枚あたりの観測値の最小個数。MinLeafSize の既定の設定は、分類の場合は 1、回帰の場合は 5 です。決定木のトレーニングでは、MinParent 値を 2*MinLeafSize に設定する必要があります。

NumTrees

アンサンブル内の決定木の数と等しいスカラー値。

NumPredictorSplit

1 行Nvars 列のサイズの数値配列であり、各要素はそれぞれの予測子による分割数を、すべてのツリーで合計したものです。

NumPredictorsToSample

各決定分岐で無作為に選択する予測子変数または特徴変数の個数。既定では、NumPredictorsToSample は分類の場合は変数の総数の平方根、回帰の場合は変数の総数の 3 分の 1 に設定されています。

OOBIndices

Nobs 行 NumTrees 列の logical 配列。Nobs は学習データの観測数、NumTrees はアンサンブル内のツリーの数です。(i,j) 要素の値が true の場合、観測 i がツリー j について out-of-bag であることを示します。つまり、観測 i がツリー j を成長させるための学習データとして選択されなかったことを意味します。

OOBInstanceWeight

観測ごとの out-of-bag 応答を計算するために使用されたツリーの数を含む、Nobs 行 1 列の数値配列。Nobs はアンサンブルの作成に使用された学習データの観測数です。

OOBPermutedPredictorCountRaiseMargin

1 行 Nvars 列のサイズの数値配列であり、予測子変数 (特徴量) ごとの変数重要度の尺度を含みます。いずれの変数の場合も、その変数の値が out-of-bag 観測内で並べ替えられた場合に、上昇した分離マージンの数と低下した分離マージンの数との差が尺度になります。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。回帰木の場合、このプロパティは空です。

OOBPermutedPredictorDeltaError

1 行 Nvars 列のサイズの数値配列であり、予測子変数 (特徴量) ごとの重要度の尺度を含みます。いずれの変数の場合も、その変数の値が out-of-bag 観測内で並べ替えられた場合、予測誤差の増加を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。

OOBPermutedPredictorDeltaMeanMargin

1 行 Nvars 列のサイズの数値配列であり、予測子変数 (特徴量) ごとの重要度の尺度を含みます。いずれの変数の場合も、その変数の値が out-of-bag 観測内で並べ替えられた場合、分類マージンの減少を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。回帰木の場合、このプロパティは空です。

OutlierMeasure

Nobs 行 1 列のサイズの数値配列です。Nobs は学習データ内の観測値数で、観測ごとの外れ値の尺度を含んでいます。

Prior

各クラスの事前確率の数値ベクトル。Prior の要素の順序は、ClassNames のクラスの順序に対応します。

このプロパティは次のようになります。

  • 読み取り専用

  • 回帰木のアンサンブルの場合は空 ([])

Proximity

Nobs 行 Nobs 列のサイズの数値行列です。Nobs は学習データ内の観測値数で、観測値間の近接度を含んでいます。任意の 2 つの観測値の近接度は、これらの観測値がツリーの同じリーフに着地する比率として定義されます。これは、1 の対角要素と 0 ~ 1 の範囲の非対角要素をもつ対称行列です。

Prune

Prune プロパティは、決定木が枝刈りされる場合に true となり、枝刈りされない場合に false となります。アンサンブルについては、決定木を枝刈りすることは推奨しません。既定値は false です。

SampleWithReplacement

決定木ごとにデータが復元抽出されるかどうかを指定する論理フラグです。TreeBagger がデータを復元抽出する場合、このプロパティは true になります。それ以外の場合は false になります。既定値は true です。

TreeArguments

fitctree または fitrtree 用の引数の cell 配列これらの引数はアンサンブル用に新しいツリーを成長させるために TreeBagger によって使用されます。

Trees

アンサンブル内のツリーを格納するサイズ NumTrees 行 1 列の cell 配列です。

SurrogateAssociation

Nvars 行 Nvars 列のサイズをもち、変数の関連性予測尺度を成長したツリーのアンサンブル全体で平均化した行列。アンサンブルの設定を 'surrogate' から 'on' にすると、各ツリーのこの行列には、代理分岐で平均化された関連性予測尺度が入力されます。アンサンブル設定を 'surrogate' から 'off' (既定値) にした場合、SurrogateAssociation は対角行列になります。

PredictorNames

予測子変数 (特徴量) の名前が含まれている cell 配列。これらの名前を TreeBagger に渡すには、オプションの 'names' パラメーターを使用します。既定の名前は 'x1''x2' などです。

W

長さ Nobs の重みの数値ベクトル。ここで Nobs は学習データの観測 (行) 数です。TreeBagger はアンサンブルですべての決定木を成長させるために、これらの重みを使用します。既定の設定の Wones(Nobs,1) です。

X

サイズが Nobs 行 Nvars 列のテーブルまたは数値行列。Nobs は学習データの観測値 (行) の数、Nvars は変数 (列) の数です。予測子値のテーブルを使用してアンサンブルに学習をさせた場合、X はテーブルになります。予測子値の行列を使用してアンサンブルに学習をさせた場合、X は行列になります。このプロパティには、予測子 (または特徴) の値が格納されます。

Y

サイズが Nobs の応答データの配列。Y の要素は X の行に対応します。分類の場合、Y は真のクラス ラベルのセットです。ラベルは任意のグループ化変数、つまり数値ベクトル、logical ベクトル、文字行列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルにすることができます。分類の場合、TreeBagger はラベルを文字ベクトルの cell 配列に変換します。回帰の場合、Y は数値ベクトルです。

すべて折りたたむ

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

load fisheriris

データセット全体を使用して、バギングされた分類木のアンサンブルに学習をさせます。50 個の弱学習器を指定します。木ごとにバギングしない観測値の情報を格納します。

rng(1); % For reproducibility
Mdl = TreeBagger(50,meas,species,'OOBPrediction','On',...
    'Method','classification')
Mdl = 
  TreeBagger
Ensemble with 50 bagged decision trees:
                    Training X:              [150x4]
                    Training Y:              [150x1]
                        Method:       classification
                 NumPredictors:                    4
         NumPredictorsToSample:                    2
                   MinLeafSize:                    1
                 InBagFraction:                    1
         SampleWithReplacement:                    1
          ComputeOOBPrediction:                    1
 ComputeOOBPredictorImportance:                    0
                     Proximity:                   []
                    ClassNames:        'setosa'    'versicolor'     'virginica'

  Properties, Methods

MdlTreeBagger アンサンブルです。

Mdl.Trees には、アンサンブルを構成する学習済み分類木 (CompactClassificationTree モデル オブジェクト) の 50 行 1 列の cell ベクトルが格納されます。

1 番目の学習済み分類木のグラフをプロットします。

view(Mdl.Trees{1},'Mode','graph')

既定の設定では、TreeBagger は木を深く成長させます。

Mdl.OOBIndices には、out-of-bag インデックスが論理値の行列として格納されます。

out-of-bag 誤差を、成長した分類木の数にプロットします。

figure;
oobErrorBaggedEnsemble = oobError(Mdl);
plot(oobErrorBaggedEnsemble)
xlabel 'Number of grown trees';
ylabel 'Out-of-bag classification error';

成長した分類木の数が増加すると、out-of-bag 誤差は減少します。

out-of-bag の観測値にラベル付けするには、MdloobPredict に渡します。

carsmall データセットを読み込みます。与えられたエンジン排気量に対して自動車の燃費を予測するモデルを考えます。

load carsmall

データセット全体を使用して、バギングされた回帰木のアンサンブルに学習をさせます。100 個の弱学習器を指定します。

rng(1); % For reproducibility
Mdl = TreeBagger(100,Displacement,MPG,'Method','regression');

MdlTreeBagger アンサンブルです。

学習済みの回帰の bag of trees を使用すると、条件付き平均応答の推定や、分位点回帰の実行による条件付き分位の予測が可能です。

標本内の最小値と最大値の間で 10 等分したエンジン排気量について、条件付き平均応答と条件付き四分位数を予測します。

predX = linspace(min(Displacement),max(Displacement),10)';
mpgMean = predict(Mdl,predX);
mpgQuartiles = quantilePredict(Mdl,predX,'Quantile',[0.25,0.5,0.75]);

観測値、推定された平均応答および四分位数を同じ Figure にプロットします。

figure;
plot(Displacement,MPG,'o');
hold on
plot(predX,mpgMean);
plot(predX,mpgQuartiles);
ylabel('Fuel economy');
xlabel('Engine displacement');
legend('Data','Mean Response','First quartile','Median','Third quartile');

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);
rng('default'); % For reproducibility

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

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

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

データセット全体を使用して、200 本の回帰木のランダム フォレストに学習をさせます。偏りの無い木を成長させるため、予測子の分割に曲率検定を使用するよう指定します。データには欠損値が含まれているので、代理分岐を使用するよう指定します。予測子の重要度の推定に関する out-of-bag 情報を格納します。

Mdl = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
    'PredictorSelection','curvature','OOBPredictorImportance','on');

TreeBagger は、予測子の重要度の推定を OOBPermutedPredictorDeltaError プロパティに格納します。棒グラフを使用して推定を比較します。

imp = Mdl.OOBPermutedPredictorDeltaError;

figure;
bar(imp);
title('Curvature Test');
ylabel('Predictor importance estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

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

標準 CART を使用して木を成長させるランダム フォレストから計算された予測子の重要度の推定と imp とを比較します。

MdlCART = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
    'OOBPredictorImportance','on');

impCART = MdlCART.OOBPermutedPredictorDeltaError;

figure;
bar(impCART);
title('Standard CART');
ylabel('Predictor importance estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

このケースでは、最も重要な予測子は連続予測子 Weight です。次に重要な 2 つの予測子は Model_Year と、ほぼ同程度の連続予測子 Horsepower です。

コピーのセマンティクス

値。これがクラスの使用に与える影響については、『MATLAB® オブジェクト指向プログラミング』ドキュメンテーションのハンドル クラスと値クラスの比較 (MATLAB)を参照してください。

ヒント

TreeBagger モデル オブジェクト BTrees プロパティには、B.NumTrees 個の CompactClassificationTree または CompactRegressionTree モデル オブジェクトが含まれている cell ベクトルが格納されます。cell ベクトルの木 t をテキストまたはグラフィックで表示するには、次のように入力します。

view(B.Trees{t})

参照

[1] Breiman, L. Random Forests. Machine Learning 45, pp. 5–32, 2001.

[2] Meinshausen, N. “Quantile Regression Forests.” Journal of Machine Learning Research, Vol. 7, 2006, pp. 983–999.