quantileError
回帰の bag of trees の使用による分位点損失
構文
説明
は、回帰の bag of trees err
= quantileError(Mdl
,X
)Mdl
を X
内の予測子データの観測値に適用することにより予測した中央値に対してテーブル X
内の真の応答を比較して、平均絶対偏差 (MAD) の 1/2 を返します。
Mdl
はTreeBagger
モデル オブジェクトでなければなりません。X
内の応答変数名は、学習データが格納されているテーブルに含まれている応答変数の名前と同じでなければなりません。
は、テーブル err
= quantileError(Mdl
,X
,ResponseVarName
)X
に含まれている真の応答および予測子の変数を使用します。ResponseVarName
は応答変数の名前です。Mdl.PredictorNames
には予測子変数の名前を格納します。
では、前の構文のいずれかと、1 つ以上の err
= quantileError(___,Name,Value
)Name,Value
ペア引数によって指定される追加オプションを使用します。たとえば、分位確率、誤差のタイプ、分位点回帰誤差の推定に含める木を指定します。
入力引数
Mdl
— 回帰の bag of trees
TreeBagger
モデル オブジェクト (既定値)
回帰の bag of trees。関数 TreeBagger
によって作成された TreeBagger
モデル オブジェクトとして指定します。Mdl.Method
の値は regression
でなければなりません。
X
— 標本データ
数値行列 | table
分位数の推定に使用する標本データ。数値行列またはテーブルを指定します。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。Y
を指定する場合は、X
の行数と Y
の長さが等しくなければなりません。
数値行列の場合
X
の列を構成する変数の順序は、Mdl
に学習させた (Mdl.PredictorNames
に格納されている) 予測子変数の順序と同じでなければなりません。テーブル (たとえば
Tbl
) を使用してMdl
に学習をさせた場合、Tbl
に含まれている予測子変数がすべて数値変数であれば、X
を数値行列にすることができます。Tbl
に種類の異なる予測子変数 (数値および categorical データ型など) が混在している場合、quantileError
でエラーがスローされます。真の応答は
Y
で指定します。
テーブルの場合
quantileError
は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。テーブル (たとえば
Tbl
) を使用してMdl
に学習をさせた場合、X
内のすべての予測子変数は変数名およびデータ型が、Mdl
に学習させた (Mdl.PredictorNames
に格納されている) 変数と同じでなければなりません。ただし、X
の列の順序がTbl
の列の順序に対応する必要はありません。Tbl
とX
に追加の変数 (応答変数や観測値の重みなど) を含めることができます。数値行列を使用して
Mdl
に学習をさせた場合、Mdl.PredictorNames
内の予測子名とX
内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定する方法については、関数TreeBagger
の名前と値のペアの引数PredictorNames
を参照してください。X
内の予測子変数はすべて数値ベクトルでなければなりません。X
に追加の変数 (応答変数や観測値の重みなど) を含めることができます。X
に応答変数が含まれている場合応答変数の名前が
Mdl
に学習させた応答変数と同じである場合、応答変数名や真の応答のベクトルを指定する必要はありません。quantileError
の既定設定ではその変数が真の応答に使用されます。真の応答は
ResponseVarName
またはY
で指定できます。
データ型: table
| double
| single
ResponseVarName
— 応答変数名
文字ベクトル | string スカラー
応答変数名。文字ベクトルまたは string スカラーを指定します。ResponseVarName
は、標本データの table X
に含まれている応答変数の名前でなければなりません。
table X
に応答変数が含まれており、Mdl
の学習に使用した応答変数と同じ名前である場合、ResponseVarName
を指定する必要はありません。quantileError
の既定設定ではその変数が真の応答に使用されます。
データ型: char
| string
Y
— 真の応答
数値ベクトル
真の応答。数値ベクトルを指定します。X
の行数と Y
の長さは等しくなければなりません。
データ型: double
| single
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
Mode
— アンサンブル誤差のタイプ
'ensemble'
(既定値) | 'cumulative'
| 'individual'
アンサンブル誤差のタイプ。'Mode'
と次の表の値から構成されるコンマ区切りのペアとして指定します。tau
は Quantile
の値であるとします。
値 | 説明 |
---|---|
'cumulative' |
|
'ensemble' |
|
'individual' |
|
'cumulative'
または 'individual'
の場合、Trees
または UseInstanceForTree
を使用して分位点推定に含める木の本数を減らすと、err
の行数は Mdl.NumTrees
より少なくなります。
例: 'Mode','cumulative'
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | 正の値の数値ベクトル
観測値の重み。'Weights'
と、size(X,1)
に等しい長さをもつ正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。分位点回帰誤差を推定するときに、quantileError
は Weights
を使用して偏差の加重平均を計算します。
既定では、quantileError
は 1
という重みを各観測値に割り当てており、これは偏差の非加重平均となります。
Quantile
— 分位確率
0.5
(既定値) | [0,1] の値が含まれている数値ベクトル
分位確率。'Quantile'
と区間 [0,1] の値が含まれている数値ベクトルから構成されるコンマ区切りのペアとして指定します。quantileError
は、Quantile
の各要素について、Quantile
内のすべての確率に対応する分位点回帰誤差を返します。
例: 'Quantile',[0 0.25 0.5 0.75 1]
データ型: single
| double
Trees
— 応答の推定に使用する木のインデックス
'all'
(既定値) | 正の整数の数値ベクトル
応答の推定に使用する木のインデックス。'Trees'
と 'all'
または正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。インデックスは Mdl.Trees
のセルに対応します。各セルにはアンサンブル内の木が格納されます。Trees
の最大値は、アンサンブル内の木の本数 (Mdl.NumTrees
) 以下でなければなりません。
'all'
の場合、quantileError
はアンサンブル内のすべての木を使用します (つまり、インデックスは 1:Mdl.NumTrees
になります)。
既定以外の値を指定すると、err
の行数が変化する可能性があります。
例: 'Trees',[1 10 Mdl.NumTrees]
データ型: char
| string
| single
| double
TreeWeights
— 各木の応答の重み
ones(Mdl.NumTrees,1)
(既定値) | 非負値の数値ベクトル
各木の応答の重み。'TreeWeights'
と numel(
個の非負値による数値ベクトルから構成されるコンマ区切りのペアとして指定します。trees
)trees
は Trees
の値です。
'Mode','individual'
を指定した場合、quantileError
は TreeWeights
を無視します。
データ型: single
| double
UseInstanceForTree
— 各観測値に対する予測に使用する木を指定するインジケーター
'all'
(既定値) | logical 行列
各観測値に対する予測に使用する木を指定するインジケーター。'UseInstanceForTree'
と n 行 Mdl.Trees
列の logical 行列から構成されるコンマ区切りのペアとして指定します。n は X
内の観測値 (行) の個数です。UseInstanceForTree
の行は観測値に、列は Mdl.Trees
内の学習器に対応します。'all'
は、分位数を推定するときにすべての観測値に対してすべての木を使用するよう指定します。
UseInstanceForTree(
= j
,k
)true
である場合、quantileError
は観測値 X(
の応答を予測するときに j
,:)Mdl.Trees(
内の木を使用します。k
)
すべてが false
値から構成されている行を指定すると、ランダム フォレストによる予測の代わりに Mdl.Y
内の応答データを直接使用して分位数を推定できます。たとえば、応答データを使用して観測値 j
の分位数を推定し、他のすべての観測値についてはランダム フォレストによる予測を使用するには、次の行列を指定します。
UseInstanceForTree = true(size(Mdl.X,2),Mdl.NumTrees); UseInstanceForTree(j,:) = false(1,Mdl.NumTrees);
既定以外の値を指定すると、err
の行数が変化する可能性があります。また、Trees
の値は UseInstanceForTree
の値に影響を与えます。UseInstanceForTree
の値が U
であるとします。quantileError
は、Trees
の指定による推定には使用されない木に対応する U
の列を無視します。つまり、quantileError
は 'UseInstanceForTree'
の値を U(:,
に再設定します。trees
)trees
は 'Trees'
の値です。
データ型: char
| string
| logical
出力引数
err
— 分位点回帰誤差の 1/2
数値スカラー | 数値行列
分位点回帰誤差の 1/2。数値スカラーまたは T
行 numel(
列の行列として返されます。tau
)tau
は Quantile
の値です。
T
は、Mode
、Trees
、UseInstanceForTree
および Quantile
の値に依存します。'Trees',
を指定し、既定値の trees
'UseInstanceForTree'
を使用するとします。
'Mode','cumulative'
の場合、err
はnumel(
行trees
)numel(
列の数値行列になります。tau
)err(
は、j
,k
)Mdl.Trees(
の学習器を使用したtrees
(1:j
))
の累積的な分位点回帰誤差です。tau
(k
)'Mode','ensemble'
の場合、err
は1
行numel(
列の数値ベクトルになります。tau
)err(
は、k
)Mdl.Trees(
の学習器を使用したtrees
)
の累積的な分位点回帰誤差です。tau
(k
)'Mode','individual'
の場合、err
はnumel(
行trees
)numel(
列の数値行列になります。tau
)err(
は、j
,k
)Mdl.Trees(
の学習器を使用したtrees
(j
))
の分位点回帰誤差です。tau
(k
)
例
標本内分位点回帰誤差の推定
carsmall
データ セットを読み込みます。与えられたエンジン排気量、重量および気筒数に対して自動車の燃費の平均を予測するモデルを考えます。Cylinders
はカテゴリカル変数であるとします。
load carsmall
Cylinders = categorical(Cylinders);
X = table(Displacement,Weight,Cylinders,MPG);
データ セット全体を使用して、バギング回帰木のアンサンブルに学習をさせます。100 個の弱学習器を指定します。
rng(1); % For reproducibility Mdl = TreeBagger(100,X,'MPG','Method','regression');
Mdl
は TreeBagger
アンサンブルです。
分位点回帰を実行し、予測された条件付き中央値を使用してアンサンブル全体の MAD を推定します。
err = quantileError(Mdl,X)
err = 1.2339
X
は応答および同等の変数名が含まれているテーブルなので、応答変数の名前またはデータを指定する必要はありません。ただし、次の構文を使用して応答を指定することができます。
err = quantileError(Mdl,X,'MPG')
err = 1.2339
分位点回帰誤差の使用による適切なアンサンブル サイズの検出
carsmall
データ セットを読み込みます。与えられたエンジン排気量、重量および気筒数に対して自動車の燃費の平均を予測するモデルを考えます。
load carsmall
X = table(Displacement,Weight,Cylinders,MPG);
データの 75% を学習セットに、25% をテスト セットに無作為に分割します。サブセットのインデックスを抽出します。
rng(1); % For reproducibility cvp = cvpartition(size(X,1),'Holdout',0.25); idxTrn = training(cvp); idxTest = test(cvp);
学習セットを使用して、バギング回帰木のアンサンブルに学習をさせます。250 個の弱学習器を指定します。
Mdl = TreeBagger(250,X(idxTrn,:),'MPG','Method','regression');
テスト セットについて、0.25、0.5 および 0.75 の累積的な分位点回帰誤差を推定します。予測子データを数値行列として、応答データをベクトルとして渡します。
err = quantileError(Mdl,X{idxTest,1:3},MPG(idxTest),'Quantile',[0.25 0.5 0.75],... 'Mode','cumulative');
err
は、累積的な分位点回帰誤差が含まれている 250 行 3 列の行列です。列は分位確率に、行はアンサンブル内の木に対応します。誤差は累積的なので、前の木から集約した予測が含まれています。Mdl
の学習にはテーブルを使用しましたが、テーブル内の予測子変数がすべて数値型である場合は、代わりに予測子データの行列を指定することができます。
同じプロットに累積的な分位数誤差をプロットします。
figure; plot(err); legend('0.25 quantile error','0.5 quantile error','0.75 quantile error'); ylabel('Quantile error'); xlabel('Tree index'); title('Cumulative Quantile Regression Error')
初めの 2 つの四分位数については約 60 本の木を使用して学習をさせれば十分であると考えられますが、3 番目の四分位数には約 150 本の木が必要です。
詳細
分位点回帰誤差
実際の予測子データと応答が与えられた場合のモデルの "分位点回帰誤差" は、加重平均絶対偏差 (MAD) です。モデルが応答を過小に予測する場合、偏差の重みは分位確率 τ になります。モデルが応答を過大に予測する場合、偏差の重みは分位確率 1 - τ になります。
つまり、τ の分位点回帰誤差は次のようになります。
yj は真の応答 j、 はモデルが予測する τ の分位数、wj は観測値の重み j です。
ヒント
アンサンブル内の木の本数を調整するには、
'Mode','cumulative'
を設定し、木のインデックスに対して分位点回帰誤差をプロットします。必要な木の最大本数は、分位点回帰誤差が横ばい状態になる木のインデックスです。学習標本が小さい場合にモデルの性能を調べるには、代わりに
oobQuantileError
を使用します。
参考文献
[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.
バージョン履歴
R2016b で導入
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)