exponenta event banner

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

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

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

Создание 2000 наблюдений на основе модели

yt = 0,5 + t + αt.

t равномерно распределяется между 0 и 1, и εt∼N (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 чем от сглаживания ядра.

См. также

| | |

Связанные темы