Потеря классификации для наблюдений, не используемых в обучении
возвращает перекрестные подтвержденные потери классификации, полученные перекрестным подтвержденным, двоичным файлом, линейной моделью 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' | Минимальный ожидал стоимость misclassification (для классификационных оценок, которые являются апостериорными вероятностями), |
'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
числовая матрица затрат misclassification. Например, Cost = ones(K) - eye(K)
задает стоимость 0
для правильной классификации и 1
для misclassification.
Задайте свое использование функции 'LossFun', @
.lossfun
Типы данных: char |
string
| function_handle
'Mode'
— Уровень агрегации потерь'average'
(значение по умолчанию) | 'individual'
Уровень агрегации потерь в виде разделенной запятой пары, состоящей из 'Mode'
и 'average'
или 'individual'
.
Значение | Описание |
---|---|
'average' | Возвращает потери, усредненные по всем сгибам |
'individual' | Возвращает потери для каждого сгиба |
Пример: 'Mode','individual'
L
— Перекрестные подтвержденные потери классификацииПерекрестные подтвержденные потери классификации, возвращенные в виде числа, вектора или матрицы. Интерпретация L
зависит от LossFun
.
Позвольте R
будьте количеством сильных мест регуляризации, перекрестные подтвержденные модели (сохраненный в numel(CVMdl.Trained{1}.Lambda)
) и F
будьте количеством сгибов (сохраненный в CVMdl.KFold
).
Если Mode
'average'
, затем L
1 R
вектор. L (
средняя потеря классификации по всем сгибам перекрестной подтвержденной модели, которая использует силу регуляризации j
)j
.
В противном случае, L
F
- R
матрица. L (
потеря классификации для сгиба i
J
)i
из перекрестной подтвержденной модели, которая использует силу регуляризации j
.
Оценить L
, kfoldLoss
использует данные, которые создали CVMdl
(см. X
и Y
).
Загрузите набор данных NLP.
load nlpdata
X
разреженная матрица данных о предикторе и Y
категориальный вектор из меток класса. В данных существует больше чем два класса.
Модели должны идентифицировать, являются ли подсчеты слов в веб-странице из документации Statistics and Machine Learning Toolbox™. Так, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.
Ystats = Y == 'stats';
Перекрестный подтвердите двоичный файл, линейная модель классификации, которая может идентифицировать, являются ли подсчеты слов в веб-странице документации из документации Statistics and Machine Learning 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';
Перекрестный подтвердите двоичный файл, линейная модель классификации использование 5-кратной перекрестной проверки. Оптимизируйте использование целевой функции 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);
Перекрестный подтвердите двоичный файл, линейные модели классификации с помощью 5-кратной перекрестной проверки и того использования каждые из сильных мест регуляризации. Оптимизируйте использование целевой функции 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
Выберите индексы силы регуляризации, которая балансирует разреженность переменного предиктора и низкую ошибку классификации. В этом случае, значение между к должен быть достаточным.
idxFinal = 7;
Выберите модель из Mdl
с выбранной силой регуляризации.
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal
ClassificationLinear
модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal
и новые данные к predict
.
Функции 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 (Xj). Поэтому mj является скалярной классификационной оценкой, которую модель предсказывает для истинного, наблюдаемого класса.
Весом для наблюдения j является wj. Программное обеспечение нормирует веса наблюдения так, чтобы они суммировали к соответствующей предшествующей вероятности класса. Программное обеспечение также нормирует априорные вероятности, таким образом, они суммируют к 1. Поэтому
Учитывая этот сценарий, следующая таблица описывает поддерживаемые функции потерь, которые можно задать при помощи 'LossFun'
аргумент пары "имя-значение".
Функция потерь | Значение LossFun | Уравнение |
---|---|---|
Биномиальное отклонение | 'binodeviance' | |
Неправильно классифицированный уровень в десятичном числе | 'classiferror' | метка класса, соответствующая классу с максимальным счетом. I {·} является функцией индикатора. |
Потеря перекрестной энтропии | 'crossentropy' |
Взвешенная потеря перекрестной энтропии где веса нормированы, чтобы суммировать к n вместо 1. |
Экспоненциальная потеря | 'exponential' | |
Потеря стержня | 'hinge' | |
Потеря логита | 'logit' | |
Минимальный ожидал стоимость misclassification | 'mincost' |
Программное обеспечение вычисляет взвешенную минимальную ожидаемую стоимость классификации с помощью этой процедуры для наблюдений j = 1..., n.
Взвешенное среднее минимального ожидало, что потеря стоимости misclassification Если вы используете матрицу стоимости по умолчанию (чье значение элемента 0 для правильной классификации и 1 для неправильной классификации), то |
Квадратичная потеря | 'quadratic' |
Этот рисунок сравнивает функции потерь (кроме 'crossentropy'
и 'mincost'
) по счету m для одного наблюдения. Некоторые функции нормированы, чтобы пройти через точку (0,1).
ClassificationLinear
| ClassificationPartitionedLinear
| kfoldPredict
| loss
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.