Ошибка классификации
возвращает скаляр, представляющий, насколько хорошо L = loss(tree,TBL,ResponseVarName)tree классифицирует данные в TBL, когда TBL.ResponseVarName содержит истинные классификации.
При расчете потерь loss нормализует вероятности классов в Y к вероятностям класса, используемым для обучения, хранящимся в Prior имущество tree.
возвращает потерю с дополнительными опциями, указанными одним или несколькими L = loss(___,Name,Value)Name,Value парные аргументы, использующие любой из предыдущих синтаксисов. Например, можно указать функцию потерь или веса наблюдений.
tree - Обученное дерево классификацииClassificationTree объект модели | CompactClassificationTree объект моделиОбученное дерево классификации, указанное как ClassificationTree или CompactClassificationTree объект модели. То есть tree является обученной моделью классификации, возвращенной fitctree или compact.
TBL - Образцы данныхОбразец данных, указанный как таблица. Каждая строка TBL соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, TBL может содержать дополнительные столбцы для переменной ответа и весов наблюдения. TBL должен содержать все предикторы, используемые для обучения tree. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.
Если TBL содержит переменную ответа, используемую для обучения tree, то указывать не нужно ResponseVarName или Y.
Если вы тренируетесь tree с использованием образцов данных, содержащихся в table, то входные данные для этого метода также должны быть в таблице.
Типы данных: table
X - Данные для классификацииДанные для классификации, указанные как числовая матрица. Каждая строка X представляет одно наблюдение, и каждый столбец представляет один предиктор. X должно иметь то же количество столбцов, что и данные, используемые для обучения tree. X должно иметь то же количество строк, что и число элементов в Y.
Типы данных: single | double
ResponseVarName - Имя переменной ответаTBLИмя переменной ответа, указанное как имя переменной в TBL. Если TBL содержит переменную ответа, используемую для обучения tree, то указывать не нужно ResponseVarName.
При указании ResponseVarName, то это необходимо сделать как вектор символа или скаляр строки. Например, если переменная ответа сохранена как TBL.Response, затем укажите его как 'Response'. В противном случае программа обрабатывает все столбцы TBL, в том числе TBL.ResponseVarName, как предикторы.
Переменная ответа должна быть категориальным, символьным или строковым массивом, логическим или числовым вектором или массивом ячеек символьных векторов. Если ответная переменная является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char | string
Y - Этикетки классовМетки класса, указанные как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов. Y должен быть того же типа, что и классификация, используемая для обучения tree, и его число элементов должно равняться числу строк X.
Типы данных: categorical | char | string | logical | single | double | cell
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'LossFun' - Функция потерь'mincost' (по умолчанию) | 'binodeviance' | 'classiferror' | 'exponential' | 'hinge' | 'logit' | 'quadratic' | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и встроенный дескриптор функции или имени функции потери.
В следующей таблице перечислены доступные функции потерь. Укажите его с помощью соответствующего вектора символа или скаляра строки.
| Стоимость | Описание |
|---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Неверно классифицированная скорость в десятичной |
'exponential' | Экспоненциальные потери |
'hinge' | Потеря шарнира |
'logit' | Логистические потери |
'mincost' | Минимальная ожидаемая стоимость неправильной классификации (для классификационных оценок, которые являются задними вероятностями) |
'quadratic' | Квадратичные потери |
'mincost' подходит для классификационных оценок, которые являются задними вероятностями. Деревья классификации возвращают апостериорные вероятности как оценки классификации по умолчанию (см. predict).
Укажите собственную функцию с помощью нотации дескриптора функции.
Предположим, что n быть числом наблюдений в X и K быть числом различных классов (numel(tree.ClassNames)). Ваша функция должна иметь эту подпись
lossvalue = lossfun(C,S,W,Cost)Выходной аргумент lossvalue является скаляром.
Выберите имя функции (lossfun).
C является nоколо-K логическая матрица со строками, указывающими, какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в tree.ClassNames.
Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.
S является nоколо-K числовая матрица классификационных баллов. Порядок столбцов соответствует порядку классов в tree.ClassNames. S - матрица классификационных баллов, аналогичная выходному результату predict.
W является n-по-1 числовой вектор весов наблюдения. Если вы проходите W, программное обеспечение нормализует их для суммирования 1.
Cost является K-by-K числовая матрица затрат на неправильную классификацию. Например, Cost = ones(K) - eye(K) указывает стоимость 0 для правильной классификации, и 1 для неправильной классификации.
Укажите свою функцию с помощью 'LossFun',@.lossfun
Дополнительные сведения о функциях потерь см. в разделе Классификационные потери.
Типы данных: char | string | function_handle
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | имя переменной в TBL | числовой вектор положительных значенийВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор положительных значений или имя переменной в TBL.
При указании Weights как числовой вектор, то размер Weights должно быть равно количеству строк в X или TBL.
При указании Weights как имя переменной в TBL, необходимо сделать это как вектор символа или скаляр строки. Например, если веса сохранены как TBL.W, затем укажите его как 'W'. В противном случае программа обрабатывает все столбцы TBL, в том числе TBL.W, как предикторы.
loss нормализует веса таким образом, что веса наблюдения в каждом классе суммируются с предыдущей вероятностью этого класса. При поставке Weights, loss вычисляет взвешенные потери классификации.
Типы данных: single | double | char | string
Name,Value аргументы, связанные с обрезкой поддеревьев:
'Subtrees' - Уровень отсечения'all'Уровень отсечения, заданный как разделенная запятыми пара, состоящая из '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' (по умолчанию) | 'min'Размер дерева, указанный как разделенная запятыми пара, состоящая из 'TreeSize' и одно из следующих значений:
'se' — loss возвращает самый высокий уровень отсечения с потерями в пределах одного стандартного отклонения от минимального (L+se, где L и se относятся к наименьшему значению в Subtrees).
'min' — loss возвращает элемент Subtrees с наименьшими потерями, обычно наименьший элемент Subtrees.
L - классификационные потери;Потеря классификации, возвращенная в виде вектора длина Subtrees. Значение ошибки зависит от значений в Weights и LossFun.
se - Стандартная ошибка потериСтандартная ошибка потери, возвращаемая в виде вектора длина Subtrees.
NLeaf - Количество конечных узловКоличество листьев (конечных узлов) в обрезанных поддеревьях, возвращаемых в виде вектора длины Subtrees.
bestlevel - Лучший уровень обрезкиЛучший уровень отсечения, определенный в TreeSize пара имя-значение, возвращаемая как скаляр, значение которого зависит от TreeSize:
TreeSize = 'se' — loss возвращает самый высокий уровень отсечения с потерями в пределах одного стандартного отклонения от минимального (L+se, где L и se относятся к наименьшему значению в Subtrees).
TreeSize = 'min' — loss возвращает элемент Subtrees с наименьшими потерями, обычно наименьший элемент Subtrees.
По умолчанию bestlevel - уровень отсечения, который дает потери в пределах одного стандартного отклонения минимальных потерь.
Вычислить повторно замещенную ошибку классификации для ionosphere набор данных.
load ionosphere
tree = fitctree(X,Y);
L = loss(tree,X,Y)L = 0.0114
Необработанные деревья принятия решений, как правило, слишком подходят. Одним из способов сбалансировать сложность модели и производительность вне выборки является обрезка дерева (или ограничение его роста), чтобы производительность внутри выборки и вне выборки была удовлетворительной.
Загрузите набор данных радужки Фишера. Разбейте данные на наборы обучения (50%) и проверки (50%).
load fisheriris n = size(meas,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 = fitctree(meas(idxTrn,:),species(idxTrn));
Просмотр дерева классификации.
view(Mdl,'Mode','graph');

Дерево классификации имеет четыре уровня обрезки. Уровень 0 - это полное дерево без обрезки (как показано). Уровень 3 - это только корневой узел (т.е. без разбиений).
Проверьте ошибку классификации обучающих образцов для каждого поддерева (или уровня отсечения), исключая самый высокий уровень.
m = max(Mdl.PruneList) - 1;
trnLoss = resubLoss(Mdl,'SubTrees',0:m)trnLoss = 3×1
0.0267
0.0533
0.3067
Полное, неперерезанное дерево неправильно классифицирует около 2,7% тренировочных наблюдений.
Дерево, отсеченное до уровня 1, неправильно классифицирует около 5,3% тренировочных наблюдений.
Дерево, отсеченное до уровня 2 (то есть культи), неправильно классифицирует около 30,6% тренировочных наблюдений.
Проверьте ошибку классификации образца проверки на каждом уровне, исключая самый высокий уровень.
valLoss = loss(Mdl,meas(idxVal,:),species(idxVal),'SubTrees',0:m)valLoss = 3×1
0.0369
0.0237
0.3067
Полное неперерезанное дерево неправильно классифицирует около 3,7% проверочных наблюдений.
Дерево, отсеченное до уровня 1, неправильно классифицирует около 2,4% проверочных наблюдений.
Дерево, отсеченное до уровня 2 (то есть культи), неправильно классифицирует около 30,7% проверочных наблюдений.
Чтобы сбалансировать сложность модели и производительность вне выборки, рассмотрите возможность сокращения Mdl на уровень 1.
pruneMdl = prune(Mdl,'Level',1); view(pruneMdl,'Mode','graph')

Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.
Рассмотрим следующий сценарий.
L - средневзвешенная потеря классификации.
n - размер выборки.
Для двоичной классификации:
yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.
f (Xj) - показатель классификации положительного класса для наблюдения (строки) j данных прогнозирования X.
mj = yjf (Xj) - показатель классификации для классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не вносят большого вклада в средние потери. Отрицательные значения mj указывают на неправильную классификацию и вносят значительный вклад в средний убыток.
Для алгоритмов, поддерживающих мультиклассовую классификацию (то есть K ≥ 3):
yj * - вектор из K - 1 нулей, с 1 в положении, соответствующем истинному наблюдаемому классу yj. Например, если истинным классом второго наблюдения является третий класс и K = 4, то y2 * = [0 0 1 0] ′. Порядок классов соответствует порядку в ClassNames свойства входной модели.
f (Xj) - вектор длины K оценок класса для наблюдения j данных предсказателя X. Порядок оценок соответствует порядку классов в ClassNames свойства входной модели.
mj = yj * ′ f (Xj). Поэтому mj - это скалярная оценка классификации, которую модель прогнозирует для истинного наблюдаемого класса.
Вес для наблюдения j равен wj. Программное обеспечение нормализует весовые коэффициенты наблюдения таким образом, что они суммируются с соответствующей вероятностью предыдущего класса. Программное обеспечение также нормализует предыдущие вероятности, так что они составляют 1. Поэтому
С учетом этого сценария в следующей таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент пары имя-значение.
| Функция потерь | Значение LossFun | Уравнение |
|---|---|---|
| Биномиальное отклонение | 'binodeviance' | |
| Неверно классифицированная скорость в десятичной | 'classiferror' | j - метка класса, соответствующая классу с максимальным баллом. I {·} - функция индикатора. |
| Потери перекрестной энтропии | 'crossentropy' |
Взвешенная потеря перекрестной энтропии равна Kn, где веса нормализуются для суммирования в n вместо 1. |
| Экспоненциальные потери | 'exponential' | ). |
| Потеря шарнира | 'hinge' | |
| Потеря журнала | 'logit' | mj)). |
| Минимальная ожидаемая стоимость классификации ошибок | 'mincost' |
Программное обеспечение вычисляет взвешенную минимальную ожидаемую стоимость классификации, используя эту процедуру для наблюдений j = 1,..., n.
Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию Если используется матрица затрат по умолчанию (значение элемента которой равно 0 для правильной классификации и 1 для неправильной классификации), то |
| Квадратичные потери | 'quadratic' | ) 2. |
На этом рисунке сравниваются функции потерь (за исключением 'crossentropy' и 'mincost') над баллом м для одного наблюдения. Некоторые функции нормализуются для прохождения через точку (0,1).

Истинная стоимость неправильной классификации - это стоимость классификации наблюдения в неверный класс.
Можно установить истинную стоимость неправильной классификации для класса с помощью 'Cost' аргумент «имя-значение» при создании классификатора. Cost(i,j) - затраты на классификацию наблюдения по классу j когда его истинным классом является i. По умолчанию Cost(i,j)=1 если i~=j, и Cost(i,j)=0 если i=j. Другими словами, стоимость составляет 0 для правильной классификации и 1 за неправильную классификацию.
Ожидаемая стоимость неправильной классификации для каждого наблюдения представляет собой усредненную стоимость классификации наблюдения по каждому классу.
Предположим, что у вас есть Nobs наблюдения, которые вы хотите классифицировать с помощью обученного классификатора, и у вас есть K классы. Вы помещаете наблюдения в матрицу X с одним наблюдением на строку.
Матрица ожидаемых затрат CE имеет размер Nobsоколо-K. Каждая строка CE содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждом из K классы. CE(n,k) является
k' i),
где:
K - количество классов.
n)) - задняя вероятность класса i для наблюдения X (n).
) - истинная стоимость неправильной классификации при классификации наблюдения как k, когда его истинным классом является i.
Для деревьев оценка классификации листового узла является апостериорной вероятностью классификации в этом узле. Апостериорная вероятность классификации в узле - это число обучающих последовательностей, которые приводят к этому узлу с классификацией, деленное на число обучающих последовательностей, которые приводят к этому узлу.
Например, рассмотрите возможность классификации предиктора X как true когда X < 0.15 или X > 0.95, и X в противном случае имеет значение false.
Создайте 100 случайных точек и классифицируйте их:
rng(0,'twister') % for reproducibility X = rand(100,1); Y = (abs(X - .55) > .4); tree = fitctree(X,Y); view(tree,'Mode','Graph')

Обрезать дерево:
tree1 = prune(tree,'Level',1); view(tree1,'Mode','Graph')

Обрезанное дерево правильно классифицирует наблюдения, которые меньше 0,15 true. Он также правильно классифицирует наблюдения с .15 по .94 как false. Однако он неправильно классифицирует наблюдения, которые превышают 0,94, как false. Поэтому оценка для наблюдений, которые превышают 0,15, должна быть около 0,05/.85 = 0,06 дляtrueи около 0,8/.85 = 0,94 дляfalse.
Вычислите оценки прогнозирования для первых 10 строк X:
[~,score] = predict(tree1,X(1:10)); [score X(1:10,:)]
ans = 10×3
0.9059 0.0941 0.8147
0.9059 0.0941 0.9058
0 1.0000 0.1270
0.9059 0.0941 0.9134
0.9059 0.0941 0.6324
0 1.0000 0.0975
0.9059 0.0941 0.2785
0.9059 0.0941 0.5469
0.9059 0.0941 0.9575
0.9059 0.0941 0.9649
Действительно, каждая ценность X (самый правый столбец), который меньше 0,15, имеет связанные оценки (левый и центральный столбцы) 0 и 1, в то время как другие значения X имеют связанные баллы 0.91 и 0.09. Разница (балл 0.09 вместо ожидаемого .06) из-за статистической флуктуации: есть 8 наблюдения в X в диапазоне (.95,1) вместо ожидаемого 5 наблюдения.
Примечания и ограничения по использованию:
Поддерживается только один выход.
С помощью этой функции можно использовать модели, обученные работе с данными в памяти или с данными высокого уровня.
Дополнительные сведения см. в разделе Массивы Tall.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.