exponenta event banner

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' и числовой вектор 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около-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-по-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-на-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=1n∑t=1T1Twtj (xk) I{Yj≤y}.

        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 = btjwj, obs обучающему наблюдению j (хранится вMdl.X(j,:) и Mdl.Y(j)). btj - количество раз, когда наблюдение j находится в выборке начальной загрузки для дерева t.wj, obs - вес наблюдения вMdl.W(j).

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

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

      vtj∗=vtj∑i∈St (xj) вти.

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

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

      utj={wtj,tree∗; если xk∈St (xj) 0; в противном случае.

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

      uj=∑t=1Tutj.

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

      wj∗=uj∑j=1nuj.

Ссылки

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

[2] Мейнсхаузен, Н. «Квантильные регрессионные леса». Журнал исследований машинного обучения, том 7, 2006, стр. 983-999.

Представлен в R2016b