quantileError

Класс: TreeBagger

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

Синтаксис

err = quantileError(Mdl,X)
err = quantileError(Mdl,X,ResponseVarName)
err = quantileError(Mdl,X,Y)
err = quantileError(___,Name,Value)

Описание

пример

err = quantileError(Mdl,X) возвращает половину среднего абсолютного отклонения (MAD) в сравнение истинных ответов в таблице X к предсказанным медианам, следующим из применения мешка деревьев регрессии Mdl к наблюдениям за данными о предикторе в X.

  • Mdl должен быть объектом модели TreeBagger.

  • Имя переменной отклика в X должно иметь то же имя как переменная отклика в таблице, содержащей данные тренировки.

пример

err = quantileError(Mdl,X,ResponseVarName) использует истинный ответ и переменные прогноза, содержавшиеся в таблице X. ResponseVarName является именем переменной отклика, и Mdl.PredictorNames содержат имена переменных прогноза.

пример

err = quantileError(Mdl,X,Y) использует данные о предикторе в таблице или матричном X и данные об ответе в векторном Y.

пример

err = quantileError(___,Name,Value) использование любой из предыдущих синтаксисов и дополнительных опций задано одним или несколькими аргументами пары Name,Value. Например, задайте вероятности квантиля, ошибочный тип, или который деревья включать в оценку погрешности регрессии квантиля.

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

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

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

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

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

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

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

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

    • Задайте Y для истинных ответов.

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

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

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

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

    • Если X содержит переменную отклика:

      • Если переменная отклика имеет то же имя как переменная отклика, которая обучила Mdl, то вы не должны предоставлять имя переменной отклика или вектор истинных ответов. использование quantileError, что переменная для истинных ответов по умолчанию.

      • Можно задать ResponseVarName или Y для истинных ответов.

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

Имя переменной отклика, заданное как вектор символов или скаляр строки. ResponseVarName должен быть именем переменной отклика в таблице выборочных данных X.

Если таблица X содержит переменную отклика, и это имеет то же имя как переменная отклика, используемая, чтобы обучить Mdl, то вы не должны задавать ResponseVarName. использование quantileError, что переменная для истинных ответов по умолчанию.

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

Истинные ответы, заданные как числовой вектор. Количество строк в X должно быть равно длине Y.

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

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

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

Ошибочный тип ансамбля, заданный как пара, разделенная запятой, состоящая из 'Mode' и значения в этой таблице. Предположим, что tau является значением Quantile.

ЗначениеОписание
'cumulative'

err является Mdl.NumTrees-by-numel(tau) числовая матрица совокупных ошибок регрессии квантиля. err(j,k) является ошибкой регрессии квантиля tau(k) ученики в Mdl.Trees(1:j) только.

'ensemble'

err является 1 numel(tau) числовым вектором совокупных ошибок регрессии квантиля для целого ансамбля. err(k) является ошибкой регрессии квантиля ансамбля tau(k).

'individual'

err является Mdl.NumTrees-by-numel(tau) числовая матрица ошибок регрессии квантиля от отдельных учеников. err(j,k) является ошибкой регрессии квантиля tau(k) ученик в Mdl.Trees(j) только.

Для 'cumulative' и 'individual', если вы включаете меньше деревьев в оценку квантиля с помощью Trees или UseInstanceForTree, затем количество строк в err уменьшается с Mdl.NumTrees.

Пример: 'Mode','cumulative'

Веса наблюдения, заданные как пара, разделенная запятой, состоящая из 'Weights' и числовой вектор положительных значений с длиной, равняются size(X,1). quantileError использует Weights, чтобы вычислить взвешенное среднее отклонений при оценке ошибки регрессии квантиля.

По умолчанию quantileError приписывает вес 1 к каждому наблюдению, которое приводит к невзвешенному среднему значению отклонений.

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

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

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

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

Для 'all' quantileError использует все деревья в ансамбле (то есть, индексы 1:Mdl.NumTrees).

Значения кроме значения по умолчанию могут влиять на количество строк в err.

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

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

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

Если вы задаете 'Mode','individual', то quantileError игнорирует TreeWeights.

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

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

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

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

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

Значения кроме значения по умолчанию могут влиять на количество строк в err. Кроме того, значение Trees влияет на значение UseInstanceForTree. Предположим, что U является значением UseInstanceForTree. quantileError игнорирует столбцы U, соответствующего деревьям, не используясь по оценке от спецификации Trees. Таким образом, quantileError сбрасывает значение 'UseInstanceForTree' к U(:,trees), где trees является значением 'Trees'.

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

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

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

Половина ошибки регрессии квантиля, возвращенной в виде числа или T-by-numel(tau) матрица. tau является значением Quantile.

T зависит от значений Mode, Trees, UseInstanceForTree и Quantile. Предположим, что вы задаете 'Trees',trees, и вы используете значение по умолчанию 'UseInstanceForTree'.

  • Для 'Mode','cumulative' err является numel(trees)-by-numel(tau) числовая матрица. err(j,k) является tau(k) совокупная ошибка регрессии квантиля ученики в Mdl.Trees(trees(1:j)).

  • Для 'Mode','ensemble' err является 1-by-numel(tau) числовой вектор. err(k) является tau(k) совокупная ошибка регрессии квантиля ученики в Mdl.Trees(trees).

  • Для 'Mode','individual' err является numel(trees)-by-numel(tau) числовая матрица. err(j,k) является ошибкой регрессии квантиля tau(k) ученик в Mdl.Trees(trees(j)).

Примеры

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

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

load carsmall
Cylinders = categorical(Cylinders);
X = table(Displacement,Weight,Cylinders,MPG);

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

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

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

Выполните регрессию квантиля и оцените MAD целого ансамбля, использующего предсказанные условные медианы.

err = quantileError(Mdl,X)
err = 1.2586

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

err = quantileError(Mdl,X,'MPG')
err = 1.2586

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

load carsmall
X = table(Displacement,Weight,Cylinders,MPG);

Случайным образом разделите данные в два набора: 75%-е учебное и 25%-е тестирование. Извлеките индексы подмножества.

rng(1); % For reproducibility 
cvp = cvpartition(size(X,1),'Holdout',0.25);
idxTrn = training(cvp);
idxTest = test(cvp);

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

Mdl = TreeBagger(250,X(idxTrn,:),'MPG','Method','regression');

Оцените совокупные 0.25, 0.5, и 0,75 ошибки регрессии квантиля для набора тестов. Передайте данные о предикторе в как числовая матрица и данные об ответе в как вектор.

err = quantileError(Mdl,X{idxTest,1:3},MPG(idxTest),'Quantile',[0.25 0.5 0.75],...
    'Mode','cumulative');

err 250 3 матрица совокупных ошибок регрессии квантиля. Столбцы соответствуют вероятностям квантиля, и строки соответствуют деревьям в ансамбле. Ошибки совокупны, таким образом, они включают агрегированные прогнозы от предыдущих деревьев. Несмотря на то, что, Mdl был обучен с помощью таблицы, если все переменные прогноза в таблице являются числовыми, то можно предоставить матрицу данных о предикторе вместо этого.

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

figure;
plot(err);
legend('0.25 quantile error','0.5 quantile error','0.75 quantile error');
ylabel('Quantile error');
xlabel('Tree index');
title('Cumulative Quantile Regression Error')

Обучение с помощью приблизительно 60 деревьев, кажется, достаточно для первых двух квартилей, но третий квартиль требует приблизительно 150 деревьев.

Больше о

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

Советы

  • Чтобы настроить количество деревьев в ансамбле, установите 'Mode','cumulative' и постройте ошибки регрессии квантиля относительно древовидных индексов. Максимальное количество необходимых деревьев является древовидным индексом, где ошибка регрессии квантиля, кажется, выравнивается.

  • Чтобы исследовать производительность модели, когда учебная выборка будет маленькой, используйте oobQuantileError вместо этого.

Ссылки

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

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

Смотрите также

| | |

Введенный в R2017b