потеря

Синтаксис

L = loss(tree,tbl,ResponseVarName)
L = loss(tree,x,y)
L = loss(___,Name,Value)
[L,se,NLeaf,bestlevel] = 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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');

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

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

Лучший уровень сокращения является уровнем 1.

Сократите дерево к уровню 1.

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

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

Загрузите набор данных 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');

Дерево регрессии имеет семь уровней сокращения. Уровень 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')

Больше о

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

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

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

|