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

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