Main Content

oobQuantilePredict

クラス:TreeBagger

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

説明

YFit= oobQuantilePredict(Mdl)は、回帰の bag of trees であるMdlを使用して、予測子データMdl.X内のすべての——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

出力引数

すべて展開する

——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) を予測するモデルを考えます。

loadcarsmall

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

rng(1);% For reproducibilityMdl = 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)) です。

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

[sX,idx] = sort(Mdl.X); oobMeanMPG = oobPredict(Mdl); figure; plot(Displacement,MPG,'k.'); holdonplot(sX,oobMedianMPG(idx)); plot(sX,oobMeanMPG(idx),'r--'); ylabel('Fuel economy'); xlabel('Engine displacement'); legend('Data','Out-of-bag median','Out-of-bag mean'); holdoff;

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Data, Out-of-bag median, Out-of-bag mean.

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

loadcarsmall

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

rng(1);% For reproducibilityMdl = 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% 百分位数が含まれています。

同图にじ観測値と推定された中央値をプロットします。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.'); holdonh2 = 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'}); holdoff;

Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent Data, 95% percentile prediction intervals, 95% Gaussian prediction intervals.

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

loadcarsmall

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

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

——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'); holdonplot(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') holdoff

Figure contains an axes object. The axes object contains 6 objects of type line, text. 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 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 で導入