Потеря k - самый близкий соседний классификатор перезаменой
возвращает ущерб классификации от перезамены, которая является потерей, вычисленной для данных, используемых L
= resubLoss(mdl
)fitcknn
создать mdl
.
Потеря классификации (L
) числовой скаляр, интерпретация которого зависит от функции потерь и весов наблюдения в mdl
.
Создайте классификатор k - ближайших соседей для ирисовых данных Фишера, где = 5.
Загрузите ирисовый набор данных Фишера.
load fisheriris
Создайте классификатор для пяти самых близких соседей.
mdl = fitcknn(meas,species,'NumNeighbors',5);
Исследуйте потерю перезамены классификатора.
L = resubLoss(mdl)
L = 0.0333
Классификатор предсказывает неправильные классификации для 1/30 его обучающих данных.
mdl
— k - самая близкая соседняя модель классификатораClassificationKNN
объектмодель классификатора k - ближайших соседей в виде ClassificationKNN
объект.
lossfun
— Функция потерь'mincost'
(значение по умолчанию) | 'binodeviance'
| 'classiferror'
| 'exponential'
| 'hinge'
| 'logit'
| 'quadratic'
| указатель на функциюФункция потерь в виде встроенного имени функции потерь или указателя на функцию.
В следующей таблице перечислены доступные функции потерь.
Значение | Описание |
---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Ошибка классификации |
'exponential' | Экспоненциал |
'hinge' | Стержень |
'logit' | Логистический |
'mincost' | Минимальный ожидал стоимость misclassification (для классификационных оценок, которые являются апостериорными вероятностями), |
'quadratic' | Квадратичный |
'mincost'
подходит для классификационных оценок, которые являются апостериорными вероятностями. По умолчанию k - самые близкие соседние модели возвращают апостериорные вероятности как классификационные оценки (см. predict
).
Можно задать указатель на функцию для пользовательской функции потерь с помощью @
(например, @lossfun
). Позвольте n быть количеством наблюдений в X
и K быть количеством отличных классов (numel(mdl.ClassNames)
). Ваша пользовательская функция потерь должна иметь эту форму:
function lossvalue = lossfun(C,S,W,Cost)
C
n-by-K логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение. Порядок следования столбцов соответствует порядку класса в mdl.ClassNames
. Создайте C
установкой C(p,q) = 1
, если наблюдение p
находится в классе q
, для каждой строки. Установите все другие элементы строки p
к 0
.
S
n-by-K числовая матрица классификационных оценок. Порядок следования столбцов соответствует порядку класса в mdl.ClassNames
. Аргумент S
матрица классификационных оценок, похожих на выход predict
.
W
n-by-1 числовой вектор из весов наблюдения. Если вы передаете W
, программное обеспечение нормирует веса, чтобы суммировать к 1
.
Cost
K-by-K числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K)
задает стоимость 0
для правильной классификации и 1
для misclassification.
Выходной аргумент lossvalue
скаляр.
Для получения дополнительной информации о функциях потерь смотрите Потерю Классификации.
Типы данных: char |
string
| function_handle
Функции 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].
Два затрат сопоставлены с классификацией KNN: истинная стоимость misclassification в классе и ожидаемом misclassification стоится на наблюдение.
Можно установить истинную стоимость misclassification в классе при помощи 'Cost'
аргумент пары "имя-значение", когда вы запускаетесь fitcknn
. Значение Cost(i,j)
стоимость классификации наблюдения в класс j
если его истинным классом является i
. По умолчанию, Cost(i,j) = 1
если i ~= j
, и Cost(i,j) = 0
если i = j
. Другими словами, стоимостью является 0
для правильной классификации и 1
для неправильной классификации.
Два затрат сопоставлены с классификацией KNN: истинная стоимость misclassification в классе и ожидаемом misclassification стоится на наблюдение. Третий выход resubPredict
ожидаемая стоимость misclassification на наблюдение.
Предположим, что у вас есть Nobs
наблюдения, что вы классифицировали с обученным классификатором mdl
, и у вас есть K
классы. Команда
[label,score,cost] = resubPredict(mdl)
возвращает матричный cost
из размера Nobs
- K
, среди других выходных параметров. Каждая строка cost
матрица содержит ожидаемую (среднюю) стоимость классификации наблюдения в каждый K
классы. cost(n,j)
где
K является количеством классов.
апостериорная вероятность класса i для наблюдения X (n).
истинная misclassification стоимость классификации наблюдения как j, когда его истинным классом является i.
ClassificationKNN
| fitcknn
| resubEdge
| resubMargin
| resubPredict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.