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 не должен соответствовать порядку следования столбцов Tbltbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдения, и т.д.), но quantilePredict игнорирует их.

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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).

\forall, quantilePredict использует индексы 1:Mdl.NumTrees.

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

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

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

Значением по умолчанию являются единицы (размер (trees)).

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

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

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

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

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

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

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

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

Предполагаемые квантили, возвращенные как n- numel (tau) числовая матрица. n количество наблюдений в X (size(X,1)) и tau значение Quantile. Таким образом, YFit (jK) предполагаемое 100*tauK)% процентиль распределения ответа, учитывая 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- 1 числовой вектор из медиан, соответствующих условному распределению ответа, учитывая отсортированные наблюдения в DisplacementN количество наблюдений в 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 object. The axes object 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');

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

Figure contains an axes object. The axes object 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 object. The axes object contains 6 objects of type line, text. These objects represent Training Data, Chosen Observations.

YW n- 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 object. The axes object 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 = 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*Деревья, не выбранные для предсказания, имеют 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] Бреимен, L. "Случайные Леса". Машинное обучение 45, стр 5–32, 2001.

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

Введенный в R2017b