主要内容

使用核平滑的条件分位数估计

这个例子展示了如何使用分位数随机森林估计一个预测器数据的响应的条件分位数,并使用核平滑估计响应的条件分布函数。

对于分位数估计速度,quantilePredictoobQuantilePredictquantileError,oobQuantileError使用线性插值来预测响应的条件分布中的分位数。但是,您可以获得组成分布函数的响应权重,然后将它们传递给ksdensity可能以计算速度为代价来获得精度。

从模型中生成2000个观测值

y t 0 5 + t + ε t

t 在0和1之间均匀分布,和 ε t N 0 t 2 / 2 + 0 0 1 .将数据存储在表中。

N = 2000;rng (“默认”);%用于再现性T = randsample(linspace(0,1,1e2),n,true)';= randn(n,1) *√(t。^2/2 + 0.01);Y = 0.5 + t +;Tbl = table(t,y);

使用整个数据集训练袋装回归树的集合。指定200个弱学习器并保存out-of-bag索引。

rng (“默认”);%用于再现性Mdl = TreeBagger(200,Tbl,“y”“方法”“回归”...“OOBPrediction”“上”);

Mdl是一个TreeBagger合奏。

预测所有训练样本观测值的袋外、条件0.05和0.95分位数(90%置信区间)oobQuantilePredict,即通过插值。请求响应权重。记录执行时间。

Tau = [0.05 0.95];tic [quantInterp,yw] = oobQuantilePredict(Mdl,分位数的,τ);timeInterp = toc;

quantInterp是一个94 × 2的预测分位数矩阵;行对应于Mdl。X列对应的是分位数概率τyw是一个94 × 94的响应权重稀疏矩阵;行对应训练样本的观测值,列对应中的观测值Mdl。X.响应权重是独立的τ

使用核平滑预测袋外、条件0.05和0.95分位数,并记录执行时间。

n =数字(Tbl.y);quantKS = 0 (n,数字(tau));%预先配置抽搐j = 1:n quantKS(j,:) = ksdensity(Tbl.y,tau,“函数”“icdf”“重量”yw (:, j));结束timeKS = toc;

quantKS是相称的quantInterp

计算核平滑估计和插值之间的执行时间之比。

timeKS / timeInterp
Ans = 3.3005

执行内核平滑比内插花费更多的时间。这个比率取决于您机器的内存,因此结果会有所不同。

用两组预测分位数绘制数据。

[sT,idx] =排序(t);图;H1 = plot(t,y,“。”);持有h2 = plot(sT,quantInterp(idx,:),“b”);h3 = plot(sT,quantKS(idx,:),“r”);图例([h1 h2(1) h3(1)],“数据”“插值”内核平滑的);标题(分位数估计的)举行

图中包含一个轴对象。标题为Quantile Estimates的axes对象包含5个类型为line的对象。这些对象表示数据,插值,核平滑。

这两组估计的分位数相当吻合。但是,对于较小的值,插值的分位数间隔显得略紧t比用核平滑法得到的结果好。

另请参阅

||

相关的话题