Main Content

oobQuantilePredict

回帰の bag of trees による out-of-bag 観測値の分位数予測

説明

YFit = oobQuantilePredict(Mdl) は、回帰の bag of trees である Mdl を使用して、予測子データ Mdl.X 内のすべての out-of-bag 観測値で予測された応答の中央値のベクトルを返します。MdlTreeBagger モデル オブジェクトでなければならず、Mdl.OOBIndices を空にすることはできません。

YFit = oobQuantilePredict(Mdl,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。たとえば、分位確率や、分位推定に含める木を指定します。

[YFit,YW] = oobQuantilePredict(___) は、前の構文のいずれかを使用して、応答の重みのスパース行列も返します。

入力引数

すべて展開する

回帰の bag of trees。関数 TreeBagger によって作成された TreeBagger モデル オブジェクトとして指定します。

  • Mdl.Method の値は regression でなければなりません。

  • 関数 TreeBagger を使用して Mdl に学習させる場合、名前と値のペア 'OOBPrediction','on' を指定しなければなりません。このようにすると、必要な out-of-bag 観測値のインデックスの行列が TreeBagger によって Mdl.OOBIndices に格納されます。

名前と値の引数

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

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

分位確率。'Quantile' と区間 [0,1] の値が含まれている数値ベクトルから構成されるコンマ区切りのペアとして指定します。oobQuantilePredict は、Mdl.X の各観測値 (行) について、Quantile 内のすべての確率に対応する分位数を推定します。

例: 'Quantile',[0 0.25 0.5 0.75 1]

データ型: single | double

応答の推定に使用する木のインデックス。'Trees''all' または正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。インデックスは Mdl.Trees のセルに対応します。各セルにはアンサンブル内の木が格納されます。Trees の最大値は、アンサンブル内の木の本数 (Mdl.NumTrees) 以下でなければなりません。

'all' の場合、oobQuantilePredict はインデックスとして 1:Mdl.NumTrees を使用します。

例: 'Trees',[1 10 Mdl.NumTrees]

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

各木の応答の重み。'TreeWeights'numel(trees) 個の非負値による数値ベクトルから構成されるコンマ区切りのペアとして指定します。trees は名前と値のペアの引数 Trees の値です。

既定の設定は、ones(size(trees)) です。

データ型: single | double

出力引数

すべて展開する

out-of-bag 観測値に対して推定された分位数。nnumel(tau) 列の数値行列として返されます。n は学習データ内の観測値の個数 (numel(Mdl.Y))、tau は名前と値のペアの引数 Quantile の値です。つまり YFit(j,k) は、与えられた X(j,:) に対して Mdl を使用して推定した応答分布の 100*tau(k) の百分位数です。

応答の重み。n 行 n 列のスパース行列として返されます。n は学習データ内の応答の個数 (numel(Mdl.Y)) です。YW(:,j) は、Mdl.X(j,:) の観測値について応答の重みを指定します。

oobQuantilePredict は、経験的累積分布関数 (CDF) の線形内挿を使用して分位数を予測します。特定の観測値について、別の方法 (カーネル平滑化を使用した CDF の近似など) によって分位数を推定するために応答の重みを使用できます。

すべて展開する

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

load carsmall

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

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

MdlTreeBagger アンサンブルです。

分位点回帰を実行して、すべての学習観測値について燃費の out-of-bag 中央値を予測します。

oobMedianMPG = oobQuantilePredict(Mdl);

oobMedianMPG は、並べ替えられた Mdl.X 内の観測値が与えられた場合の応答の条件付き分布に対応する中央値が含まれている n 行 1 列の数値ベクトルです。n は観測値の個数 (size(Mdl.X,1)) です。

観測値を昇順に並べ替えます。同じ Figure に観測値と推定された中央値をプロットします。out-of-bag 中央値および平均応答を比較します。

[sX,idx] = sort(Mdl.X);
oobMeanMPG = oobPredict(Mdl);

figure;
plot(Displacement,MPG,'k.');
hold on
plot(sX,oobMedianMPG(idx));
plot(sX,oobMeanMPG(idx),'r--');
ylabel('Fuel economy');
xlabel('Engine displacement');
legend('Data','Out-of-bag median','Out-of-bag mean');
hold off;

Figure contains an axes object. The axes object with xlabel Engine displacement, ylabel Fuel economy contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Out-of-bag median, Out-of-bag mean.

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

load carsmall

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

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

分位点回帰を実行して、out-of-bag の 2.5% および 97.5% 百分位数を予測します。

oobQuantPredInts = oobQuantilePredict(Mdl,'Quantile',[0.025,0.975]);

oobQuantPredInts は、Mdl.X 内の out-of-bag 観測値に対応する予測区間が含まれている n 行 2 列の数値行列です。n は観測値の個数 (size(Mdl.X,1)) です。1 列目には 2.5% 百分位数が、2 列目には 97.5% 百分位数が含まれています。

同じ Figure に観測値と推定された中央値をプロットします。MPG の条件付き分布がガウス分布であると仮定して、百分位数の予測区間と 95% の予測区間を比較します。

[oobMeanMPG,oobSTEMeanMPG] = oobPredict(Mdl);
STDNPredInts = oobMeanMPG + [-1 1]*norminv(0.975).*oobSTEMeanMPG;
[sX,idx] = sort(Mdl.X);

figure;
h1 = plot(Displacement,MPG,'k.');
hold on
h2 = plot(sX,oobQuantPredInts(idx,:),'b');
h3 = plot(sX,STDNPredInts(idx,:),'r--');
ylabel('Fuel economy');
xlabel('Engine displacement');
legend([h1,h2(1),h3(1)],{'Data','95% percentile prediction intervals',...
    '95% Gaussian prediction intervals'});
hold off;

Figure contains an axes object. The axes object with xlabel Engine displacement, ylabel Fuel economy contains 5 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, 95% percentile prediction intervals, 95% Gaussian prediction intervals.

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

load carsmall

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

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

out-of-bag の応答の重みを推定します。

[~,YW] = oobQuantilePredict(Mdl);

YW は、応答の重みが含まれている n 行 n 列のスパース行列です。n は学習観測値の個数 numel(Y) です。Mdl.X(j,:) の観測値に対する応答の重みは YW(:,j) にあります。応答の重みは、指定された分位確率に依存しません。

以下により、応答の out-of-bag 条件付き累積分布関数 (CCDF) を推定します。

  1. 応答を昇順にソートし、さらにそれによって導かれたインデックスを使用して応答の重みをソートします。

  2. 並べ替えられた応答の重みの各列に対する累積和を計算します。

[sortY,sortIdx] = sort(Mdl.Y);
cpdf = full(YW(sortIdx,:));
ccdf = cumsum(cpdf);

ccdf(:,j) は、与えられた観測値 j に対する応答の経験的 out-of-bag CCDF です。

4 つの学習観測値の無作為標本を選択します。学習標本をプロットし、選択された観測値を特定します。

[randX,idx] = datasample(Mdl.X,4);
figure;
plot(Mdl.X,Mdl.Y,'o');
hold on
plot(randX,Mdl.Y(idx),'*','MarkerSize',10);
text(randX-10,Mdl.Y(idx)+1.5,{'obs. 1' 'obs. 2' 'obs. 3' 'obs. 4'});
legend('Training Data','Chosen Observations');
xlabel('Engine displacement')
ylabel('Fuel economy')
hold off

Figure contains an axes object. The axes object with xlabel Engine displacement, ylabel Fuel economy contains 6 objects of type line, text. One or more of the lines displays its values using only markers These objects represent Training Data, Chosen Observations.

選択された 4 つの応答の out-of-bag CCDF を同じ Figure にプロットします。

figure;
plot(sortY,ccdf(:,idx));
legend('ccdf given obs. 1','ccdf given obs. 2',...
    'ccdf given obs. 3','ccdf given obs. 4',...
    'Location','SouthEast')
title('Out-of-Bag Conditional Cumulative Distribution Functions')
xlabel('Fuel economy')
ylabel('Empirical CDF')

Figure contains an axes object. The axes object with title Out-of-Bag Conditional Cumulative Distribution Functions, xlabel Fuel economy, ylabel Empirical CDF contains 4 objects of type line. These objects represent ccdf given obs. 1, ccdf given obs. 2, ccdf given obs. 3, ccdf given obs. 4.

詳細

すべて展開する

アルゴリズム

oobQuantilePredict は、学習データ (Mdl.X) 内のすべての観測値に quantilePredict を適用することにより out-of-bag 分位数を推定します。各観測値について、その観測値が out-of-bag である木のみが使用されます。

アンサンブル内のすべての木に対して in-bag になっている観測値について、oobQuantilePredict は応答データの標本分位数を割り当てます。つまり、oobQuantilePredict は out-of-bag 観測値には分位点回帰を使用しません。代わりに、quantile(Mdl.Y,tau) を割り当てます。tau は名前と値のペアの引数 Quantile の値です。

参考文献

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

[2] Breiman, L. “Random Forests.” Machine Learning. Vol. 45, 2001, pp. 5–32.

バージョン履歴

R2016b で導入