Классификационные потери для классификатора нейронной сети
возвращает классификационные потери для обученного классификатора нейронной сети L
= loss(Mdl
,Tbl
,ResponseVarName
)Mdl
использование данных предиктора в таблице Tbl
и метки классов в ResponseVarName
табличная переменная.
L
возвращается как скалярное значение, которое представляет ошибку классификации по умолчанию.
задает опции, использующие один или несколько аргументов имя-значение в дополнение к любой комбинации входных аргументов в предыдущих синтаксисах. Для примера можно задать, что столбцы в данных предиктора соответствуют наблюдениям, задать функцию потерь или поставить веса наблюдений.L
= loss(___,Name,Value
)
Вычислите ошибку классификации тестового набора классификатора нейронной сети.
Загрузите patients
набор данных. Составьте таблицу из набора данных. Каждая строка соответствует одному пациенту, и каждый столбец соответствует диагностической переменной. Используйте Smoker
переменная как переменная отклика, а остальная часть переменных как предикторы.
load patients
tbl = table(Diastolic,Systolic,Gender,Height,Weight,Age,Smoker);
Разделите данные на набор обучающих данных tblTrain
и тестовый набор tblTest
при помощи стратифицированного раздела удержания. Программа резервирует приблизительно 30% наблюдений для тестовых данных набора и использует остальную часть наблюдений для обучающего набора данных.
rng("default") % For reproducibility of the partition c = cvpartition(tbl.Smoker,"Holdout",0.30); trainingIndices = training(c); testIndices = test(c); tblTrain = tbl(trainingIndices,:); tblTest = tbl(testIndices,:);
Обучите классификатор нейронной сети с помощью набора обучающих данных. Задайте Smoker
столбец tblTrain
как переменная отклика. Задайте, чтобы стандартизировать числовые предикторы.
Mdl = fitcnet(tblTrain,"Smoker", ... "Standardize",true);
Вычислите ошибку классификации тестового набора. Ошибка классификации является типом потерь по умолчанию для классификаторов нейронных сетей.
testError = loss(Mdl,tblTest,"Smoker")
testError = 0.0671
testAccuracy = 1 - testError
testAccuracy = 0.9329
Модель нейронной сети правильно классифицирует приблизительно 93% наблюдений тестового набора.
Выполните выбор признаков путем сравнения полей классификации тестового набора, ребер, ошибок и предсказаний. Сравните метрики тестового набора для модели, обученной с использованием всех предикторов, с метриками тестового набора для модели, обученной с использованием только подмножества предикторов.
Загрузите образец файла fisheriris.csv
, который содержит данные по радужке, включая длину чашелистика, ширину чашелистика, длину лепестка, ширину лепестка и видовой тип. Считайте файл в таблицу.
fishertable = readtable('fisheriris.csv');
Разделите данные на набор обучающих данных trainTbl
и тестовый набор testTbl
при помощи стратифицированного раздела удержания. Программа резервирует приблизительно 30% наблюдений для тестовых данных набора и использует остальную часть наблюдений для обучающего набора данных.
rng("default") c = cvpartition(fishertable.Species,"Holdout",0.3); trainTbl = fishertable(training(c),:); testTbl = fishertable(test(c),:);
Обучите один классификатор нейронной сети, используя все предикторы в наборе обучающих данных, и обучите другой классификатор, используя все предикторы, кроме PetalWidth
. Для обеих моделей задайте Species
как переменная отклика и стандартизируйте предикторы.
allMdl = fitcnet(trainTbl,"Species","Standardize",true); subsetMdl = fitcnet(trainTbl,"Species ~ SepalLength + SepalWidth + PetalLength", ... "Standardize",true);
Вычислите поля классификации тестового набора для двух моделей. Поскольку тестовый набор включает только 45 наблюдений, отобразите поля с помощью гистограмм.
Для каждого наблюдения классификационный запас является различием между классификационной оценкой для истинного класса и максимальным счетом для ложных классов. Поскольку классификаторы нейронных сетей возвращают классификационные оценки, которые являются апостериорными вероятностями, значения полей, близкие к 1, указывают на уверенные классификации, а отрицательные значения полей указывают на неправильную классификацию.
tiledlayout(2,1) % Top axes ax1 = nexttile; allMargins = margin(allMdl,testTbl); bar(ax1,allMargins) xlabel(ax1,"Observation") ylabel(ax1,"Margin") title(ax1,"All Predictors") % Bottom axes ax2 = nexttile; subsetMargins = margin(subsetMdl,testTbl); bar(ax2,subsetMargins) xlabel(ax2,"Observation") ylabel(ax2,"Margin") title(ax2,"Subset of Predictors")
Сравните ребро классификации тестового набора или среднее значение классификационных полей двух моделей.
allEdge = edge(allMdl,testTbl)
allEdge = 0.8198
subsetEdge = edge(subsetMdl,testTbl)
subsetEdge = 0.9556
Основываясь на полях классификации тестового набора и ребрах, модель, обученная на подмножестве предикторов, по-видимому, превосходит модель, обученную на всех предикторах.
Сравните ошибку классификации тестового набора двух моделей.
allError = loss(allMdl,testTbl); allAccuracy = 1-allError
allAccuracy = 0.9111
subsetError = loss(subsetMdl,testTbl); subsetAccuracy = 1-subsetError
subsetAccuracy = 0.9778
Снова, модель, обученная с использованием только подмножества предикторов, кажется, работает лучше, чем модель, обученная с использованием всех предикторов.
Визуализируйте результаты классификации тестового набора с помощью матриц неточностей.
allLabels = predict(allMdl,testTbl);
figure
confusionchart(testTbl.Species,allLabels)
title("All Predictors")
subsetLabels = predict(subsetMdl,testTbl);
figure
confusionchart(testTbl.Species,subsetLabels)
title("Subset of Predictors")
Модель, обученная с использованием всех предикторов, неправильно классифицирует четыре наблюдения набора тестов. Модель, обученная с использованием подмножества предикторов, неправильно классифицирует только одно из наблюдений тестового набора.
Учитывая эффективность тестового набора двух моделей, рассмотрите использование модели, обученной с использованием всех предикторов, кроме PetalWidth
.
Mdl
- Обученный классификатор нейронной сетиClassificationNeuralNetwork
объект модели | CompactClassificationNeuralNetwork
объект моделиОбученный классификатор нейронной сети, заданный как ClassificationNeuralNetwork
объект модели
объект модели, возвращенный fitcnet
или compact
, соответственно.
Tbl
- Выборочные данныеВыборочные данные, заданный как таблица. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Опционально Tbl
может содержать дополнительный столбец для переменной отклика. Tbl
должны содержать все предикторы, используемые для обучения Mdl
. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.
Если Tbl
содержит переменную отклика, используемую для обучения Mdl
, тогда вам не нужно указывать ResponseVarName
или Y
.
Если вы тренировались Mdl
используя выборочные данные, содержащуюся в таблице, затем входные данные для loss
также должно быть в таблице.
Если вы задаете 'Standardize',true
в fitcnet
при обучении Mdl
затем программное обеспечение стандартизирует числовые столбцы данных предиктора с помощью соответствующих средств и стандартных отклонений.
Типы данных: table
ResponseVarName
- Имя переменной откликаTbl
Имя переменной отклика, заданное как имя переменной в Tbl
. Если Tbl
содержит переменную отклика, используемую для обучения Mdl
, тогда вам не нужно указывать ResponseVarName
.
Если вы задаете ResponseVarName
, затем необходимо задать его как вектор символов или строковый скаляр. Для примера, если переменная отклика сохранена как Tbl.Y
, затем задайте ResponseVarName
как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Tbl.Y
, как предикторы.
Переменная отклика должна быть категориальными символьными или строковыми массивами; логический или числовой вектор; или массив ячеек из векторов символов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char
| string
Y
- Метки классовМетки классов, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов.
Тип данных Y
должно совпадать с типом данных Mdl.ClassNames
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Различные классы в Y
должен быть подмножеством Mdl.ClassNames
.
Если Y
является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.
Длина Y
должно быть равно количеству наблюдений в X
или Tbl
.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
X
- Данные предиктораДанные предиктора, заданные как числовая матрица. По умолчанию, loss
принимает, что каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задавали 'ObservationsIn','columns'
, тогда вы можете испытать значительное сокращение времени расчета.
Длина Y
и количество наблюдений в X
должно быть равным.
Если вы задаете 'Standardize',true
в fitcnet
при обучении Mdl
затем программное обеспечение стандартизирует числовые столбцы данных предиктора с помощью соответствующих средств и стандартных отклонений.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
loss(Mdl,Tbl,"Response","LossFun","crossentropy")
задает вычисление потерь перекрестной энтропии для модели Mdl
.'LossFun'
- Функция потерь'classiferror'
(по умолчанию) | 'binodeviance'
| 'crossentropy'
| 'exponential'
| 'hinge'
| 'logit'
| 'mincost'
| 'quadratic'
| указатель на функциюФункция потерь, заданная как встроенное имя функции потерь или указатель на функцию.
В этой таблице перечислены доступные функции потерь. Задайте один с помощью соответствующего вектора символов или строкового скаляра.
Значение | Описание |
---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Неверно классифицированный коэффициент в десятичных числах |
'crossentropy' | Потеря перекрестной энтропии (только для нейронных сетей) |
'exponential' | Экспоненциальные потери |
'hinge' | Потеря шарнира |
'logit' | Логистические потери |
'mincost' | Минимальные ожидаемые затраты на неправильную классификацию (для классификационных оценок, которые являются апостериорными вероятностями) |
'quadratic' | Квадратичные потери |
Для получения дополнительной информации о функциях потерь смотрите Классификационные потери.
Чтобы задать пользовательскую функцию потерь, используйте обозначение указателя на функцию. Функция должна иметь следующую форму:
lossvalue = lossfun
(C,S,W,Cost)
Выходной аргумент lossvalue
является скаляром.
Вы задаете имя функции (lossfun
).
C
является n
-by- K
логическая матрица с строками, указывающими класс, к которому принадлежит соответствующее наблюдение. n
количество наблюдений в Tbl
или X
, и K
- количество различных классов (numel(Mdl.ClassNames)
. Порядок столбцов соответствует порядку классов в Mdl.ClassNames
. Создание C
путем установки C(p,q) = 1
, если наблюдение p
находится в q классов
, для каждой строки. Установите все другие элементы строки p
на 0
.
S
является n
-by- K
числовая матрица классификационных оценок. Порядок столбцов соответствует порядку классов в Mdl.ClassNames
. S
является матрицей классификационных оценок, подобной выходным данным predict
.
W
является n
-by-1 числовой вектор весов наблюдений.
Cost
является K
-by- K
числовая матрица затрат на неправильную классификацию. Для примера, Cost = ones(K) – eye(K)
задает стоимость 0
для правильной классификации и 1
для неправильной классификации.
Пример: 'LossFun','crossentropy'
Типы данных: char
| string
| function_handle
'ObservationsIn'
- размерность наблюдения данных предиктора'rows'
(по умолчанию) | 'columns'
Размерность наблюдения данных предиктора, заданная как 'rows'
или 'columns'
.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задавали 'ObservationsIn','columns'
, тогда вы можете испытать значительное сокращение времени расчета. Вы не можете задать 'ObservationsIn','columns'
для данных предиктора в таблице.
Типы данных: char
| string
'Weights'
- Веса наблюденийTbl
Веса наблюдений, заданные как неотрицательный числовой вектор или имя переменной в Tbl
. Программа взвешивает каждое наблюдение в X
или Tbl
с соответствующим значением в Weights
. Длина Weights
должно равняться количеству наблюдений в X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть именем переменной в Tbl
который содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Для примера, если вектор весов W
хранится как Tbl.W
, затем укажите его следующим 'W'
.
По умолчанию Weights
является ones(n,1)
, где n
количество наблюдений в X
или Tbl
.
Если вы поставляете веса, то loss
вычисляет взвешенные классификационные потери и нормализует веса до суммы значения предшествующей вероятности в соответствующем классе.
Типы данных: single
| double
| char
| string
Classification loss функции измеряют прогнозирующую неточность классификационных моделей. Когда вы сравниваете один и тот же тип потерь среди многих моделей, более низкая потеря указывает на лучшую прогнозирующую модель.
Рассмотрим следующий сценарий.
L - средневзвешенные классификационные потери.
n - размер выборки.
Для двоичной классификации:
yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая на отрицательный или положительный класс (или первый или второй класс в ClassNames
свойство), соответственно.
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 (<reservedrangesplaceholder1>). Поэтому mj является скалярной классификационной оценкой, которую модель предсказывает для истинного наблюдаемого класса.
Вес для j наблюдения wj. Программа нормализует веса наблюдений так, чтобы они суммировались с соответствующей вероятностью предыдущего класса. Программное обеспечение также нормализует предыдущие вероятности, поэтому они равны 1. Поэтому,
С учетом этого сценария в следующей таблице описываются поддерживаемые функции потерь, которые можно задать при помощи 'LossFun'
аргумент пары "имя-значение".
Функция потерь | Значение LossFun | Уравнение |
---|---|---|
Биномиальное отклонение | 'binodeviance' | |
Неверно классифицированный коэффициент в десятичных числах | 'classiferror' | - метка класса, соответствующая классу с максимальным счетом. I {·} является функцией индикации. |
Потери перекрестной энтропии | 'crossentropy' |
Взвешенные потери перекрестной энтропии где веса нормированы в сумме к n вместо 1. |
Экспоненциальные потери | 'exponential' | |
Потеря шарнира | 'hinge' | |
Логит потеря | 'logit' | |
Минимальные ожидаемые затраты на неправильную классификацию | 'mincost' |
Программа вычисляет взвешенные минимальные ожидаемые затраты классификации, используя эту процедуру для наблюдений j = 1,..., n.
Взвешенное среднее значение минимальных ожидаемых потерь от неправильной классификации Если вы используете матрицу затрат по умолчанию (значение элемента которой 0 для правильной классификации и 1 для неправильной классификации), то |
Квадратичные потери | 'quadratic' |
Этот рисунок сравнивает функции потерь (кроме 'crossentropy'
и 'mincost'
) по счету m для одного наблюдения. Некоторые функции нормированы, чтобы пройти через точку (0,1).
ClassificationNeuralNetwork
| CompactClassificationNeuralNetwork
| edge
| fitcnet
| margin
| predict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.