使用核平滑的条件分位数估计
这个例子展示了如何使用分位数随机森林估计一个预测器数据的响应的条件分位数,并使用核平滑估计响应的条件分布函数。
对于分位数估计速度,quantilePredict
,oobQuantilePredict
,quantileError
,oobQuantileError
使用线性插值来预测响应的条件分布中的分位数。但是,您可以获得组成分布函数的响应权重,然后将它们传递给ksdensity
可能以计算速度为代价来获得精度。
从模型中生成2000个观测值
在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)],“数据”,“插值”,内核平滑的);标题(分位数估计的)举行从
这两组估计的分位数相当吻合。但是,对于较小的值,插值的分位数间隔显得略紧t
比用核平滑法得到的结果好。
另请参阅
oobQuantilePredict
|TreeBagger
|ksdensity