quantilePredict

Класс: TreeBagger

Спрогнозируйте количество отклика с помощью сумки регрессионых деревьев

Описание

пример

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 - имя аргумента и 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' и числовой вектор числа (trees) неотрицательные значения. trees - значение Trees аргумент пары "имя-значение".

По умолчанию это таковые (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;

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Data, Median, Mean.

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

load carsmall

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

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

Выполните регрессию квантования, чтобы предсказать 2,5% и 97,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;

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Data, 95% percentile prediction intervals, 95% Gaussian prediction intervals.

Загрузите 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

Figure contains an axes. The axes contains 6 objects of type line, text. These objects represent Training Data, Chosen Observations.

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')

Figure contains an axes. The axes with title Conditional Cumulative Distribution Functions contains 4 objects of type line. These objects represent 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.

Подробнее о

расширить все

Совет

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 = <reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2>, obs к учебному наблюдению j (сохраненный в Mdl. X (j,:) и Mdl.Y (j)). btj количество наблюдений, j находится в выборке bootstrap для древовидных 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, дерево vtj*Деревья, не выбранные для предсказания, имеют вес 0.

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

      utj={wtj,tree;если xkSt(xj)0;иначе.

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

      uj=t=1Tutj.

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

      wj=ujj=1nuj.

Ссылки

[1] Breiman, L. «Random Forests». Машинное обучение 45, стр. 5-32, 2001.

[2] Meinshausen, N. «Quantle Regression Forests». Journal of Машинное Обучение Research, Vol. 7, 2006, pp. 983-999.

Введенный в R2016b