exponenta event banner

quantileError

Класс: TreeBagger

Потери квантилей с использованием пакета деревьев регрессии

Описание

пример

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 является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

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

СтоимостьОписание
'cumulative'

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

'ensemble'

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

'individual'

err является Mdl.NumTreesоколо-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около-numel(tau) матрица. tau - значение Quantile.

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

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

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

  • Для 'Mode','individual', err является numel(trees)около-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.2339

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

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

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

Figure contains an axes. The axes with title Cumulative Quantile Regression Error contains 3 objects of type line. These objects represent 0.25 quantile error, 0.5 quantile error, 0.75 quantile error.

Тренировок с использованием около 60 деревьев, по-видимому, достаточно для первых двух квартилей, но для третьего квартиля требуется около 150 деревьев.

Подробнее

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

Совет

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

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

Ссылки

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

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

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