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

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

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

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

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 = 26.3514

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

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

[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

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

Смотрите также

| | |

Похожие темы