Классификационные потери для наблюдений, не используемых в обучении
возвращает потери при перекрестной проверке классификации, полученные с помощью модели перекрестной, двоичной, линейной классификации L = kfoldLoss(CVMdl)CVMdl. То есть, для каждого раза, kfoldLoss оценивает классификационные потери для наблюдений, которые он проводит, когда он тренируется с использованием всех других наблюдений.
L содержит потери классификации для каждой силы регуляризации в моделях линейной классификации, которые составляют CVMdl.
использует дополнительные параметры, указанные одним или несколькими L = kfoldLoss(CVMdl,Name,Value)Name,Value аргументы пары. Например, укажите, какие складки следует использовать для расчета потерь, или укажите функцию классификационных потерь.
CVMdl - Модель перекрестной, двоичной, линейной классификацииClassificationPartitionedLinear объект моделиПерекрестно проверенная, двоичная, линейная модель классификации, указанная как ClassificationPartitionedLinear объект модели. Можно создать ClassificationPartitionedLinear модель с использованием fitclinear и указание любого из аргументов пары «имя-значение» перекрестной проверки, например, CrossVal.
Для получения оценок kfoldLoss применяет те же данные, которые используются для перекрестной проверки модели линейной классификации (X и Y).
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'Folds' - Сворачивание индексов для использования при прогнозировании классификации и оценки1:CVMdl.KFold (по умолчанию) | числовой вектор положительных целых чиселСворачивание индексов для использования при прогнозировании классификационной оценки, указанной как пара, разделенная запятыми, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должен быть в диапазоне от 1 через CVMdl.KFold.
Пример: 'Folds',[1 4 10]
Типы данных: single | double
'LossFun' - Функция потерь'classiferror' (по умолчанию) | 'binodeviance' | 'exponential' | 'hinge' | 'logit' | 'mincost' | 'quadratic' | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и встроенный дескриптор функции или имени функции потери.
В следующей таблице перечислены доступные функции потерь. Укажите его с помощью соответствующего вектора символа или скаляра строки.
| Стоимость | Описание |
|---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Неверно классифицированная скорость в десятичной |
'exponential' | Экспоненциальные потери |
'hinge' | Потеря шарнира |
'logit' | Логистические потери |
'mincost' | Минимальная ожидаемая стоимость неправильной классификации (для классификационных оценок, которые являются задними вероятностями) |
'quadratic' | Квадратичные потери |
'mincost' подходит для классификационных оценок, которые являются задними вероятностями. Для моделей линейной классификации учащиеся логистической регрессии по умолчанию возвращают апостериорные вероятности в качестве классификационных баллов, а учащиеся SVM - нет (см. predict).
Укажите собственную функцию с помощью нотации дескриптора функции.
Давайте n быть числом наблюдений в X и K быть числом различных классов (numel(Mdl.ClassNames), Mdl - входная модель). Ваша функция должна иметь эту подпись
lossvalue = lossfun(C,S,W,Cost)Выходной аргумент lossvalue является скаляром.
Выберите имя функции (lossfun).
C является nоколо-K логическая матрица со строками, указывающими, какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в Mdl.ClassNames.
Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.
S является nоколо-K числовая матрица классификационных баллов. Порядок столбцов соответствует порядку классов в Mdl.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
'Mode' - Уровень агрегирования потерь'average' (по умолчанию) | 'individual'Уровень агрегирования потерь, указанный как разделенная запятыми пара, состоящая из 'Mode' и 'average' или 'individual'.
| Стоимость | Описание |
|---|---|
'average' | Возвращает потери, усредненные по всем складкам |
'individual' | Возвращает потери для каждого раза |
Пример: 'Mode','individual'
L - Перекрестно подтвержденные классификационные потериПотери при перекрестной проверке классификации, возвращаемые в виде числового скаляра, вектора или матрицы. Толкование L зависит от LossFun.
Давайте R be число регуляризаций сильных сторон является перекрестно проверенными моделями (хранятся в numel(CVMdl.Trained{1}.Lambda)) и F - количество складок (хранящихся в CVMdl.KFold).
Если Mode является 'average', то L является 1-by-R вектор. L( средняя потеря классификации по всем складкам перекрестно проверенной модели, которая использует силу регуляризации j)j.
В противном случае L является Fоколо-R матрица. L( является классификационной потерей для кратности i,j)i перекрестной проверенной модели, в которой используется сила регуляризации j.
Оценить L, kfoldLoss использует созданные данные CVMdl (см. X и Y).
Загрузите набор данных NLP.
load nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.
Модели должны определять, содержится ли подсчет слов на веб-странице в документации Toolbox™ статистики и машинного обучения. Таким образом, определите метки, соответствующие страницам документации Toolbox™ статистики и машинного обучения.
Ystats = Y == 'stats';Перекрестная проверка бинарной модели линейной классификации, которая может определить, находится ли подсчет слов на веб-странице документации из документации Toolbox™ статистики и машинного обучения.
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'CrossVal','on');
CVMdl является ClassificationPartitionedLinear модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно изменить количество сгибов с помощью 'KFold' аргумент пары имя-значение.
Оцените среднее значение коэффициентов ошибок классификации с превышением в два раза.
ce = kfoldLoss(CVMdl)
ce = 7.6017e-04
Кроме того, можно получить кратные коэффициенты ошибок классификации, указав пару имя-значение. 'Mode','individual' в kfoldLoss.
Загрузите набор данных NLP. Выполните предварительную обработку данных, как указано в разделе Оценка k-кратной ошибки классификации перекрестной проверки, и перенесите данные предиктора.
load nlpdata Ystats = Y == 'stats'; X = X';
Перекрестная проверка двоичной модели линейной классификации с использованием пятикратной перекрестной проверки. Оптимизируйте целевую функцию с помощью SpaRSA. Укажите, что наблюдения предиктора соответствуют столбцам.
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'Solver','sparsa','KFold',5,... 'ObservationsIn','columns'); CMdl = CVMdl.Trained{1};
CVMdl является ClassificationPartitionedLinear модель. Он содержит свойство Trained, которая представляет собой массив ячеек 5 на 1, содержащий ClassificationLinear модели, которые программное обеспечение обучило с использованием обучающего набора каждой складки.
Создайте анонимную функцию, измеряющую линейные потери, т. е.
- вес для наблюдения j, y_j - ответ j (-1 для отрицательного класса и 1 в противном случае), а f_j - необработанный классификационный балл для наблюдения j. Пользовательские функции потери должны быть написаны в определенной форме. Правила записи пользовательской функции потери см. в разделе LossFun аргумент пары имя-значение. Поскольку функция не использует классификационные затраты, используйте ~ иметь kfoldLoss игнорировать его положение.
linearloss = @(C,S,W,~)sum(-W.*sum(S.*C,2))/sum(W);
Оцените средние перекрестно проверенные потери классификации с помощью линейной функции потерь. Также получите потери для каждой складки.
ce = kfoldLoss(CVMdl,'LossFun',linearloss)ce = -8.0982
ceFold = kfoldLoss(CVMdl,'LossFun',linearloss,'Mode','individual')
ceFold = 5×1
-8.3165
-8.7633
-7.4342
-8.0423
-7.9347
Чтобы определить хорошую силу лассо-штрафа для модели линейной классификации, которая использует учащегося логистической регрессии, сравните коэффициенты ошибок классификации тестовой выборки.
Загрузите набор данных NLP. Выполните предварительную обработку данных, как указано в разделе «Пользовательская потеря классификации».
load nlpdata Ystats = Y == 'stats'; X = X';
Создайте набор из 11 логарифмически разнесенных уровней регуляризации от до .
Lambda = logspace(-6,-0.5,11);
Перекрестная проверка двоичных, линейных моделей классификации с использованием пятикратной перекрестной проверки, и которые используют каждую из сильных сторон регуляризации. Оптимизируйте целевую функцию с помощью SpaRSA. Понизить допуск на градиенте целевой функции до 1e-8.
rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'KFold',5,'Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl =
ClassificationPartitionedLinear
CrossValidatedModel: 'Linear'
ResponseName: 'Y'
NumObservations: 31572
KFold: 5
Partition: [1x1 cvpartition]
ClassNames: [0 1]
ScoreTransform: 'none'
Properties, Methods
Извлеките обученную модель линейной классификации.
Mdl1 = CVMdl.Trained{1}Mdl1 =
ClassificationLinear
ResponseName: 'Y'
ClassNames: [0 1]
ScoreTransform: 'logit'
Beta: [34023x11 double]
Bias: [1x11 double]
Lambda: [1x11 double]
Learner: 'logistic'
Properties, Methods
Mdl1 является ClassificationLinear объект модели. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о Mdl как 11 моделей, по одной для каждой силы регуляризации в Lambda.
Оценка кросс-проверенной ошибки классификации.
ce = kfoldLoss(CVMdl);
Потому что есть 11 сильных сторон регуляризации, ce является вектором 1 на 11 коэффициентов ошибок классификации.
Более высокие значения Lambda привести к предикторной переменной разреженности, которая является хорошим качеством классификатора. Для каждой силы регуляризации выполните обучение модели линейной классификации, используя весь набор данных и те же опции, что и при перекрестной проверке моделей. Определите количество ненулевых коэффициентов на модель.
Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',Lambda,'GradientTolerance',1e-8); numNZCoeff = sum(Mdl.Beta~=0);
На том же рисунке постройте график перекрестно подтвержденных коэффициентов ошибок классификации и частоты ненулевых коэффициентов для каждой силы регуляризации. Постройте график всех переменных на шкале журнала.
figure; [h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),... log10(Lambda),log10(numNZCoeff)); hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} classification error') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') title('Test-Sample Statistics') hold off

Выберите индексы силы регуляризации, которые уравновешивают предикторную разреженность переменных и низкую ошибку классификации. В этом случае должно быть достаточно значения от 10-4 до 10-1.
idxFinal = 7;
Выберите модель из Mdl с выбранной силой регуляризации.
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal является ClassificationLinear модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.
Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.
Рассмотрим следующий сценарий.
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).

ClassificationLinear | ClassificationPartitionedLinear | kfoldPredict | loss
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.