Main Content

TreeBagger

バギングされた決定木のアンサンブル

説明

TreeBagger オブジェクトは、分類または回帰のいずれかについてバギングされた決定木のアンサンブルです。個々の決定木には、過適合になる傾向があります。bootstrap aggregation を意味する "バギング" は、過適合の影響を減らして汎化を改善するアンサンブル法です。

作成

関数 TreeBagger は、入力データのブートストラップ標本を使用して、TreeBagger アンサンブル モデル内のすべての木を成長させます。標本に含まれない観測値は、その木にとって "out-of-bag" と見なされます。この関数は、ランダム フォレスト アルゴリズム[1]を使用して、各決定分岐の予測子のサブセットを無作為に選択します。

説明

ヒント

既定では、関数 TreeBagger は分類決定木を成長させます。回帰決定木を成長させるには、名前と値の引数 Method"regression" として指定します。

Mdl = TreeBagger(NumTrees,Tbl,ResponseVarName) は、table Tbl 内の予測子と変数 Tbl.ResponseVarName 内のクラス ラベルによって学習させた、NumTrees 本のバギング分類木のアンサンブル オブジェクト (Mdl) を返します。

Mdl = TreeBagger(NumTrees,Tbl,formula) は、table Tbl 内の予測子によって学習させた Mdl を返します。入力 formula は、Mdl を当てはめるために使用する Tbl 内の予測子変数のサブセットおよび応答の説明モデルです。formulaウィルキンソンの表記法を使用して指定します。

Mdl = TreeBagger(NumTrees,Tbl,Y) は、table Tbl 内の予測子データと配列 Y 内のクラス ラベルによって学習させた Mdl を返します。

Mdl = TreeBagger(NumTrees,X,Y) は、行列 X 内の予測子データと配列 Y 内のクラス ラベルによって学習させた Mdl を返します。

Mdl = TreeBagger(___,Name=Value) は、前述した入力引数の組み合わせのいずれかを使用し、1 つ以上の名前と値の引数で指定されたオプションを追加して、Mdl を返します。たとえば、名前と値の引数 PredictorSelection を使用して、カテゴリカル予測子での最適な分割を検出するためのアルゴリズムを指定できます。

入力引数

すべて展開する

バギング アンサンブル内の決定木の数。正の整数として指定します。

データ型: single | double

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

  • Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

  • Tbl に応答変数が含まれている場合に Tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式を指定します。

  • Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと Tbl の行数は等しくなければなりません。

応答変数の名前。Tbl 内の変数の名前で指定します。

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 YTbl.Y として格納されている場合、"Y" として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

名前と値の引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

データ型: char | string

応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1x2 および x3 は予測子変数を表します。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

データ型: char | string

バギングされた決定木のアンサンブルに学習させるクラス ラベルまたは応答変数。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • Method として "classification" を指定した場合、クラス ラベル Y に以下が適用されます。

    • Y の各要素は、X の対応する行のクラス メンバーシップを定義します。

    • Y が文字配列の場合、各行は 1 個のクラス ラベルに対応しなければなりません。

    • 関数 TreeBagger は、クラス ラベルを文字ベクトルの cell 配列に変換します。

  • Method として "regression" を指定した場合、応答変数 Y は n 行 1 列の数値ベクトルです。n は観測値の個数です。Y の各エントリは X の対応する行に対する応答です。

Y の長さと X の行数は等しくなければなりません。

データ型: categorical | char | string | logical | single | double | cell

予測子データ。数値行列として指定します。

X の各行は 1 件の観測 (インスタンスや例とも呼ばれます) に対応し、各列は 1 個の変数 (特徴とも呼ばれます) に対応します。

Y の長さと X の行数は等しくなければなりません。

データ型: double

名前と値の引数

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

例: TreeBagger(100,X,Y,Method="regression",Surrogate="on",OOBPredictorImportance="on") は、100 本の回帰木によるバギング アンサンブルを作成し、代理分岐を使用することと予測子の重要度の推定に関する out-of-bag 情報を格納することを指定します。

データの各チャンクに含まれる観測値の個数。正の整数を指定します。このオプションは、tall 配列に対して TreeBagger を使用する場合のみ適用されます。詳細については、拡張機能を参照してください。

例: ChunkSize=10000

データ型: single | double

誤分類のコスト。正方行列または構造体を指定します。

  • 正方行列 Cost を指定した場合、Cost(i,j) は真のクラスが i である点をクラス j に分類するコストです。つまり、行は真のクラスに、列は予測クラスに対応します。Cost の対応する行と列についてクラスの順序を指定するには、名前と値の引数 ClassNames を使用します。

  • 構造体 S を指定する場合、次の 2 つのフィールドが必要です。

    • S.ClassNames: Y と同じデータ型のクラス名を表す変数を含む。

    • S.ClassificationCosts。行と列の順序が S.ClassNames と同じコスト行列。

既定値は、i~=j である場合は Cost(i,j)=1i=j である場合は Cost(i,j)=0 です。

歪みが大きい Cost の影響の詳細については、アルゴリズムを参照してください。

例: Cost=[0,1;2,0]

データ型: single | double | struct

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

説明
正の整数のベクトル

ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

TreeBagger が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重みの変数、および関数で使用されないその他の変数は、CategoricalPredictors 値でカウントされません。

logical ベクトル

true というエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さは p です。

文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
"all"すべての予測子がカテゴリカルです。

既定では、予測子データがテーブル (Tbl) 内にある場合、TreeBagger は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、TreeBagger はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。

特定されたカテゴリカル予測子に対して、TreeBagger はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、TreeBagger は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、TreeBagger は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

例: CategoricalPredictors="all"

データ型: single | double | logical | char | string | cell

決定木のタイプ。"classification" または "regression" を指定します。回帰木の場合、Y は数値でなければなりません。

例: Method="regression"

葉ノードの観測値の最小数。正の整数を指定します。各葉には少なくとも木の葉あたり MinLeafSize の観測値があります。MinLeafSize の既定の設定は、分類木の場合は 1、回帰木の場合は 5 です。

例: MinLeafSize=4

データ型: single | double

各決定分岐の (無作為に選択された) 予測子変数の数。正の整数または "all" を指定します。NumPredictorsToSample の既定の設定は、分類木の場合は変数の個数の平方根、回帰木の場合は変数の個数の 1/3 です。既定の数が整数でない場合、その数は正の無限大方向の最も近い整数に丸められます。NumPredictorsToSample"all" 以外の値に設定した場合は、Breiman のランダム フォレスト アルゴリズム[1]が使用されます。

例: NumPredictorsToSample=5

データ型: single | double | char | string

成長した木 (学習サイクル) の数。この数を超えると、学習の進行状況に関するメッセージがコマンド ウィンドウに表示されるようになります。非負の整数を指定します。既定では、診断メッセージは表示されません。

例: NumPrint=10

データ型: single | double

それぞれの新しい木を成長させるために入力データから復元抽出する、入力データの比率。範囲 (0,1] の正のスカラーを指定します。

例: InBagFraction=0.5

データ型: single | double

アンサンブル内の out-of-bag 情報を格納するためのインジケーター。"on" または "off" を指定します。OOBPrediction として "on" を指定すると、どの観測値が out-of-bag であるかに関する情報が各木について格納されます。TreeBagger では、この情報を使用して、アンサンブル内の各木について予測されたクラス確率を計算できます。

例: OOBPrediction="off"

アンサンブル内の特徴量の重要度の out-of-bag 推定値を格納するためのインジケーター。"on" または "off" を指定します。OOBPredictorImportance として "on" を指定した場合、関数 TreeBaggerOOBPrediction"on" に設定します。予測子の重要度を分析するには、PredictorSelection として "curvature" または "interaction-curvature" を指定します。

例: OOBPredictorImportance="on"

並列計算と乱数ストリーム設定のオプション。構造体として指定します。statset を使用して Options 構造体を作成します。次の表は、オプションのフィールドとその値の一覧です。

フィールド名既定の設定
UseParallel並列計算を行う場合は、この値を true に設定します。false
UseSubstreams

再現可能な方法で計算する場合は、この値を true に設定します。

再現性のある計算を行うには、Streams をサブストリームを許可する型 ("mlfg6331_64" または "mrg32k3a") に設定します。

false
StreamsRandStream オブジェクトまたはそのようなオブジェクトの cell 配列としてこの値を指定します。UseParallel の値が true でなく、UseSubstreams の値も false でない場合、単一オブジェクトを使用します。この場合は、並列プールと同じサイズの cell 配列を使用します。Streams を指定しなかった場合、TreeBagger は既定のストリームを使用します。

メモ

並列計算を行うには、Parallel Computing Toolbox™ が必要です。

例: Options=statset(UseParallel=true,UseSubstreams=true,Streams=RandStream("mlfg6331_64"))

データ型: struct

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl を指定する場合、PredictorNames を使用して学習に使用する予測子変数を選択できます。つまり、TreeBagger は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

    • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • PredictorNamesformula の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。

例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]

データ型: string | cell

復元抽出のインジケーター。"on" または "off" を指定します。SampleWithReplacement には、復元抽出の場合は "on" を、非復元抽出の場合は "off" を指定します。SampleWithReplacement"off" に設定した場合は、名前と値の引数 InBagFraction を 1 未満の値に設定する必要があります。

例: SampleWithReplacement="on"

2 クラス学習の各クラスの事前確率。次の表の値として指定します。

説明
"empirical"クラスの事前確率は、Y のクラスの相対的頻度です。
"uniform"クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトルベクトルの各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、名前と値の引数 ClassNames を使用して順序を指定します。要素は合計が 1 になるように正規化されます。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。ベクトルの要素は合計が 1 になるように正規化されます。

コスト行列を指定すると、TreeBagger モデルの Prior プロパティには、誤分類コストに応じて調整された事前確率が格納されます。詳細については、アルゴリズムを参照してください。

この引数は 2 クラス学習に対してのみ有効です。

例: Prior=struct(ClassNames=["setosa" "versicolor" "virginica"],ClassProbs=1:3)

データ型: char | string | single | double | struct

メモ

関数 TreeBagger は、その名前と値の引数に加えて、関数 TreeBagger の追加の名前と値の引数にリストされている fitctreefitrtree の名前と値の引数を受け入れます。

出力引数

すべて展開する

バギングされた決定木のアンサンブル。TreeBagger オブジェクトとして返されます。

プロパティ

すべて展開する

バギングのプロパティ

この プロパティ は読み取り専用です。

学習観測値の out-of-bag 予測を計算するためのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。このプロパティが true の場合は次のようになります。

  • TreeBagger オブジェクトには OOBIndices プロパティと OOBInstanceWeight プロパティが含まれます。

  • オブジェクト関数 oobErroroobMargin、および oobMeanMargin を使用できます。

この プロパティ は読み取り専用です。

out-of-bag 変数の重要度を計算するためのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。このプロパティが true の場合は次のようになります。

  • TreeBagger オブジェクトには OOBPermutedPredictorDeltaError プロパティ、OOBPermutedPredictorDeltaMeanMargin プロパティ、および OOBPermutedPredictorCountRaiseMargin プロパティが含まれます。

  • ComputeOOBPrediction プロパティも true になります。

この プロパティ は読み取り専用です。

各ブートストラップ複製について復元抽出により無作為に選択される観測値 (in-bag の観測値) の比率。数値スカラーとして指定します。各複製のサイズは、Nobs × InBagFraction により指定されます。Nobs は、学習データの観測値の数です。

データ型: single | double

この プロパティ は読み取り専用です。

out-of-bag インデックス。logical 配列として指定します。このプロパティは Nobs 行 NumTrees 列の配列です。Nobs は学習データの観測値の数、NumTrees はアンサンブル内の木の数です。OOBIndices(i,j) 要素が true の場合、観測 i は木 j について out-of-bag です (つまり、関数 TreeBagger は観測 i を、木 j を成長させるための学習データとして選択していません)。

この プロパティ は読み取り専用です。

観測ごとの out-of-bag 木の数。数値ベクトルとして指定します。このプロパティは Nobs 行 1 列のベクトルです。Nobs は学習データの観測値の数です。OOBInstanceWeight(i) 要素には、観測 i の out-of-bag 応答を計算するために使用された木の数が含まれます。

データ型: single | double

この プロパティ は読み取り専用です。

マージンの上昇に関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合に、上昇した分離マージンの数と低下した分離マージンの数との差が尺度になります。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。

回帰木の場合、このプロパティは空 ([]) です。

データ型: single | double

この プロパティ は読み取り専用です。

予測誤差に関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数 (列) の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合、予測誤差の増加を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。

データ型: single | double

この プロパティ は読み取り専用です。

分類マージンに関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数 (列) の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合、分類マージンの減少を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。

回帰木の場合、このプロパティは空 ([]) です。

データ型: single | double

木のプロパティ

この プロパティ は読み取り専用です。

予測子ごとの分割基準の貢献度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は分割基準の変化の数です。各変数の分割全体で分割基準の変化が合計され、成長した木のアンサンブル全体で合計が平均化されます。

データ型: single | double

この プロパティ は読み取り専用です。

葉をマージするためのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。同じ親をもつ決定木の葉が、総リスクを減少させない分割のためにマージされる場合、このプロパティは true になります。それ以外の場合、このプロパティは false になります。

この プロパティ は読み取り専用です。

葉ノードの観測値の最小数。正の整数を指定します。各葉には少なくとも MinLeafSize の観測値があります。MinLeafSize の既定の設定は、分類木の場合は 1、回帰木の場合は 5 です。決定木の学習では、fitctreefitrtree は名前と値の引数 MinParentSize2*MinLeafSize に設定します。

データ型: single | double

この プロパティ は読み取り専用です。

バギング アンサンブル内の決定木の数。正の整数として指定します。

データ型: single | double

この プロパティ は読み取り専用です。

枝刈りされた部分木の最適シーケンスを推定するためのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。Prune プロパティは、決定木が枝刈りされる場合に true となり、枝刈りされない場合に false となります。アンサンブルについては、決定木を枝刈りすることは推奨しません。

この プロパティ は読み取り専用です。

各決定木を復元抽出するためのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。関数 TreeBagger が各決定木を復元抽出する場合、このプロパティは true になります。それ以外の場合は false になります。

この プロパティ は読み取り専用です。

変数の関連性予測尺度。数値行列として指定します。このプロパティは Nvars 行 Nvars 列の行列です。Nvars は予測子変数の数です。このプロパティには、成長した木のアンサンブル全体で平均化した変数の関連性予測尺度が格納されます。

  • 名前と値の引数 Surrogate"on" に設定してアンサンブルを成長させた場合、各ツリーのこの行列には、代理分岐で平均化された関連性予測尺度が入力されます。

  • 名前と値の引数 Surrogate"off" に設定してアンサンブルを成長させた場合、SurrogateAssociation プロパティは単位行列になります。既定では Surrogate"off" に設定されます。

データ型: single | double

この プロパティ は読み取り専用です。

関数 TreeBagger に指定された名前と値の引数。cell 配列として指定します。関数 TreeBagger は、バギング アンサンブル用に新しい木を成長させる際にこれらの名前と値の引数を使用します。

この プロパティ は読み取り専用です。

バギング アンサンブル内の決定木。NumTrees 行 1 列の cell 配列として指定します。それぞれの木は CompactClassificationTree オブジェクトまたは CompactRegressionTree オブジェクトです。

予測子のプロパティ

この プロパティ は読み取り専用です。

予測子ごとの決定分岐の数。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は予測子変数の数です。NumPredictorSplit の各要素は、予測子での分割数をすべての木について合計した数を表します。

データ型: single | double

この プロパティ は読み取り専用です。

各決定分岐で無作為に選択する予測子変数の数。正の整数として指定します。このプロパティの既定の設定は、分類木の場合は変数の総数の平方根、回帰木の場合は変数の総数の 1/3 です。

データ型: single | double

この プロパティ は読み取り専用です。

各観測値の外れ値の尺度。数値ベクトルとして指定します。このプロパティは Nobs 行 1 列のベクトルです。Nobs は学習データの観測値の数です。

データ型: single | double

この プロパティ は読み取り専用です。

予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データ X に現れる順序に対応します。

この プロパティ は読み取り専用です。

バギング アンサンブルの学習に使用された予測子。数値配列として指定します。このプロパティは Nobs 行 Nvars 列の配列です。Nobs は学習データの観測値 (行) の数、Nvars は変数 (列) の数です。

データ型: single | double

応答のプロパティ

predict または oobPredict で返される既定の予測値。"""MostPopular"、または数値スカラーとして指定します。このプロパティで、予測が不可能な場合 (たとえば、oobPredict でアンサンブルのすべての木で in-bag である観測の応答を予測する場合) にオブジェクト関数 predict または oobPredict から返される予測値を制御します。

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

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

例: Mdl.DefaultYfit="MostPopular"

データ型: single | double | char | string

この プロパティ は読み取り専用です。

クラス ラベルまたは応答データ。文字ベクトルの cell 配列または数値ベクトルを指定します。

  • 名前と値の引数 Method"classification" に設定した場合、このプロパティはクラス ラベルを表します。Y の各行は、X の対応する行の観測された分類を表します。

  • 名前と値の引数 Method"regression" に設定した場合、このプロパティは応答データを表し、数値ベクトルになります。

データ型: single | double | cell

学習プロパティ

この プロパティ は読み取り専用です。

アンサンブルのタイプ。アンサンブル分類の場合は "classification"、アンサンブル回帰の場合は "regression" として指定します。

この プロパティ は読み取り専用です。

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

データ型: single | double

この プロパティ は読み取り専用です。

観測値の重み。非負値のベクトルを指定します。このプロパティには Y と同じ数の行が含まれます。W の各エントリは、Y で該当する観測の相対的な重要性を示します。関数 TreeBagger は、アンサンブル内の各決定木を成長させるために観測値の重みを使用します。

データ型: single | double

分類のプロパティ

この プロパティ は読み取り専用です。

モデルの学習に使用される一意のクラス名。文字ベクトルの cell 配列として指定します。

回帰木の場合、このプロパティは空 ([]) です。

この プロパティ は読み取り専用です。

誤分類のコスト。数値正方行列として指定します。要素 Cost(i,j) は、真のクラスが i である点をクラス j に分類するコストです。行は真のクラスに、列は予測するクラスに対応します。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

回帰木の場合、このプロパティは空 ([]) です。

データ型: single | double

この プロパティ は読み取り専用です。

事前確率。数値ベクトルとして指定します。Prior の要素の順序は、Mdl.ClassNames の要素の順序に対応します。

関数 TreeBagger の名前と値の引数 Cost を使用してコスト行列を指定すると、TreeBagger モデル オブジェクトの Prior プロパティには、誤分類コストに応じて調整された事前確率 (名前と値の引数 Prior により指定) が格納されます。詳細については、アルゴリズムを参照してください。

回帰木の場合、このプロパティは空 ([]) です。

データ型: single | double

オブジェクト関数

すべて展開する

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

すべて折りたたむ

フィッシャーのアヤメのデータ セット用にバギング分類木のアンサンブルを作成します。次に、最初の成長した木を表示し、out-of-bag 分類誤差をプロットして、out-of-bag 観測値のラベルを予測します。

fisheriris データ セットを読み込みます。150 本のアヤメについて 4 つの花弁の測定値が含まれる数値行列 X を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y を作成します。

load fisheriris
X = meas;
Y = species;

再現性を得るため、乱数発生器を default に設定します。

rng("default")

データ セット全体を使用して、バギング分類木のアンサンブルに学習をさせます。50 個の弱学習器を指定します。各木の out-of-bag 観測値を格納します。既定の設定では、TreeBagger は木を深く成長させます。

Mdl = TreeBagger(50,X,Y,...
    Method="classification",...
    OOBPrediction="on")
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'

Mdl は分類木の TreeBagger アンサンブルです。

Mdl.Trees プロパティは、アンサンブルの学習済み分類木を格納する 50 行 1 列の cell ベクトルです。それぞれの木は CompactClassificationTree オブジェクトです。最初の学習済み分類木をグラフィックで表示します。

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

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

plot(oobError(Mdl))
xlabel("Number of Grown Trees")
ylabel("Out-of-Bag Classification Error")

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

out-of-bag 観測値のラベルを予測します。10 件の観測値の無作為なセットについて結果を表示します。

oobLabels = oobPredict(Mdl);
ind = randsample(length(oobLabels),10);
table(Y(ind),oobLabels(ind),...
    VariableNames=["TrueLabel" "PredictedLabel"])
ans=10×2 table
      TrueLabel       PredictedLabel
    ______________    ______________

    {'setosa'    }    {'setosa'    }
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'virginica' }    {'virginica' }
    {'setosa'    }    {'setosa'    }
    {'versicolor'}    {'versicolor'}
    {'versicolor'}    {'virginica' }
    {'virginica' }    {'virginica' }

carsmall データ セット用にバギング回帰木のアンサンブルを作成します。次に、条件付き平均応答と条件付き四分位数を予測します。

carsmall データ セットを読み込みます。自動車のエンジン排気量の値を格納する数値ベクトルとして X を作成します。ガロンあたりの走行マイル数を格納する数値ベクトルとして Y を作成します。

load carsmall
X = Displacement;
Y = MPG;

再現性を得るため、乱数発生器を default に設定します。

rng("default")

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

Mdl = TreeBagger(100,X,Y,...
    Method="regression")
Mdl = 
  TreeBagger
Ensemble with 100 bagged decision trees:
                    Training X:               [94x1]
                    Training Y:               [94x1]
                        Method:           regression
                 NumPredictors:                    1
         NumPredictorsToSample:                    1
                   MinLeafSize:                    5
                 InBagFraction:                    1
         SampleWithReplacement:                    1
          ComputeOOBPrediction:                    0
 ComputeOOBPredictorImportance:                    0
                     Proximity:                   []

Mdl は回帰木用の TreeBagger アンサンブルです。

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

predX = linspace(min(X),max(X),10)';
YMean = predict(Mdl,predX);
YQuartiles = quantilePredict(Mdl,predX,...
    Quantile=[0.25,0.5,0.75]);

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

hold on
plot(X,Y,"o");
plot(predX,YMean)
plot(predX,YQuartiles)
hold off
ylabel("Fuel Economy")
xlabel("Engine Displacement")
legend("Data","Mean Response",...
    "First Quartile","Median",...,
    "Third Quartile")

バギング回帰木の 2 つのアンサンブルを作成します。1 つは予測子の分割に標準 CART アルゴリズムを使用し、もう 1 つは予測子の分割に曲率検定を使用します。次に、2 つのアンサンブルについて予測子の重要度の推定を比較します。

carsmall データ セットを読み込み、変数 CylindersMfg、および Model_Year をカテゴリカル変数に変換します。次に、カテゴリカル変数で表現されるカテゴリの個数を表示します。

load carsmall
Cylinders = categorical(Cylinders);
Mfg = categorical(cellstr(Mfg));
Model_Year = categorical(Model_Year);

numel(categories(Cylinders))
ans = 3
numel(categories(Mfg))
ans = 28
numel(categories(Model_Year))
ans = 3

8 つの自動車のメトリクスを含む table を作成します。

Tbl = table(Acceleration,Cylinders,Displacement,...
    Horsepower,Mfg,Model_Year,Weight,MPG);

再現性を得るため、乱数発生器を default に設定します。

rng("default")

データ セット全体を使用して、200 本のバギング回帰木のアンサンブルに学習をさせます。欠損値がデータに含まれているので、代理分岐を使用するように指定します。予測子の重要度の推定に関する out-of-bag 情報を格納します。

既定では、TreeBagger は、予測子を分割するためのアルゴリズムである標準 CART を使用します。変数 Cylinders と変数 Model_Year にはそれぞれ 3 つしかカテゴリがないので、標準 CART ではこの 2 つの変数よりも連続予測子が分割されます。

MdlCART = TreeBagger(200,Tbl,"MPG",...
    Method="regression",Surrogate="on",...
    OOBPredictorImportance="on");

TreeBagger は、予測子の重要度の推定を OOBPermutedPredictorDeltaError プロパティに格納します。

impCART = MdlCART.OOBPermutedPredictorDeltaError;

データ セット全体を使用して、200 本の回帰木のランダム フォレストに学習をさせます。偏りの無い木を成長させるため、予測子の分割に曲率検定を使用するよう指定します。

MdlUnbiased = TreeBagger(200,Tbl,"MPG",...
    Method="regression",Surrogate="on",...
    PredictorSelection="curvature",...
    OOBPredictorImportance="on");

impUnbiased = MdlUnbiased.OOBPermutedPredictorDeltaError; 

棒グラフを作成して、2 つのアンサンブルについて予測子の重要度の推定 impCART および impUnbiased を比較します。

tiledlayout(1,2,Padding="compact");

nexttile
bar(impCART)
title("Standard CART")
ylabel("Predictor Importance Estimates")
xlabel("Predictors")
h = gca;
h.XTickLabel = MdlCART.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = "none";

nexttile
bar(impUnbiased);
title("Curvature Test")
ylabel("Predictor Importance Estimates")
xlabel("Predictors")
h = gca;
h.XTickLabel = MdlUnbiased.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = "none";

CART モデルでは、連続予測子 Weight は 2 番目に最も重要な予測子です。不偏のモデルでは、Weight の予測子の重要度は値とランクが下がっています。

tall 配列内の観測値に対するバギング分類木のアンサンブルに学習をさせ、観測値に重みを付けてモデル内の各木の誤分類確率を求めます。この例ではデータ セット airlinesmall.csv を使用します。これは、飛行機のフライト データについての表形式ファイルが含まれている大規模なデータ セットです。

tall 配列に対する計算を実行する場合、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合は既定) またはローカルの MATLAB セッションを使用します。Parallel Computing Toolbox がある場合にローカルの MATLAB セッションを使用して例を実行するには、関数 mapreducer を使用してグローバルな実行環境を変更します。

mapreducer(0)

データ セットが含まれているフォルダーの場所を参照するデータストアを作成します。処理する変数のサブセットを選択します。関数 datastoreNaN 値に置き換えるため、"NA" 値を欠損データとして扱います。データストア内のデータを含む tall table tt を作成します。

ds = datastore("airlinesmall.csv");
ds.SelectedVariableNames = ["Month" "DayofMonth" "DayOfWeek",...
                            "DepTime" "ArrDelay" "Distance" "DepDelay"];
ds.TreatAsMissing = "NA";
tt  = tall(ds)
tt =

  M×7 tall table

    Month    DayofMonth    DayOfWeek    DepTime    ArrDelay    Distance    DepDelay
    _____    __________    _________    _______    ________    ________    ________

     10          21            3          642          8         308          12   
     10          26            1         1021          8         296           1   
     10          23            5         2055         21         480          20   
     10          23            5         1332         13         296          12   
     10          22            4          629          4         373          -1   
     10          28            3         1446         59         308          63   
     10           8            4          928          3         447          -2   
     10          10            6          859         11         954          -1   
      :          :             :           :          :           :           :
      :          :             :           :          :           :           :

フライトが遅れた場合に真になる論理変数を定義することにより、10 分以上遅れたフライトを判別します。この変数にクラス ラベル Y を含めます。この変数のプレビューには、はじめの数行が含まれています。

Y = tt.DepDelay > 10
Y =

  M×1 tall logical array

   1
   0
   1
   1
   0
   1
   0
   0
   :
   :

予測子データの tall 配列 X を作成します。

X = tt{:,1:end-1}
X =

  M×6 tall double matrix

          10          21           3         642           8         308
          10          26           1        1021           8         296
          10          23           5        2055          21         480
          10          23           5        1332          13         296
          10          22           4         629           4         373
          10          28           3        1446          59         308
          10           8           4         928           3         447
          10          10           6         859          11         954
          :           :            :          :           :           :
          :           :            :          :           :           :

クラス 1 の観測値に 2 倍の重みを任意に割り当てることにより、観測値の重みに対する tall 配列 W を作成します。

W = Y+1;

欠損データが含まれている XY および W の行を削除します。

R = rmmissing([X Y W]);
X = R(:,1:end-2); 
Y = R(:,end-1); 
W = R(:,end);

データ セット全体を使用して、20 本のバギング分類木のアンサンブルに学習をさせます。重みベクトルと一様な事前確率を指定します。再現性を得るため、rngtallrng を使用して乱数発生器のシードを設定します。tall 配列の場合、ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については、コードの実行場所の制御を参照してください。

rng("default") 
tallrng("default")
tMdl = TreeBagger(20,X,Y,...
    Weights=W,Prior="uniform")
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.44 sec
Evaluation completed in 0.47 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.5 sec
Evaluation completed in 1.6 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 3.8 sec
Evaluation completed in 3.8 sec
tMdl = 
  CompactTreeBagger
Ensemble with 20 bagged decision trees:
              Method:       classification
       NumPredictors:                    6
          ClassNames: '0' '1'

  Properties, Methods

tMdl は、20 本のバギングされた決定木による CompactTreeBagger アンサンブルです。tall データの場合、関数 TreeBaggerCompactTreeBagger オブジェクトを返します。

モデル内の各木の誤分類確率を計算します。名前と値の引数 Weights を使用して、ベクトル W に格納されている重みを各観測値に適用します。

terr = error(tMdl,X,Y,Weights=W)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 4.7 sec
Evaluation completed in 4.7 sec
terr = 20×1

    0.1420
    0.1214
    0.1115
    0.1078
    0.1037
    0.1027
    0.1005
    0.0997
    0.0981
    0.0983
      ⋮

決定木のアンサンブルについて、平均の誤分類確率を求めます。

avg_terr = mean(terr)
avg_terr = 0.1022

詳細

すべて展開する

ヒント

  • TreeBagger モデル MdlTrees プロパティには、Mdl.NumTrees 個の CompactClassificationTree オブジェクトまたは CompactRegressionTree オブジェクトの cell ベクトルが格納されます。t 番目の成長した木をグラフィックで表示するには次のように入力します。

    view(Mdl.Trees{t})

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

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

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

  • 標準 CART には、相違する値が少ない分割予測子 (カテゴリカル変数など) よりも、相違する値が多い分割予測子 (連続変数など) を選択する傾向があります[4]。以下のいずれかに該当する場合は、曲率検定または交互作用検定の指定を検討してください。

    • データに、相違する値の個数が他の予測子よりも比較的少ない予測子がある場合 (予測子データ セットが異種混合である場合など)。

    • 目的は、予測子の重要度を分析することです。TreeBagger は、予測子の重要度の推定を OOBPermutedPredictorDeltaError プロパティに格納します。

    予測子の選択に関する詳細については、分類木の場合は名前と値の引数 PredictorSelection を、回帰木の場合は名前と値の引数 PredictorSelection を参照してください。

アルゴリズム

  • 名前と値の引数 CostPrior、および Weights を指定すると、出力モデル オブジェクトに CostPrior、および W の各プロパティの指定値がそれぞれ格納されます。Cost プロパティには、ユーザー指定のコスト行列 (C) が変更なしで格納されます。Prior プロパティと W プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。モデルの学習用に、事前確率と観測値の重みが更新されて、コスト行列で指定されているペナルティが組み込まれます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。

  • 関数 TreeBagger は誤分類コストが大きいクラスをオーバーサンプリングし、誤分類コストが小さいクラスをアンダーサンプリングして、in-bag の標本を生成します。その結果、out-of-bag の標本では、誤分類コストが大きいクラスの観測値は少なくなり、誤分類コストが小さいクラスの観測値は多くなります。小さなデータ セットと歪みが大きいコスト行列を使用してアンサンブル分類を学習させる場合、クラスあたりの out-of-bag の観測値の数は非常に少なくなることがあります。そのため、推定された out-of-bag の誤差の変動幅が非常に大きくなり、解釈が困難になる場合があります。事前確率が大きいクラスでも同じ現象が発生する場合があります。

  • 決定木を成長させるときの関数 TreeBagger による分割予測子の選択方法とノード分割アルゴリズムの詳細については、分類木の場合はアルゴリズムを、回帰木の場合はアルゴリズムを参照してください。

代替機能

Statistics and Machine Learning Toolbox™ には、バギングおよびランダム フォレスト用に 3 つのオブジェクトが用意されています。

TreeBagger とバギング アンサンブル (ClassificationBaggedEnsemble および RegressionBaggedEnsemble) の違いについては、TreeBagger とバギング アンサンブルの比較を参照してください。

参照

[1] Breiman, Leo. "Random Forests." Machine Learning 45 (2001): 5–32. https://doi.org/10.1023/A:1010933404324.

[2] Breiman, Leo, Jerome Friedman, Charles J. Stone, and R. A. Olshen. Classification and Regression Trees. Boca Raton, FL: CRC Press, 1984.

[3] Loh, Wei-Yin. "Regression Trees with Unbiased Variable Selection and Interaction Detection." Statistica Sinica 12, no. 2 (2002): 361–386. https://www.jstor.org/stable/24306967.

[4] Loh, Wei-Yin, and Yu-Shan Shih. "Split Selection for Classification Trees." Statistica Sinica 7, no. 4 (1997): 815–840. https://www.jstor.org/stable/24306157.

[5] Meinshausen, Nicolai. "Quantile Regression Forests." Journal of Machine Learning Research 7, no. 35 (2006): 983–999. https://jmlr.org/papers/v7/meinshausen06a.html.

[6] Genuer, Robin, Jean-Michel Poggi, Christine Tuleau-Malot, and Nathalie Villa-Vialanei. "Random Forests for Big Data." Big Data Research 9 (2017): 28–46. https://doi.org/10.1016/j.bdr.2017.07.003.

拡張機能

バージョン履歴

R2009a で導入

すべて展開する