oobQuantilePredict

Класс: TreeBagger

Прогнозы квантиля для наблюдений из сумки от мешка деревьев регрессии

Синтаксис

YFit = oobQuantilePredict(Mdl)
YFit = oobQuantilePredict(Mdl,Name,Value)
[YFit,YW] = oobQuantilePredict(___)

Описание

пример

YFit = oobQuantilePredict(Mdl) возвращает вектор медиан предсказанных ответов при всех наблюдениях из сумки в Mdl.X, данных о предикторе и использовании Mdl, который является мешком деревьев регрессии. Mdl должен быть объектом модели TreeBagger, и Mdl.OOBIndices должен быть непустым.

пример

YFit = oobQuantilePredict(Mdl,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value. Например, задайте вероятности квантиля или деревья, чтобы включать для оценки квантиля.

пример

[YFit,YW] = oobQuantilePredict(___) также возвращает разреженную матрицу весов ответа с помощью любого из предыдущих синтаксисов.

Входные параметры

развернуть все

Мешок деревьев регрессии, заданных как объект модели TreeBagger, создается TreeBagger.

  • Значением Mdl.Method должен быть regression.

  • Когда вы обучаете Mdl с помощью TreeBagger, необходимо задать пару "имя-значение" 'OOBPrediction','on'. Следовательно, TreeBagger сохраняет требуемую индексную матрицу наблюдения из сумки в Mdl.OOBIndices.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Вероятность квантиля, заданная как пара, разделенная запятой, состоящая из 'Quantile' и числового вектора, содержащего значения в интервале [0,1]. Для каждого наблюдения (строка) в Mdl.X oobQuantilePredict оценивает соответствующие квантили для всех вероятностей в Quantile.

Пример: 'Quantile',[0 0.25 0.5 0.75 1]

Типы данных: single | double

Индексы деревьев, чтобы использовать в ответ оценку, заданную как пара, разделенная запятой, состоящая из 'Trees' и 'all' или числового вектора положительных целых чисел. Индексы соответствуют ячейкам Mdl.Trees; каждая ячейка там содержит дерево в ансамбле. Максимальное значение Trees должно быть меньше чем или равно количеству деревьев в ансамбле (Mdl.NumTrees).

Для 'all' oobQuantilePredict использует индексы 1:Mdl.NumTrees.

Пример: 'Trees',[1 10 Mdl.NumTrees]

Типы данных: char | string | single | double

Веса, чтобы приписать ответам от отдельных деревьев, заданных как пара, разделенная запятой, состоящая из 'TreeWeights' и числовой вектор numel(trees) неотрицательные значения. trees является значением аргумента пары "имя-значение" Trees.

Значением по умолчанию является ones(size(trees)).

Типы данных: single | double

Выходные аргументы

развернуть все

Предполагаемые квантили для наблюдений из сумки, возвращенных как n-by-numel(tau) числовая матрица. n является количеством наблюдений в данных тренировки (numel(Mdl.Y)), и tau является значением аргумента пары "имя-значение" Quantile. Таким образом, YFit(j,k) является предполагаемой процентилью 100*tau(k) распределения ответа, данного X(j,:) и использование Mdl.

Веса ответа, возвращенные как n-by-n разреженная матрица. n является количеством ответов в данных тренировки (numel(Mdl.Y)). YW(:,j) задает веса ответа для наблюдения в Mdl.X(j,:).

oobQuantilePredict предсказывает квантили с помощью линейной интерполяции эмпирической кумулятивной функции распределения (cdf). Для конкретного наблюдения можно использовать его веса ответа, чтобы оценить квантили с помощью альтернативных методов, таких как приближение cdf использование сглаживания ядра.

Примеры

развернуть все

Загрузите набор данных carsmall. Рассмотрите модель, которая предсказывает экономию топлива (в MPG) автомобиля, учитывая его объем двигателя.

load carsmall

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

rng(1); % For reproducibility
Mdl = TreeBagger(100,Displacement,MPG,'Method','regression',...
    'OOBPrediction','on');

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

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

oobMedianMPG = oobQuantilePredict(Mdl);

oobMedianMPG является n-by-1 числовой вектор медиан, соответствующих условному распределению ответа, учитывая отсортированные наблюдения в Mdl.X. n является количеством наблюдений, size(Mdl.X,1).

Сортировка наблюдений в порядке возрастания. Постройте наблюдения и предполагаемые медианы на той же фигуре. Сравните средние и средние ответы из сумки.

[sX,idx] = sort(Mdl.X);
oobMeanMPG = oobPredict(Mdl);

figure;
plot(Displacement,MPG,'k.');
hold on
plot(sX,oobMedianMPG(idx));
plot(sX,oobMeanMPG(idx),'r--');
ylabel('Fuel economy');
xlabel('Engine displacement');
legend('Data','Out-of-bag median','Out-of-bag mean');
hold off;

Загрузите набор данных carsmall. Рассмотрите модель, которая предсказывает экономию топлива автомобиля (в MPG), учитывая его объем двигателя.

load carsmall

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

rng(1); % For reproducibility
Mdl = TreeBagger(100,Displacement,MPG,'Method','regression',...
    'OOBPrediction','on');

Выполните регрессию квантиля, чтобы предсказать процентили на 97,5% и на 2,5% из сумки.

oobQuantPredInts = oobQuantilePredict(Mdl,'Quantile',[0.025,0.975]);

oobQuantPredInts является n-by-2 числовая матрица интервалов прогноза, соответствующих наблюдениям из сумки в Mdl.X. n является количеством наблюдений, size(Mdl.X,1). Первый столбец содержит процентили на 2,5%, и второй столбец содержит процентили на 97,5%.

Постройте наблюдения и предполагаемые медианы на той же фигуре. Сравните интервалы прогноза процентили и 95% интервалов прогноза, приняв, что условное распределение MPG является Гауссовым.

[oobMeanMPG,oobSTEMeanMPG] = oobPredict(Mdl);
STDNPredInts = oobMeanMPG + [-1 1]*norminv(0.975).*oobSTEMeanMPG;
[sX,idx] = sort(Mdl.X);

figure;
h1 = plot(Displacement,MPG,'k.');
hold on
h2 = plot(sX,oobQuantPredInts(idx,:),'b');
h3 = plot(sX,STDNPredInts(idx,:),'r--');
ylabel('Fuel economy');
xlabel('Engine displacement');
legend([h1,h2(1),h3(1)],{'Data','95% percentile prediction intervals',...
    '95% Gaussian prediction intervals'});
hold off;

Загрузите набор данных carsmall. Рассмотрите модель, которая предсказывает экономию топлива автомобиля (в MPG), учитывая его объем двигателя.

load carsmall

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

rng(1); % For reproducibility
Mdl = TreeBagger(100,Displacement,MPG,'Method','regression',...
    'OOBPrediction','on');

Оцените веса ответа из сумки.

[~,YW] = oobQuantilePredict(Mdl);

YW является n на n разреженной матрицей, содержащей веса ответа. n является количеством учебных наблюдений, numel(Y). Веса ответа для наблюдения в Mdl.X(j,:) находятся в YW(:,j). Веса ответа независимы от любых заданных вероятностей квантиля.

Оцените условную кумулятивную функцию распределения из сумки (ccdf) ответов:

  1. Сортировка ответов является порядком по возрастанию и затем сортировкой весов ответа с помощью индексов, вызванных путем сортировки ответов.

  2. Вычисление совокупных сумм по каждому столбцу отсортированных весов ответа.

[sortY,sortIdx] = sort(Mdl.Y);
cpdf = full(YW(sortIdx,:));
ccdf = cumsum(cpdf);

ccdf(:,j) является эмпирическим ccdf из сумки ответа, учитывая наблюдение j.

Выберите случайную выборку четырех учебных наблюдений. Постройте учебную выборку и идентифицируйте выбранные наблюдения.

[randX,idx] = datasample(Mdl.X,4);
figure;
plot(Mdl.X,Mdl.Y,'o');
hold on
plot(randX,Mdl.Y(idx),'*','MarkerSize',10);
text(randX-10,Mdl.Y(idx)+1.5,{'obs. 1' 'obs. 2' 'obs. 3' 'obs. 4'});
legend('Training Data','Chosen Observations');
xlabel('Engine displacement')
ylabel('Fuel economy')
hold off

Постройте ccdf из сумки для четырех выбранных ответов в той же фигуре.

figure;
plot(sortY,ccdf(:,idx));
legend('ccdf given obs. 1','ccdf given obs. 2',...
    'ccdf given obs. 3','ccdf given obs. 4',...
    'Location','SouthEast')
title('Out-of-Bag Conditional Cumulative Distribution Functions')
xlabel('Fuel economy')
ylabel('Empirical CDF')

Больше о

развернуть все

Алгоритмы

oobQuantilePredict оценивает квантили из сумки путем применения quantilePredict ко всем наблюдениям в данных тренировки (Mdl.X). Для каждого наблюдения метод использует только деревья, для которых наблюдение из сумки.

Для наблюдений, которые в сумке для всех деревьев в ансамбле, oobQuantilePredict присваивает демонстрационный квантиль данных об ответе. Другими словами, oobQuantilePredict не использует регрессию квантиля для наблюдений из сумки. Вместо этого это присваивает quantile(Mdl.Y,tau), где tau является значением аргумента пары "имя-значение" Quantile.

Ссылки

[1] Meinshausen, N. “Леса Регрессии квантиля”. Журнал Исследования Машинного обучения, Издания 7, 2006, стр 983–999.

[2] Бреимен, L. “Случайные Леса”. Машинное обучение. Издание 45, 2001, стр 5–32.

Введенный в R2017b

Для просмотра документации необходимо авторизоваться на сайте