TreeBagger
バギングされた決定木のアンサンブル
説明
TreeBagger
オブジェクトは、分類または回帰のいずれかについてバギングされた決定木のアンサンブルです。個々の決定木には、過適合になる傾向があります。bootstrap aggregation を意味する "バギング" は、過適合の影響を減らして汎化を改善するアンサンブル法です。
作成
関数 TreeBagger
は、入力データのブートストラップ標本を使用して、TreeBagger
アンサンブル モデル内のすべての木を成長させます。標本に含まれない観測値は、その木にとって "out-of-bag" と見なされます。この関数は、ランダム フォレスト アルゴリズム[1]を使用して、各決定分岐の予測子のサブセットを無作為に選択します。
構文
説明
ヒント
既定では、関数 TreeBagger
は分類決定木を成長させます。回帰決定木を成長させるには、名前と値の引数 Method
を "regression"
として指定します。
は、table Mdl
= TreeBagger(NumTrees
,Tbl
,ResponseVarName
)Tbl
内の予測子と変数 Tbl.ResponseVarName
内のクラス ラベルによって学習させた、NumTrees
本のバギング分類木のアンサンブル オブジェクト (Mdl
) を返します。
は、table Mdl
= TreeBagger(NumTrees
,Tbl
,formula
)Tbl
内の予測子によって学習させた Mdl
を返します。入力 formula
は、Mdl
を当てはめるために使用する Tbl
内の予測子変数のサブセットおよび応答の説明モデルです。formula
はウィルキンソンの表記法を使用して指定します。
は、前述した入力引数の組み合わせのいずれかを使用し、1 つ以上の名前と値の引数で指定されたオプションを追加して、Mdl
= TreeBagger(___,Name=Value
)Mdl
を返します。たとえば、名前と値の引数 PredictorSelection
を使用して、カテゴリカル予測子での最適な分割を検出するためのアルゴリズムを指定できます。
入力引数
NumTrees
— 決定木の数
正の整数
バギング アンサンブル内の決定木の数。正の整数として指定します。
データ型: single
| double
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl
に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl
に応答変数が含まれている場合にTbl
内の他の変数をすべて予測子として使用するには、ResponseVarName
を使用して応答変数を指定します。Tbl
に応答変数が含まれている場合にTbl
内の他の変数の一部のみを予測子として使用するには、formula
を使用して式を指定します。Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数の長さとTbl
の行数は等しくなければなりません。
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、"Y"
として指定します。それ以外の場合、モデルを学習させるときに、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y
が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値の引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | string スカラー
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3"
という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y
は応答変数を、x1
、x2
および x3
は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
Y
— クラス ラベルまたは応答変数
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
バギングされた決定木のアンサンブルに学習させるクラス ラベルまたは応答変数。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
— 予測子データ
数値行列
予測子データ。数値行列として指定します。
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 情報を格納することを指定します。
ChunkSize
— データの各チャンクに含まれる観測値の個数
50000 (既定値) | 正の整数
データの各チャンクに含まれる観測値の個数。正の整数を指定します。このオプションは、tall 配列に対して TreeBagger
を使用する場合のみ適用されます。詳細については、拡張機能を参照してください。
例: ChunkSize=10000
データ型: single
| double
Cost
— 誤分類のコスト
正方行列 | 構造体
誤分類のコスト。正方行列または構造体を指定します。
正方行列
Cost
を指定した場合、Cost(i,j)
は真のクラスがi
である点をクラスj
に分類するコストです。つまり、行は真のクラスに、列は予測クラスに対応します。Cost
の対応する行と列についてクラスの順序を指定するには、名前と値の引数ClassNames
を使用します。構造体
S
を指定する場合、次の 2 つのフィールドが必要です。S.ClassNames
:Y
と同じデータ型のクラス名を表す変数を含む。S.ClassificationCosts
。行と列の順序がS.ClassNames
と同じコスト行列。
既定値は、i~=j
である場合は Cost(i,j)=1
、i=j
である場合は Cost(i,j)=0
です。
歪みが大きい Cost
の影響の詳細については、アルゴリズムを参照してください。
例: Cost=[0,1;2,0]
データ型: single
| double
| struct
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | "all"
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は 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
Method
— 決定木のタイプ
"classification"
(既定値) | "regression"
決定木のタイプ。"classification"
または "regression"
を指定します。回帰木の場合、Y
は数値でなければなりません。
例: Method="regression"
MinLeafSize
— 葉ノードの観測値の最小数
正の整数
葉ノードの観測値の最小数。正の整数を指定します。各葉には少なくとも木の葉あたり MinLeafSize
の観測値があります。MinLeafSize
の既定の設定は、分類木の場合は 1
、回帰木の場合は 5
です。
例: MinLeafSize=4
データ型: single
| double
NumPredictorsToSample
— 各決定分岐の予測子変数の数
正の整数 | "all"
各決定分岐の (無作為に選択された) 予測子変数の数。正の整数または "all"
を指定します。NumPredictorsToSample
の既定の設定は、分類木の場合は変数の個数の平方根、回帰木の場合は変数の個数の 1/3 です。既定の数が整数でない場合、その数は正の無限大方向の最も近い整数に丸められます。NumPredictorsToSample
を "all"
以外の値に設定した場合は、Breiman のランダム フォレスト アルゴリズム[1]が使用されます。
例: NumPredictorsToSample=5
データ型: single
| double
| char
| string
NumPrint
— メッセージが表示されるようになる成長した木の数
0 (既定値) | 正の整数
成長した木 (学習サイクル) の数。この数を超えると、学習の進行状況に関するメッセージがコマンド ウィンドウに表示されるようになります。非負の整数を指定します。既定では、診断メッセージは表示されません。
例: NumPrint=10
データ型: single
| double
InBagFraction
— 抽出する入力データの比率
1 (既定値) | 正のスカラー
それぞれの新しい木を成長させるために入力データから復元抽出する、入力データの比率。範囲 (0,1] の正のスカラーを指定します。
例: InBagFraction=0.5
データ型: single
| double
OOBPrediction
— out-of-bag 情報を格納するためのインジケーター
"off"
(既定値) | "on"
アンサンブル内の out-of-bag 情報を格納するためのインジケーター。"on"
または "off"
を指定します。OOBPrediction
として "on"
を指定すると、どの観測値が out-of-bag であるかに関する情報が各木について格納されます。TreeBagger
では、この情報を使用して、アンサンブル内の各木について予測されたクラス確率を計算できます。
例: OOBPrediction="off"
OOBPredictorImportance
— 特徴量の重要度の out-of-bag 推定値を格納するためのインジケーター
"off"
(既定値) | "on"
アンサンブル内の特徴量の重要度の out-of-bag 推定値を格納するためのインジケーター。"on"
または "off"
を指定します。OOBPredictorImportance
として "on"
を指定した場合、関数 TreeBagger
は OOBPrediction
を "on"
に設定します。予測子の重要度を分析するには、PredictorSelection
として "curvature"
または "interaction-curvature"
を指定します。
例: OOBPredictorImportance="on"
Options
— 並列計算と乱数ストリーム設定のオプション
構造体
並列計算と乱数ストリーム設定のオプション。構造体として指定します。statset
を使用して Options
構造体を作成します。次の表は、Options
のフィールドとその値の一覧です。
フィールド名 | 値 | 既定の設定 |
---|---|---|
UseParallel | 並列計算を行う場合は、この値を true に設定します。 | false |
UseSubstreams | 再生可能な方法で並列計算する場合は、この値を 再現性のある計算を行うには、 | false |
Streams | RandStream オブジェクトまたはそのようなオブジェクトで構成される cell 配列としてこの値を指定します。 | Streams を指定しなかった場合、TreeBagger は既定のストリームを使用します。 |
メモ
並列計算を行うには、Parallel Computing Toolbox™ が必要です。
例: Options=statset(UseParallel=true)
データ型: struct
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames
の機能は、学習データの提供方法によって決まります。
X
とY
を指定した場合、PredictorNames
を使用してX
内の予測子変数に名前を割り当てることができます。PredictorNames
内の名前の順序は、X
の列の順序に一致しなければなりません。つまり、PredictorNames{1}
はX(:,1)
の名前、PredictorNames{2}
はX(:,2)
の名前であり、他も同様です。また、size(X,2)
とnumel(PredictorNames)
は等しくなければなりません。既定では
PredictorNames
は{'x1','x2',...}
です。
Tbl
を指定する場合、PredictorNames
を使用して学習に使用する予測子変数を選択できます。つまり、TreeBagger
は、学習中にPredictorNames
の予測子変数と応答変数のみを使用します。PredictorNames
はTbl.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。PredictorNames
とformula
の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string
| cell
SampleWithReplacement
— 復元抽出のインジケーター
"on"
(既定値) | "off"
復元抽出のインジケーター。"on"
または "off"
を指定します。SampleWithReplacement
には、復元抽出の場合は "on"
を、非復元抽出の場合は "off"
を指定します。SampleWithReplacement
を "off"
に設定した場合は、名前と値の引数 InBagFraction
を 1 未満の値に設定する必要があります。
例: SampleWithReplacement="on"
Prior
— 2 クラス学習の各クラスの事前確率
"empirical"
(既定値) | "uniform"
| 数値ベクトル | 構造体配列
2 クラス学習の各クラスの事前確率。次の表の値として指定します。
値 | 説明 |
---|---|
"empirical" | クラスの事前確率は、Y のクラスの相対的頻度です。 |
"uniform" | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
数値ベクトル | ベクトルの各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、名前と値の引数 ClassNames を使用して順序を指定します。要素は合計が 1 になるように正規化されます。 |
構造体 | 構造体
|
コスト行列を指定すると、TreeBagger
モデルの Prior
プロパティには、誤分類コストに応じて調整された事前確率が格納されます。詳細については、アルゴリズムを参照してください。
この引数は 2 クラス学習に対してのみ有効です。
例: Prior=struct(ClassNames=["setosa" "versicolor" "virginica"],ClassProbs=1:3)
データ型: char
| string
| single
| double
| struct
メモ
関数 TreeBagger
は、その名前と値の引数に加えて、関数 TreeBagger の追加の名前と値の引数にリストされている fitctree
と fitrtree
の名前と値の引数を受け入れます。
出力引数
Mdl
— バギングされた決定木のアンサンブル
TreeBagger
オブジェクト
バギングされた決定木のアンサンブル。TreeBagger
オブジェクトとして返されます。
プロパティ
バギングのプロパティ
ComputeOOBPrediction
— 学習観測値の out-of-bag 予測を計算するためのインジケーター
false
または 0 (既定値) | true
または 1
この プロパティ は読み取り専用です。
学習観測値の out-of-bag 予測を計算するためのインジケーター。数値または logical の 1 (true
) または 0 (false
) として指定します。このプロパティが true
の場合は次のようになります。
TreeBagger
オブジェクトにはOOBIndices
プロパティとOOBInstanceWeight
プロパティが含まれます。オブジェクト関数
oobError
、oobMargin
、およびoobMeanMargin
を使用できます。
ComputeOOBPredictorImportance
— out-of-bag 変数の重要度を計算するためのインジケーター
false
または 0 (既定値) | true
または 1
この プロパティ は読み取り専用です。
out-of-bag 変数の重要度を計算するためのインジケーター。数値または logical の 1 (true
) または 0 (false
) として指定します。このプロパティが true
の場合は次のようになります。
TreeBagger
オブジェクトにはOOBPermutedPredictorDeltaError
プロパティ、OOBPermutedPredictorDeltaMeanMargin
プロパティ、およびOOBPermutedPredictorCountRaiseMargin
プロパティが含まれます。ComputeOOBPrediction
プロパティもtrue
になります。
InBagFraction
— 無作為に選択される観測値の比率
1 (既定値) | 数値スカラー
この プロパティ は読み取り専用です。
各ブートストラップ複製について復元抽出により無作為に選択される観測値 (in-bag の観測値) の比率。数値スカラーとして指定します。各複製のサイズは、Nobs × InBagFraction
により指定されます。Nobs は、学習データの観測値の数です。
データ型: single
| double
OOBIndices
— out-of-bag インデックス
logical 配列
この プロパティ は読み取り専用です。
out-of-bag インデックス。logical 配列として指定します。このプロパティは Nobs 行 NumTrees
列の配列です。Nobs は学習データの観測値の数、NumTrees
はアンサンブル内の木の数です。
要素が OOBIndices
(i,j)true
の場合、観測 i は木 j について out-of-bag です (つまり、関数 TreeBagger
は観測 i を、木 j を成長させるための学習データとして選択していません)。
OOBInstanceWeight
— 観測ごとの out-of-bag 木の数
数値ベクトル
この プロパティ は読み取り専用です。
観測ごとの out-of-bag 木の数。数値ベクトルとして指定します。このプロパティは Nobs 行 1 列のベクトルです。Nobs は学習データの観測値の数です。
要素には、観測 i の out-of-bag 応答を計算するために使用された木の数が含まれます。OOBInstanceWeight
(i)
データ型: single
| double
OOBPermutedPredictorCountRaiseMargin
— マージンの上昇に関する予測子変数の重要度
数値ベクトル
この プロパティ は読み取り専用です。
マージンの上昇に関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合に、上昇した分離マージンの数と低下した分離マージンの数との差が尺度になります。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。
回帰木の場合、このプロパティは空 ([]
) です。
データ型: single
| double
OOBPermutedPredictorDeltaError
— 予測誤差に関する予測子変数の重要度
数値ベクトル
この プロパティ は読み取り専用です。
予測誤差に関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数 (列) の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合、予測誤差の増加を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。
データ型: single
| double
OOBPermutedPredictorDeltaMeanMargin
— 分類マージンに関する予測子変数の重要度
数値ベクトル
この プロパティ は読み取り専用です。
分類マージンに関する予測子変数 (特徴量) の重要度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は学習データに含まれている変数 (列) の数です。各変数について、その変数の値が out-of-bag 観測内で並べ替えられた場合、分類マージンの減少を尺度とします。この尺度はツリーごとに計算され、アンサンブル全体で平均化されてから、アンサンブル全体の標準偏差で除算されます。
回帰木の場合、このプロパティは空 ([]
) です。
データ型: single
| double
木のプロパティ
DeltaCriterionDecisionSplit
— 予測子ごとの分離基準の貢献度
数値ベクトル
この プロパティ は読み取り専用です。
予測子ごとの分割基準の貢献度。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は分割基準の変化の数です。各変数の分割全体で分割基準の変化が合計され、成長した木のアンサンブル全体で合計が平均化されます。
データ型: single
| double
MergeLeaves
— 葉をマージするためのインジケーター
false
または 0 (既定値) | true
または 1
この プロパティ は読み取り専用です。
葉をマージするためのインジケーター。数値または logical の 1 (true
) または 0 (false
) として指定します。同じ親をもつ決定木の葉が、総リスクを減少させない分割のためにマージされる場合、このプロパティは true
になります。それ以外の場合、このプロパティは false
になります。
MinLeafSize
— 葉ノードの観測値の最小数
正の整数
この プロパティ は読み取り専用です。
葉ノードの観測値の最小数。正の整数を指定します。各葉には少なくとも MinLeafSize
の観測値があります。MinLeafSize
の既定の設定は、分類木の場合は 1、回帰木の場合は 5 です。決定木の学習では、fitctree
と fitrtree
は名前と値の引数 MinParentSize
を 2*MinLeafSize
に設定します。
データ型: single
| double
NumTrees
— 決定木の数
正の整数
この プロパティ は読み取り専用です。
バギング アンサンブル内の決定木の数。正の整数として指定します。
データ型: single
| double
Prune
— 枝刈りされた部分木の最適シーケンスを推定するためのインジケーター
false
または 0 (既定値) | true
または 1
この プロパティ は読み取り専用です。
枝刈りされた部分木の最適シーケンスを推定するためのインジケーター。数値または logical の 1 (true
) または 0 (false
) として指定します。Prune
プロパティは、決定木が枝刈りされる場合に true
となり、枝刈りされない場合に false
となります。アンサンブルについては、決定木を枝刈りすることは推奨しません。
SampleWithReplacement
— 決定木を復元抽出するためのインジケーター
true
または 1 (既定値) | false
または 0
この プロパティ は読み取り専用です。
各決定木を復元抽出するためのインジケーター。数値または logical の 1 (true
) または 0 (false
) として指定します。関数 TreeBagger
が各決定木を復元抽出する場合、このプロパティは true
になります。それ以外の場合は false
になります。
SurrogateAssociation
— 変数の関連性予測尺度
数値行列
この プロパティ は読み取り専用です。
変数の関連性予測尺度。数値行列として指定します。このプロパティは Nvars 行 Nvars 列の行列です。Nvars は予測子変数の数です。このプロパティには、成長した木のアンサンブル全体で平均化した変数の関連性予測尺度が格納されます。
名前と値の引数
Surrogate
を"on"
に設定してアンサンブルを成長させた場合、各ツリーのこの行列には、代理分岐で平均化された関連性予測尺度が入力されます。名前と値の引数
Surrogate
を"off"
に設定してアンサンブルを成長させた場合、SurrogateAssociation
プロパティは単位行列になります。既定ではSurrogate
は"off"
に設定されます。
データ型: single
| double
TreeArguments
— 関数 TreeBagger
に指定された名前と値の引数
cell 配列
この プロパティ は読み取り専用です。
関数 TreeBagger
に指定された名前と値の引数。cell 配列として指定します。関数 TreeBagger
は、バギング アンサンブル用に新しい木を成長させる際にこれらの名前と値の引数を使用します。
Trees
— アンサンブル内の決定木
cell 配列
この プロパティ は読み取り専用です。
バギング アンサンブル内の決定木。NumTrees
行 1 列の cell 配列として指定します。それぞれの木は CompactClassificationTree
オブジェクトまたは CompactRegressionTree
オブジェクトです。
予測子のプロパティ
NumPredictorSplit
— 予測子ごとの決定分岐の数
数値ベクトル
この プロパティ は読み取り専用です。
予測子ごとの決定分岐の数。数値ベクトルとして指定します。このプロパティは 1 行 Nvars 列のベクトルです。Nvars は予測子変数の数です。NumPredictorSplit
の各要素は、予測子での分割数をすべての木について合計した数を表します。
データ型: single
| double
NumPredictorsToSample
— 選択する予測子変数の数
正の整数
この プロパティ は読み取り専用です。
各決定分岐で無作為に選択する予測子変数の数。正の整数として指定します。このプロパティの既定の設定は、分類木の場合は変数の総数の平方根、回帰木の場合は変数の総数の 1/3 です。
データ型: single
| double
OutlierMeasure
— 各観測値の外れ値の尺度
数値ベクトル
この プロパティ は読み取り専用です。
各観測値の外れ値の尺度。数値ベクトルとして指定します。このプロパティは Nobs 行 1 列のベクトルです。Nobs は学習データの観測値の数です。
データ型: single
| double
PredictorNames
— 予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子名。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データ X
に現れる順序に対応します。
X
— 予測子
数値配列
この プロパティ は読み取り専用です。
バギング アンサンブルの学習に使用された予測子。数値配列として指定します。このプロパティは Nobs 行 Nvars 列の配列です。Nobs は学習データの観測値 (行) の数、Nvars は変数 (列) の数です。
データ型: single
| double
応答のプロパティ
DefaultYfit
— 既定の予測値
""
| "MostPopular"
| 数値スカラー
predict
または oobPredict
で返される既定の予測値。""
、"MostPopular"
、または数値スカラーとして指定します。このプロパティで、予測が不可能な場合 (たとえば、oobPredict
でアンサンブルのすべての木で in-bag である観測の応答を予測する場合) にオブジェクト関数 predict
または oobPredict
から返される予測値を制御します。
分類木では、
DefaultYfit
を""
または"MostPopular"
に設定できます。"MostPopular"
(分類の既定値) を指定すると、プロパティ値は学習データの中で最も可能性の高いクラスの名前になります。""
を指定すると、in-bag の観測値が out-of-bag の誤差およびマージンの計算から除外されます。回帰木では、
DefaultYfit
を任意の数値スカラーに設定できます。回帰の既定値は学習データの応答の平均です。DefaultYfit
をNaN
に設定すると、in-bag の観測値が out-of-bag の誤差およびマージンの計算から除外されます。
例: Mdl.DefaultYfit="MostPopular"
データ型: single
| double
| char
| string
Y
— クラス ラベルまたは応答データ
文字ベクトルの cell 配列 | 数値ベクトル
この プロパティ は読み取り専用です。
クラス ラベルまたは応答データ。文字ベクトルの cell 配列または数値ベクトルを指定します。
名前と値の引数
Method
を"classification"
に設定した場合、このプロパティはクラス ラベルを表します。Y
の各行は、X
の対応する行の観測された分類を表します。名前と値の引数
Method
を"regression"
に設定した場合、このプロパティは応答データを表し、数値ベクトルになります。
データ型: single
| double
| cell
学習プロパティ
Method
— アンサンブルのタイプ
"classification"
| "regression"
この プロパティ は読み取り専用です。
アンサンブルのタイプ。アンサンブル分類の場合は "classification"
、アンサンブル回帰の場合は "regression"
として指定します。
Proximity
— 学習データの観測値間の近接度
数値配列
この プロパティ は読み取り専用です。
学習データの観測値間の近接度。数値配列として指定します。このプロパティは Nobs 行 Nobs 列の配列です。Nobs は学習データの観測値の数です。配列には観測値間の近接度の尺度が含まれます。任意の 2 つの観測値の近接度は、これらの観測値がツリーの同じリーフに着地する比率として定義されます。配列は、1 の対角要素と 0 ~ 1 の範囲の非対角要素をもつ対称配列です。
データ型: single
| double
W
— 観測値の重み
非負値のベクトル。
この プロパティ は読み取り専用です。
観測値の重み。非負値のベクトルを指定します。このプロパティには Y
と同じ数の行が含まれます。W
の各エントリは、Y
で該当する観測の相対的な重要性を示します。関数 TreeBagger
は、アンサンブル内の各決定木を成長させるために観測値の重みを使用します。
データ型: single
| double
分類のプロパティ
ClassNames
— 一意のクラス名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
モデルの学習に使用される一意のクラス名。文字ベクトルの cell 配列として指定します。
回帰木の場合、このプロパティは空 ([]
) です。
Cost
— 誤分類のコスト
数値正方行列
この プロパティ は読み取り専用です。
誤分類のコスト。数値正方行列として指定します。要素 Cost(i,j)
は、真のクラスが i
である点をクラス j
に分類するコストです。行は真のクラスに、列は予測するクラスに対応します。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
回帰木の場合、このプロパティは空 ([]
) です。
データ型: single
| double
Prior
— 事前確率
数値ベクトル
この プロパティ は読み取り専用です。
事前確率。数値ベクトルとして指定します。Prior
の要素の順序は、Mdl.ClassNames
の要素の順序に対応します。
関数 TreeBagger
の名前と値の引数 Cost
を使用してコスト行列を指定すると、TreeBagger
モデル オブジェクトの Prior
プロパティには、誤分類コストに応じて調整された事前確率 (名前と値の引数 Prior
により指定) が格納されます。詳細については、アルゴリズムを参照してください。
回帰木の場合、このプロパティは空 ([]
) です。
データ型: single
| double
オブジェクト関数
CompactTreeBagger
の作成
compact | 決定木のコンパクトなアンサンブル |
アンサンブルの解釈
partialDependence | 部分依存の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
パフォーマンスの測定
error | 誤差 (誤分類の確率または MSE) |
meanMargin | 平均分類マージン |
margin | 分類マージン |
oobError | out-of-bag 誤差 |
oobMeanMargin | out-of-bag 平均マージン |
oobMargin | out-of-bag マージン |
oobQuantileError | 回帰の bag of trees の out-of-bag 分位点損失 |
quantileError | 回帰の bag of trees の使用による分位点損失 |
応答予測
oobPredict | out-of-bag 観測に対するアンサンブル予測 |
oobQuantilePredict | 回帰の bag of trees による out-of-bag 観測値の分位数予測 |
predict | バギングされた決定木のアンサンブルの使用による応答の予測 |
quantilePredict | 回帰の bag of trees の使用による応答の分位数の予測 |
例
バギング分類木のアンサンブルに学習をさせる
フィッシャーのアヤメのデータ セット用にバギング分類木のアンサンブルを作成します。次に、最初の成長した木を表示し、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' Properties, Methods
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: [] Properties, Methods
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
データ セットを読み込み、変数 Cylinders
、Mfg
、および 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 配列における、バギング分類木のアンサンブルの学習
tall 配列内の観測値に対するバギング分類木のアンサンブルに学習をさせ、観測値に重みを付けてモデル内の各木の誤分類確率を求めます。この例ではデータ セット airlinesmall.csv
を使用します。これは、飛行機のフライト データについての表形式ファイルが含まれている大規模なデータ セットです。
tall 配列に対する計算を実行する場合、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合は既定) またはローカルの MATLAB セッションを使用します。Parallel Computing Toolbox がある場合にローカルの MATLAB セッションを使用して例を実行するには、関数 mapreducer
を使用してグローバルな実行環境を変更します。
mapreducer(0)
データセットが含まれているフォルダーの場所を参照するデータストアを作成します。処理する変数のサブセットを選択します。関数 datastore
で NaN
値に置き換えるため、"NA"
値を欠損データとして扱います。データストア内のデータを含む tall table tt
を作成します。
ds = datastore("airlinesmall.csv"); ds.SelectedVariableNames = ["Month" "DayofMonth" "DayOfWeek",... "DepTime" "ArrDelay" "Distance" "DepDelay"]; ds.TreatAsMissing = "NA"; tt = tall(ds)
tt = Mx7 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 = Mx1 tall logical array 1 0 1 1 0 1 0 0 : :
予測子データの tall 配列 X
を作成します。
X = tt{:,1:end-1}
X = Mx6 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;
欠損データが含まれている X
、Y
および W
の行を削除します。
R = rmmissing([X Y W]); X = R(:,1:end-2); Y = R(:,end-1); W = R(:,end);
データ セット全体を使用して、20 本のバギング分類木のアンサンブルに学習をさせます。重みベクトルと一様な事前確率を指定します。再現性を得るため、rng
と tallrng
を使用して乱数発生器のシードを設定します。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 1.3 sec Evaluation completed in 1.6 sec Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.9 sec Evaluation completed in 2.3 sec Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 6.8 sec Evaluation completed in 6.8 sec
tMdl = CompactTreeBagger Ensemble with 20 bagged decision trees: Method: classification NumPredictors: 6 ClassNames: '0' '1' Properties, Methods
tMdl
は、20 本のバギングされた決定木による CompactTreeBagger
アンサンブルです。tall データの場合、関数 TreeBagger
は CompactTreeBagger
オブジェクトを返します。
モデル内の各木の誤分類確率を計算します。名前と値の引数 Weights
を使用して、ベクトル W
に格納されている重みを各観測値に適用します。
terr = error(tMdl,X,Y,Weights=W)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 7.1 sec Evaluation completed in 7.1 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
の追加の名前と値の引数
関数 TreeBagger
は、その名前と値のペアの引数に加えて、fitctree
と fitrtree
の次に示す名前と値の引数を受け入れます。
*名前と値の引数 ClassNames
を logical ベクトルとして指定する場合は、0 と 1 の値を使用します。false
と true
の値は使用しないでください。たとえば、ClassNames
を [1 0 1]
として指定できます。
ヒント
TreeBagger
モデルMdl
のTrees
プロパティには、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
を参照してください。
アルゴリズム
名前と値の引数
Cost
、Prior
、およびWeights
を指定すると、出力モデル オブジェクトにCost
、Prior
、およびW
の各プロパティの指定値がそれぞれ格納されます。Cost
プロパティには、ユーザー指定のコスト行列 (C) が変更なしで格納されます。Prior
プロパティとW
プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。モデルの学習用に、事前確率と観測値の重みが更新されて、コスト行列で指定されているペナルティが組み込まれます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。関数
TreeBagger
は誤分類コストが大きいクラスをオーバーサンプリングし、誤分類コストが小さいクラスをアンダーサンプリングして、in-bag の標本を生成します。その結果、out-of-bag の標本では、誤分類コストが大きいクラスの観測値は少なくなり、誤分類コストが小さいクラスの観測値は多くなります。小さなデータセットと歪みが大きいコスト行列を使用してアンサンブル分類を学習させる場合、クラスあたりの out-of-bag の観測値の数は非常に少なくなることがあります。そのため、推定された out-of-bag の誤差の変動幅が非常に大きくなり、解釈が困難になる場合があります。事前確率が大きいクラスでも同じ現象が発生する場合があります。決定木を成長させるときの関数
TreeBagger
による分割予測子の選択方法とノード分割アルゴリズムの詳細については、分類木の場合はアルゴリズムを、回帰木の場合はアルゴリズムを参照してください。
代替機能
Statistics and Machine Learning Toolbox™ には、バギングおよびランダム フォレスト用に 3 つのオブジェクトが用意されています。
関数
fitcensemble
によって作成される分類用のClassificationBaggedEnsemble
オブジェクト関数
fitrensemble
によって作成される回帰用のRegressionBaggedEnsemble
オブジェクト関数
TreeBagger
によって作成される分類および回帰用のTreeBagger
オブジェクト
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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、tall 配列を次の制限付きでサポートします。
関数
TreeBagger
は、tall 型のX
、Y
、Tbl
について次の構文をサポートします。B = TreeBagger(NumTrees,Tbl,Y)
B = TreeBagger(NumTrees,X,Y)
B = TreeBagger(___,Name=Value)
tall 配列の場合、関数
TreeBagger
は分類をサポートしますが、回帰はサポートしません。関数
TreeBagger
は、次の名前と値の引数をサポートします。NumPredictorsToSample
— 既定値は分類用の変数の個数の平方根です。MinLeafSize
— 観測値の個数が 50,000 より少ない場合、既定値は1
です。観測値の個数が 50,000 以上である場合、既定値はmax(1,min(5,floor(0.01*NobsChunk)))
です。NobsChunk
はチャンク内の観測値の個数です。ChunkSize
(tall 配列の場合のみ) — 既定値は50000
です。
さらに、関数
TreeBagger
は次のfitctree
の名前と値の引数をサポートします。AlgorithmForCategorical
CategoricalPredictors
Cost
— コスト行列C
の列にInf
値またはNaN
値を含めることはできません。MaxNumCategories
MaxNumSplits
MergeLeaves
PredictorNames
PredictorSelection
Prior
Prune
PruneCriterion
SplitCriterion
Surrogate
Weights
tall データの場合、関数
TreeBagger
は完全なTreeBagger
オブジェクトと同じプロパティのほとんどが含まれているCompactTreeBagger
オブジェクトを返します。主な違いは、コンパクトなオブジェクトの方がメモリ効率が良いということです。コンパクトなオブジェクトは、データ、またはデータと同じサイズの配列を含むプロパティを含みません。返される
CompactTreeBagger
オブジェクトに含まれる木の本数は、関数TreeBagger
に対する入力として指定した木の本数と異なる場合があります。TreeBagger
は、入力データ セットのサイズや木の成長に使用できるデータ チャンクの個数などの要因に基づいて、返す木の本数を決定します。サポートされる
CompactTreeBagger
のオブジェクト関数は次のとおりです。combine
error
margin
meanMargin
predict
setDefaultYfit
オブジェクト関数
error
、margin
、meanMargin
、predict
は名前と値の引数Trees
、TreeWeights
、UseInstanceForTree
をサポートしません。関数meanMargin
は名前と値の引数Weights
もサポートしません。関数
TreeBagger
は、互いに素であるデータのチャンクに対して木を生成することによりランダム フォレストを作成します。ランダム フォレストの作成に必要な数より多いデータを使用できる場合、この関数はデータをサブサンプリングします。同様の例については、Random Forests for Big Data[6]を参照してください。データの格納方法によっては、一部のデータ チャンクにはすべてのクラスのうちの数個のクラスの観測値しか含まれない場合があります。この場合、関数
TreeBagger
は、各データ チャンクにほとんどのクラスの観測値が含まれている場合より劣る結果を生成する可能性があります。TreeBagger
アルゴリズムの学習時の速度、精度およびメモリ使用量は、いくつかの要因によって変化します。このような要因には、NumTrees
および名前と値の引数ChunkSize
、MinLeafSize
、MaxNumSplits
の値が含まれます。n 行 p 列の tall 配列
X
に対して、TreeBagger
は学習時にサンプリングを実施します。このサンプリングは以下の変数に依存します。木の本数
NumTrees
チャンク サイズ
ChunkSize
観測値の個数 n
チャンクの個数 r (
n/ChunkSize
とほぼ同じ)
与えられた
X
に対して n の値は固定なので、TreeBagger
によるX
のサンプリングに影響を与えるのはNumTrees
とChunkSize
の設定です。r >
NumTrees
である場合、TreeBagger
はChunkSize * NumTrees
個の観測値をX
からサンプリングし、チャンクごとに 1 本の木に学習をさせます (各チャンクにはChunkSize
個の観測値が含まれています)。tall 配列を処理する場合、この状況が最も一般的です。r ≤
NumTrees
である場合、TreeBagger
はチャンク内でブートストラッピングを使用して、各チャンクで約NumTrees/r
本の木に学習をさせます。n ≤
ChunkSize
である場合、TreeBagger
はブートストラッピングを使用して、個々の木に学習をさせる標本 (それぞれサイズは n) を生成します。
NumTrees
の値を指定するときは、以下を考慮します。Hadoop® 分散ファイル システム (HDFS™) にデータ セットが分散している状態で Apache® Spark™ でコードを実行する場合、データ セットに対する HDFS のパーティション数の 2 倍以上を
NumTrees
の値として指定することから始めます。このように設定すると、Apache Spark の executor 間で過剰なデータ通信が行われなくなり、TreeBagger
アルゴリズムのパフォーマンスを向上させることができます。TreeBagger
は、生成されるCompactTreeBagger
モデル内の当てはめた木をクライアント メモリにコピーします。このため、クライアントの使用可能メモリ量によって、NumTrees
に対して設定できる値の上限が決まります。MinLeafSize
とMaxNumSplits
の値を調整すると速度とメモリ使用状況を向上させることができますが、これにより予測精度は低下します。調整後、データセットに対する HDFS のパーティション数の 2 倍よりNumTrees
の値が小さくなる場合は、パーティションが大きくなるように HDFS 内のデータを再パーティション化することを検討してください。
NumTrees
の値を指定した後で、TreeBagger
がほとんどのデータを木の成長に必ず使用できるようにするため、ChunkSize
を設定します。理想的には、ChunkSize * NumTrees
がデータの行数 n に近くなるようにします。個々の木に学習をさせるためのワーカーにおける使用可能メモリもChunkSize
の上限を決定する場合があることに注意してください。メモリ不足エラーを回避しワークフローがサポートされるように、Apache Spark のメモリ プロパティを調整できます。詳細は、
parallel.cluster.Hadoop
(Parallel Computing Toolbox)を参照してください。
詳細は、メモリに収まらないデータの tall 配列を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 Options
を指定し、statset
を使用してオプション構造体の UseParallel
フィールドを true
に設定します。
"Options",statset("UseParallel",true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2009a で導入R2022a: Cost
プロパティにユーザー指定のコスト行列を格納
R2022a 以降では、Cost
プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior
) と観測値の重み (W
) には、コスト行列で指定されているペナルティは反映されていません。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost
プロパティには既定のコスト行列が格納され、Prior
プロパティと W
プロパティには学習に使用される事前確率と観測値の重みがそれぞれ格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率と観測値の重みが格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
関数 oobError
および oobMeanMargin
は、W
プロパティに格納された観測値の重みを使用します。したがって、分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)