quantilePredict

Класс: TreeBagger

Предскажите квантиль ответа с помощью мешка деревьев регрессии

Синтаксис

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

Описание

пример

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

пример

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

пример

[YFit,YW] = quantilePredict(___) также возвращает разреженную матрицу весов ответа.

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

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

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

Данные о предикторе раньше оценивали квантили, заданные как числовая матрица или таблица.

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные, составляющие столбцы X, должны иметь тот же порядок как переменные прогноза, которые обучили Mdl.

    • Если вы обучили Mdl с помощью таблицы (например, Tbl), то X может быть числовой матрицей, если Tbl содержит все числовые переменные прогноза. Если Tbl содержит неоднородные переменные прогноза (например, типы числовых и категориальных данных), и X является числовой матрицей, то quantilePredict выдает ошибку.

  • Для таблицы:

    • quantilePredict не поддерживает многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов.

    • Если бы вы обучили Mdl с помощью таблицы (например, Tbl), то все переменные прогноза в X должны иметь те же имена переменных и типы данных как те переменные, которые обучили Mdl (сохраненный в Mdl.PredictorNames). Однако порядок следования столбцов X не должен соответствовать порядку следования столбцов Tbl. Tbl и X могут содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но quantilePredict игнорирует их.

    • Если бы вы обучили Mdl с помощью числовой матрицы, то имена предиктора в Mdl.PredictorNames и соответствующие имена переменной прогноза в X должны быть тем же самым. Чтобы задать имена предиктора во время обучения, смотрите аргумент пары "имя-значение" PredictorNames TreeBagger. Все переменные прогноза в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но quantilePredict игнорирует их.

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

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

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

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

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

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

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

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

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

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

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

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

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

Индикаторы, задающие, который деревья использовать, чтобы сделать прогнозы для каждого наблюдения, заданного как пара, разделенная запятой, состоящая из 'UseInstanceForTree' и n-by-Mdl.Trees логическая матрица. n является количеством наблюдений (строки) в X. Строки UseInstanceForTree соответствуют наблюдениям, и столбцы соответствуют ученикам в Mdl.Trees. 'all' указывает, чтобы использовать все деревья для всех наблюдений при оценке квантилей.

Если UseInstanceForTree(j,k) = true, то quantilePredict использует дерево в Mdl.Trees(trees(k)), когда это предсказывает ответ для наблюдения X(j,:).

Можно оценить квантиль с помощью данных об ответе в Mdl.Y непосредственно вместо того, чтобы использовать прогнозы от случайного леса путем определения строки, состоявшей полностью из значений false. Например, чтобы оценить квантиль для наблюдения j с помощью данных об ответе и использовать прогнозы от случайного леса для всех других наблюдений, задают эту матрицу:

UseInstanceForTree = true(size(Mdl.X,2),Mdl.NumTrees);
UseInstanceForTree(j,:) = false(1,Mdl.NumTrees);

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

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

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

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

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

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

Примечание

quantilePredict выводит веса ответа путем передачи наблюдения через деревья в ансамбле. Если вы задаете UseInstanceForTree, и вы составляете строку j полностью значений false, то YW(:,j) = Mdl.W вместо этого, то есть, веса наблюдения.

Примеры

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

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

load carsmall

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

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

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

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

medianMPG = quantilePredict(Mdl,sort(Displacement));

medianMPG является n-by-1 числовой вектор медиан, соответствующих условному распределению ответа, учитывая отсортированные наблюдения в Displacement. n является количеством наблюдений в Displacement.

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

meanMPG = predict(Mdl,sort(Displacement));

figure;
plot(Displacement,MPG,'k.');
hold on
plot(sort(Displacement),medianMPG);
plot(sort(Displacement),meanMPG,'r--');
ylabel('Fuel economy');
xlabel('Engine displacement');
legend('Data','Median','Mean');
hold off;

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

load carsmall

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

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

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

predX = linspace(min(Displacement),max(Displacement),10)';
quantPredInts = quantilePredict(Mdl,predX,'Quantile',[0.025,0.975]);

quantPredInts является 10 2 числовой матрицей интервалов прогноза, соответствующих наблюдениям в predX. Первый столбец содержит процентили на 2,5%, и второй столбец содержит процентили на 97,5%.

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

[meanMPG,steMeanMPG] = predict(Mdl,predX);
stndPredInts = meanMPG + [-1 1]*norminv(0.975).*steMeanMPG;

figure;
h1 = plot(Displacement,MPG,'k.');
hold on
h2 = plot(predX,quantPredInts,'b');
h3 = plot(predX,stndPredInts,'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. Рассмотрите модель, которая предсказывает экономию топлива автомобиля, учитывая его объем двигателя.

load carsmall

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

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

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

[predX,idx] = datasample(Mdl.X,4);
[~,YW] = quantilePredict(Mdl,predX);
n = numel(Mdl.Y);

figure;
plot(Mdl.X,Mdl.Y,'o');
hold on
plot(predX,Mdl.Y(idx),'*','MarkerSize',10);
text(predX-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

YW является n-by-4 разреженная матрица, содержащая веса ответа. Столбцы соответствуют тестовым наблюдениям, и строки соответствуют ответам в учебной выборке. Веса ответа независимы от заданной вероятности квантиля.

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

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

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

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

ccdf(:,j) является эмпирическим C.C.D.F. ответа, данного тестовое наблюдение j.

Постройте четыре эмпирических C.C.D.F. в той же фигуре.

figure;
plot(sortY,ccdf);
legend('C.C.D.F. given test obs. 1','C.C.D.F. given test obs. 2',...
    'C.C.D.F. given test obs. 3','C.C.D.F. given test obs. 4',...
    'Location','SouthEast')
title('Conditional Cumulative Distribution Functions')
xlabel('Fuel economy')
ylabel('Empirical CDF')

Больше о

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

Советы

quantilePredict оценивает условное распределение ответа с помощью данных тренировки каждый раз, когда вы вызываете его. Чтобы предсказать много квантилей эффективно или квантили для многих наблюдений эффективно, необходимо передать X как матрицу или таблицу наблюдений и задать все квантили в векторе с помощью аргумента пары "имя-значение" Quantile. Таким образом, постарайтесь не вызывать quantilePredict в цикле.

Алгоритмы

  • TreeBagger выращивает случайный лес деревьев регрессии с помощью данных тренировки. Затем чтобы реализовать квантиль случайный лес, quantilePredict предсказывает квантили с помощью эмпирического условного распределения ответа, учитывая наблюдение от переменных прогноза. Получить эмпирическое условное распределение ответа:

    1. quantilePredict передает все учебные наблюдения в Mdl.X через все деревья в ансамбле и хранит вершины, которых учебные наблюдения являются членами.

    2. quantilePredict так же передает каждое наблюдение в X через все деревья в ансамбле.

    3. Для каждого наблюдения в X, quantilePredict:

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

      2. Для наблюдения k в X, агрегировал условные распределения для целого ансамбля:

        F^(y|X=xk)=j=1nt=1T1Twtj(xk)I{Yjy}.

        n является количеством учебных наблюдений (size(Y,1)), и T является количеством деревьев в ансамбле (Mdl.NumTrees).

    4. Для наблюдения k в X квантиль τ или, эквивалентно, 100τ процентиль %, Qτ(xk)=inf{y:F^(y|X=xk)τ}.

  • Этот процесс описывает, как quantilePredict использует все заданные веса.

    1. Для всех учебных наблюдений j = 1..., n и все выбранные деревья t = 1..., T,

      quantilePredict приписывает продукт vtj = btj w j, obs к учебному наблюдению j (сохраненный в Mdl.X(j,:) и Mdl.Y(j)). btj является наблюдением числа раз, j находится в выборке начальной загрузки для древовидного t. w j, obs является весом наблюдения в Mdl.W(j).

    2. Для каждого выбранного дерева quantilePredict идентифицирует листы, в которых падает каждое учебное наблюдение. Позвольте St (xj) быть набором всех наблюдений, содержавшихся в листе древовидного t, которого наблюдения j является членом.

    3. Для каждого выбранного дерева quantilePredict нормирует все веса в конкретном листе, чтобы суммировать к 1, то есть,

      vtj=vtjiSt(xj)vti.

    4. Для каждого учебного наблюдения и дерева, quantilePredict включает древовидные веса (w t, дерево) заданный TreeWeights, то есть, w *tj, дерево =, w t, treevtj*Trees не выбранный для прогноза имеет 0 весов.

    5. Для всех тестовых наблюдений k = 1..., K в X и всех выбранных деревьях t = 1..., T quantilePredict предсказывает уникальные листы, в которых падают наблюдения, и затем идентифицирует все учебные наблюдения в предсказанных листах. quantilePredict приписывает вес utj, таким образом что

      utj={wtj,дерево; if xkSt(xj)0; otherwise.

    6. quantilePredict суммирует веса по всем выбранным деревьям, то есть,

      uj=t=1Tutj.

    7. quantilePredict создает веса ответа путем нормализации весов так, чтобы они суммировали к 1, то есть,

      wj=ujj=1nuj.

Ссылки

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

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

Введенный в R2017b

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