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

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

Для скорости оценки квантиля, 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 = 18.2311

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

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

[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 чем те от сглаживания ядра.

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

| | |

Похожие темы