Ошибка классификации
L = loss(tree,TBL,ResponseVarName)
L = loss(tree,TBL,Y)
L = loss(tree,X,Y)
L = loss(___,Name,Value)
[L,se,NLeaf,bestlevel]
= loss(___)
возвращает скалярное представление, как хорошо L
= loss(tree
,TBL
,ResponseVarName
)tree
классифицирует данные на TBL
, когда TBL.ResponseVarName
содержит истинные классификации.
При вычислении потери loss
нормирует вероятности класса в Y
к вероятностям класса, используемым для обучения, сохраненного в свойстве Prior
tree
.
возвращает потерю с дополнительными опциями, заданными одним или несколькими аргументами пары L
= loss(___,Name,Value
)Name,Value
, с помощью любого из предыдущих синтаксисов. Например, можно задать веса наблюдения или функция потерь.
loss
возвращает se
и дальнейшие выходные параметры только, когда парой "имя-значение" LossFun
является 'classiferror'
по умолчанию.
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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'LossFun'
— Функция потерь'mincost'
(значение по умолчанию) | 'binodeviance'
| 'classiferror'
| 'exponential'
| 'hinge'
| 'logit'
| 'quadratic'
| указатель на функциюФункция потерь, заданная как пара, разделенная запятой, состоящая из 'LossFun'
и встроенного имени функции потерь или указателя на функцию.
В следующей таблице перечислены доступные функции потерь. Задайте тот с помощью его соответствующего вектора символов или представьте скаляр в виде строки.
Значение | Описание |
---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Ошибка классификации |
'exponential' | Экспоненциал |
'hinge' | Стержень |
'logit' | Логистический |
'mincost' | Минимальный ожидал стоимость misclassification (для очков классификации, которые являются апостериорными вероятностями), |
'quadratic' | Квадратичный |
'mincost'
подходит для очков классификации, которые являются апостериорными вероятностями. Деревья классификации возвращают апостериорные вероятности как очки классификации по умолчанию (см. predict
).
Задайте свою собственную функцию с помощью обозначения указателя на функцию.
Предположим, что n
является количеством наблюдений в X
и K
быть количеством отличных классов (numel(tree.ClassNames)
). Ваша функция должна иметь эту подпись
lossvalue = lossfun
(C,S,W,Cost)
Выходным аргументом lossvalue
является скаляр.
Вы выбираете имя функции (lossfun
).
C
является n
-by-K
логическая матрица со строками, указывающими, которые классифицируют соответствующее наблюдение, принадлежит. Порядок следования столбцов соответствует порядку класса в tree.ClassNames
.
Создайте C
установкой C(p,q) = 1
, если наблюдение p
находится в классе q
для каждой строки. Установите все другие элементы строки p
к 0
.
S
является n
-by-K
числовая матрица очков классификации. Порядок следования столбцов соответствует порядку класса в tree.ClassNames
. S
является матрицей очков классификации, подобных выводу predict
.
W
является n
-by-1 числовой вектор весов наблюдения. Если вы передаете W
, программное обеспечение нормирует их, чтобы суммировать к 1
.
Cost
является K-by-K
числовая матрица затрат misclassification. Например, Cost = ones(K) - eye(K)
задает стоимость 0
для правильной классификации и 1
для misclassification.
Задайте свою функцию с помощью
.'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')
Функции Classification loss измеряют прогнозирующую погрешность моделей классификации. Когда вы сравниваете тот же тип потери среди многих моделей, более низкая потеря указывает на лучшую прогнозирующую модель.
Рассмотрите следующий сценарий.
L является средневзвешенной потерей классификации.
n является объемом выборки.
Для бинарной классификации:
yj является наблюдаемой меткой класса. Программные коды это как –1 или 1, указывая на отрицательный или положительный класс, соответственно.
f (Xj) является необработанным счетом классификации к наблюдению (строка) j данных о предикторе X.
mj = yj f (Xj) является счетом классификации к классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не способствуют очень средней потере. Отрицательные величины mj указывают на неправильную классификацию и значительно способствуют средней потере.
Для алгоритмов, которые поддерживают классификацию мультиклассов (то есть, K ≥ 3):
yj* является вектором K – 1 нуль, с 1 в положении, соответствующем истинному, наблюдаемому классу yj. Например, если истинный класс второго наблюдения является третьим классом и K = 4, то y *2 = [0 0 1 0] ′. Порядок классов соответствует порядку в свойстве ClassNames
входной модели.
f (Xj) является длиной вектор K музыки класса к наблюдению j данных о предикторе X. Порядок очков соответствует порядку классов в свойстве ClassNames
входной модели.
mj = yj* ′ f (Xj). Поэтому mj является скалярным счетом классификации, который модель предсказывает для истинного, наблюдаемого класса.
Весом для наблюдения j является wj. Программное обеспечение нормирует веса наблюдения так, чтобы они суммировали к соответствующей предшествующей вероятности класса. Программное обеспечение также нормирует априорные вероятности, таким образом, они суммируют к 1. Поэтому
Учитывая этот сценарий, следующая таблица описывает поддерживаемые функции потерь, которые можно задать при помощи аргумента пары "имя-значение" 'LossFun'
.
Функция потерь | Значение LossFun | Уравнение |
---|---|---|
Биномиальное отклонение | 'binodeviance' | |
Экспоненциальная потеря | 'exponential' | |
Ошибка классификации | 'classiferror' | Это - взвешенная часть неправильно классифицированных наблюдений где метка класса, соответствующая классу с максимальной апостериорной вероятностью. I {x} является функцией индикатора. |
Потеря стержня | 'hinge' | |
Потеря логита | 'logit' | |
Минимальная стоимость | 'mincost' | Минимальная стоимость. Программное обеспечение вычисляет взвешенную минимальную стоимость с помощью этой процедуры для наблюдений j = 1..., n.
Взвешенная, средняя, минимальная потеря стоимости |
Квадратичная потеря | 'quadratic' |
Эта фигура сравнивает функции потерь (кроме 'mincost'
) для одного наблюдения по m. Некоторые функции нормированы, чтобы пройти [0,1].
Существует два затрат, сопоставленные с классификацией: истинная стоимость misclassification в классе и ожидаемый misclassification стоятся на наблюдение.
Можно установить истинную стоимость misclassification в классе в паре "имя-значение" Cost
, когда вы создаете классификатор с помощью метода fitctree
. Cost(i,j)
является стоимостью классификации наблюдения в класс j
, если его истинным классом является i
. По умолчанию, Cost(i,j)=1
, если i~=j
и Cost(i,j)=0
, если i=j
. Другими словами, стоимостью является 0
для правильной классификации и 1
для неправильной классификации.
Существует два затрат, сопоставленные с классификацией: истинная стоимость misclassification в классе и ожидаемый misclassification стоятся на наблюдение.
Предположим, что у вас есть наблюдения Nobs
, что вы хотите классифицировать с обученным классификатором. Предположим, что у вас есть классы K
. Вы помещаете наблюдения в матричный Xnew
с одним наблюдением на строку.
Ожидаемая матрица стоимости CE
имеет размер Nobs
-by-K
. Каждая строка CE
содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждый из классов K
. CE(n,k)
где
K является количеством классов.
апостериорная вероятность класса i для наблюдения Xnew (n).
истинная misclassification стоимость классификации наблюдения как k, когда его истинным классом является i.
Для деревьев score классификации вершины является апостериорной вероятностью классификации в том узле. Апостериорная вероятность классификации в узле является количеством обучающих последовательностей, которые приводят к тому узлу с классификацией, разделенной на количество обучающих последовательностей, которые приводят к тому узлу.
Например, считайте классификацию предиктора X
как true
, когда X
< 0.15
или X
> 0.95
и X
будет ложным в противном случае.
Сгенерируйте 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
. Однако это неправильно классифицирует наблюдения, которые больше, чем.94 как false
. Поэтому счет к наблюдениям, которые больше, чем.15, должен быть о.05/.85 =. 06 для true
, и о.8/.85 =. 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
.
Эта функция поддерживает длинные массивы для данных, которые не помещаются в память, с ограничением:
Только один вывод поддерживается.
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.