loss

Описание

L = loss(tree,tbl,ResponseVarName) возвращает среднюю квадратичную невязку между предсказаниями tree к данным в tbl, по сравнению с истинными ответами tbl.ResponseVarName.

L = loss(tree,x,y) возвращает среднюю квадратичную невязку между предсказаниями tree к данным в x, по сравнению с истинными ответами y.

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

[L,se,NLeaf,bestlevel] = loss(___) также возвращает стандартную ошибку потерь (se), количество листьев (конечных узлов) в дереве (NLeaf) и оптимальный уровень обрезки для tree (bestlevel).

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

расширить все

Обученное дерево регрессии, заданное как RegressionTree объект, созданный fitrtree или CompactRegressionTree объект, созданный compact.

Предикторные значения, заданные как матрица значений с плавающей точкой. Каждый столбец x представляет одну переменную, и каждая строка представляет одно наблюдение.

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

Имя переменной отклика, заданное как имя переменной в tbl.

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика y хранится как tbl.y, затем задайте ResponseVarName как 'y'. В противном случае программное обеспечение обрабатывает все столбцы tbl, включая y, как предикторы при обучении модели.

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

Данные отклика, заданные как числовой вектор-столбец с одинаковым числом строк, как x. Каждая запись в y - ответ на данные в соответствующей строке x.

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

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

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

Функция потерь, заданная как разделенная разделенными запятой парами, состоящая из 'LossFun' и указатель на функцию для потерь, или 'mse' представление средней квадратной ошибки. Если вы передаете указатель на функцию fun, loss вызывает fun как:

fun(Y,Yfit,W)
  • Y - вектор истинных откликов.

  • Yfit - вектор предсказанных откликов.

  • W - веса наблюдений. Если вы сдаете Wэлементы нормированы в сумме к 1.

Все векторы имеют одинаковое число строк как Y.

Пример: 'LossFun','mse'

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

Уровень обрезки, заданный как разделенная разделенными запятой парами, состоящая из 'Subtrees' и вектор неотрицательных целых чисел в порядке возрастания или 'all'.

Если вы задаете вектор, то все элементы должны быть как минимум 0 и самое большее max(tree.PruneList). 0 указывает полное, несрезанное дерево и max(tree.PruneList) указывает полностью обрезанное дерево (т.е. только корневой узел).

Если вы задаете 'all', затем loss работает со всеми поддеревьями (т.е. со всей последовательностью обрезки). Эта спецификация эквивалентна использованию 0:max(tree.PruneList).

loss черносливы tree каждому уровню, указанному в Subtrees, а затем оценивает соответствующие выходные аргументы. Размер Subtrees определяет размер некоторых выходных аргументов.

Для вызова Subtrees, свойства PruneList и PruneAlpha от tree должно быть непустым. Другими словами, расти tree путем установки 'Prune','on', или путем обрезки tree использование prune.

Пример: 'Subtrees','all'

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

Размер дерева, заданный как разделенная разделенными запятой парами, состоящая из 'TreeSize' и одно из следующих:

  • 'se'loss возвращает bestlevel что соответствует наименьшему дереву, средняя квадратичная невязка (MSE) которого находится в пределах одной стандартной ошибки минимального MSE.

  • 'min'loss возвращает bestlevel что соответствует минимальному дереву MSE.

Пример: 'TreeSize','min'

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и вектор скалярных значений. Программа взвешивает наблюдения в каждой строке x или tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк в x или tbl.

Если вы задаете входные данные как таблицу tbl, затем Weights может быть именем переменной в tbl который содержит числовой вектор. В этом случае необходимо задать Weights как имя переменной. Для примера, если вектор весов W хранится как tbl.W, затем задайте Weights как 'W'. В противном случае программное обеспечение обрабатывает все столбцы tbl, включая W, как предикторы при обучении модели.

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

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

расширить все

Классификационная ошибка, возвращенная в качестве вектора длину Subtrees. Ошибка для каждого дерева является средней квадратичной невязкой, взвешенной с Weights. Если вы включаете LossFun, L отражает потери, рассчитанные с помощью LossFun.

Стандартная ошибка потерь, возвращенная в качестве вектора длина Subtrees.

Количество листьев (терминальных узлов) в обрезанных поддеревьях, возвращаемое как вектор длину Subtrees.

Лучший уровень обрезки, как определено в TreeSize Пара "имя-значение", возвращенный как скаляр, значение которого зависит от TreeSize:

  • TreeSize = 'se'loss возвращает наивысший уровень обрезки с потерями в пределах одного стандартного отклонения от минимального (L+ se, где L и se относятся к наименьшему значению в Subtrees).

  • TreeSize = 'min'loss возвращает элемент Subtrees с наименьшими потерями, обычно наименьший элемент Subtrees.

Примеры

расширить все

Загрузите carsmall набор данных. Рассмотрим Displacement, Horsepower, и Weight как предикторы отклика MPG.

load carsmall
X = [Displacement Horsepower Weight];

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

tree = fitrtree(X,MPG);

Оцените MSE в выборке.

L = loss(tree,X,MPG)
L = 4.8952

Загрузите carsmall набор данных. Рассмотрим Displacement, Horsepower, и Weight как предикторы отклика MPG.

load carsmall
X = [Displacement Horsepower Weight];

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

Mdl = fitrtree(X,MPG);

Просмотрите дерево регрессии.

view(Mdl,'Mode','graph');

Figure Regression tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 60 objects of type line, text.

Найдите лучший уровень обрезки, который приводит к оптимальным потерям в выборке.

[L,se,NLeaf,bestLevel] = loss(Mdl,X,MPG,'Subtrees','all');
bestLevel
bestLevel = 1

Лучшим уровнем обрезки является уровень 1.

Обрезать дерево до уровня 1.

pruneMdl = prune(Mdl,'Level',bestLevel);
view(pruneMdl,'Mode','graph');

Figure Regression tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 57 objects of type line, text.

Необрезанные деревья решений, как правило, перегружаются. Один из способов сбалансировать сложность модели и эффективности вне выборки - это обрезать дерево (или ограничить его рост), чтобы эффективность в выборке и вне выборки были удовлетворительными.

Загрузите carsmall набор данных. Рассмотрим Displacement, Horsepower, и Weight как предикторы отклика MPG.

load carsmall
X = [Displacement Horsepower Weight];
Y = MPG;

Разделите данные на наборы для обучения (50%) и валидации (50%).

n = size(X,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices 
idxVal = idxTrn == false;                  % Validation set logical indices

Вырастите дерево регрессии с помощью набора обучающих данных.

Mdl = fitrtree(X(idxTrn,:),Y(idxTrn));

Просмотрите дерево регрессии.

view(Mdl,'Mode','graph');

Figure Regression tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 27 objects of type line, text.

Дерево регрессии имеет семь уровней обрезки. Уровень 0 является полным, несрезанным деревом (как показано). Уровень 7 является только корневым узлом (то есть без разделений).

Исследуйте обучающую выборку MSE для каждого поддерева (или уровня обрезки), исключая самый высокий уровень.

m = max(Mdl.PruneList) - 1;
trnLoss = resubLoss(Mdl,'SubTrees',0:m)
trnLoss = 7×1

    5.9789
    6.2768
    6.8316
    7.5209
    8.3951
   10.7452
   14.8445

  • MSE для полного, несрезанного дерева составляет около 6 модули.

  • MSE для дерева, обрезанного до уровня 1, составляет около 6,3 модули.

  • MSE для дерева, обрезанного до уровня 6 (т.е. пня), составляет около 14,8 модули.

Исследуйте выборку валидации MSE на каждом уровне, исключая самый высокий уровень.

valLoss = loss(Mdl,X(idxVal,:),Y(idxVal),'SubTrees',0:m)
valLoss = 7×1

   32.1205
   31.5035
   32.0541
   30.8183
   26.3535
   30.0137
   38.4695

  • MSE для полного, несрезанного дерева (уровень 0) составляет около 32,1 модули.

  • MSE для дерева, обрезанного до уровня 4, составляет около 26,4 модули.

  • MSE для дерева, обрезанного до уровня 5, составляет около 30,0 модули.

  • MSE для дерева, обрезанного до уровня 6 (т.е. пня), составляет около 38,5 модули.

Чтобы сбалансировать сложность модели и несовпадающую эффективность, рассмотрите обрезку Mdl на уровень 4.

pruneMdl = prune(Mdl,'Level',4);
view(pruneMdl,'Mode','graph')

Figure Regression tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 15 objects of type line, text.

Подробнее о

расширить все

Расширенные возможности

См. также

|