Условная оценка квантиля с использованием сглаживания ядра

Этот пример показывает, как оценить условные квантования отклика данных предиктора с помощью случайного леса квантилей и путем оценки функции условного распределения отклика с помощью сглаживания ядра.

Для скорости оценки величины, quantilePredict, oobQuantilePredict, quantileError, и oobQuantileError используйте линейную интерполяцию, чтобы предсказать квантования в условном распределении отклика. Однако можно получить веса отклика, которые состоят из функции распределения, и затем передать их в ksdensity чтобы, возможно, получить точность за счет расчета скорости.

Сгенерируйте 2000 наблюдений из модели

yt=0.5+t+εt.

t равномерно распределена между 0 и 1, и εtN(0,t2/2+0.01). Сохраните данные в таблице.

n = 2000;
rng('default'); % For reproducibility
t = randsample(linspace(0,1,1e2),n,true)';
epsilon = randn(n,1).*sqrt(t.^2/2 + 0.01);
y = 0.5 + t + epsilon;

Tbl = table(t,y);

Обучите ансамбль мешанных регрессионных деревьев, используя весь набор данных. Укажите 200 слабых учащихся и сохраните индексы вне сумки.

rng('default'); % For reproducibility
Mdl = TreeBagger(200,Tbl,'y','Method','regression',...
    'OOBPrediction','on');

Mdl является TreeBagger ансамбль.

Предсказание вне мешка, условных 0,05 и 0,95 квантилей (90% доверительные интервалы) для всех наблюдений обучающей выборки с помощью oobQuantilePredict, то есть путем интерполяции. Запросите веса ответов. Запись времени выполнения.

tau = [0.05 0.95];
tic
[quantInterp,yw] = oobQuantilePredict(Mdl,'Quantile',tau);
timeInterp = toc;

quantInterp - матрица 94 на 2 предсказанных квантилей; строки соответствуют наблюдениям в Mdl.X и столбцы соответствуют вероятностям квантования в tau. yw представляет собой 94 на 94 разреженную матрицу весов отклика; строки соответствуют обучающим выборочным наблюдениям, а столбцы соответствуют наблюдениям в Mdl.X. Веса отклика не зависят от tau.

Предсказать вне мешка, условные 0.05 и 0.95 квантилей с помощью сглаживания ядра и записать время выполнения.

n = numel(Tbl.y);
quantKS = zeros(n,numel(tau)); % Preallocation

tic
for j = 1:n
    quantKS(j,:) = ksdensity(Tbl.y,tau,'Function','icdf','Weights',yw(:,j));
end
timeKS = toc;

quantKS соизмеримо с quantInterp.

Оцените отношение времен выполнения между оценкой сглаживания ядра и интерполяцией.

timeKS/timeInterp
ans = 8.6905

Для выполнения сглаживания ядра требуется гораздо больше времени, чем для интерполяции. Это соотношение зависит от памяти вашей машины, поэтому ваши результаты будут варьироваться.

Постройте график данных с обоими наборами предсказанных квантилей.

[sT,idx] = sort(t);

figure;
h1 = plot(t,y,'.');
hold on
h2 = plot(sT,quantInterp(idx,:),'b');
h3 = plot(sT,quantKS(idx,:),'r');
legend([h1 h2(1) h3(1)],'Data','Interpolation','Kernel Smoothing');
title('Quantile Estimates')
hold off

Figure contains an axes. The axes with title Quantile Estimates contains 5 objects of type line. These objects represent Data, Interpolation, Kernel Smoothing.

Оба набора предполагаемых количеств согласуются довольно хорошо. Однако интервалы квантиля от интерполяции кажутся немного более плотными для меньших значений t чем таковые от сглаживания ядра.

См. также

| | |

Похожие темы