Класс: ClassificationLinear
Потеря классификации для линейных моделей классификации
использование любой из предыдущих синтаксисов и дополнительных опций задано одним или несколькими L
= loss(___,Name,Value
)Name,Value
парные аргументы. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям или задают функцию потерь классификации.
Mdl
— Двоичный файл, линейная модель классификацииClassificationLinear
объект моделиДвоичный файл, линейная модель классификации, заданная как ClassificationLinear
объект модели. Можно создать ClassificationLinear
объект модели с помощью fitclinear
.
X
— Данные о предиктореДанные о предикторе, заданные как n-by-p полная или разреженная матрица. Эта ориентация X
указывает, что строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным предикторам.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления.
Длина Y
и количество наблюдений в X
должно быть равным.
Типы данных: single
| double
Y
— Метки классаМетки класса, заданные как категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов.
Тип данных Y
должен совпасть с типом данных Mdl.ClassNames
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Отличные классы в Y
должно быть подмножество Mdl.ClassNames
.
Если Y
символьный массив, затем каждый элемент должен соответствовать одной строке массива.
Длина Y
и количество наблюдений в X
должно быть равным.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'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
- K
числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K)
задает стоимость 0
для правильной классификации и 1
для misclassification.
Пример: 'LossFun', @
lossfun
Типы данных: char |
string
| function_handle
'ObservationsIn'
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе, заданная как разделенная запятой пара, состоящая из 'ObservationsIn'
и 'columns'
или 'rows'
.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время выполнения оптимизации.
'Weights'
— Веса наблюденияВеса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights'
и числовой вектор положительных значений. Если вы предоставляете веса, loss
вычисляет взвешенную потерю классификации.
Позвольте n
будьте количеством наблюдений в X
.
numel(Weights)
должен быть n
.
По умолчанию, Weights
единицы (
.n
,1)
loss
нормирует Weights
суммировать до значения априорной вероятности в соответствующем классе.
Типы данных: double |
single
L
— Потери классификацииЗагрузите набор данных NLP.
load nlpdata
X
разреженная матрица данных о предикторе и Y
категориальный вектор меток класса. В данных существует больше чем два класса.
Модели должны идентифицировать, являются ли подсчеты слов в веб-странице из документации Statistics and Machine Learning Toolbox™. Так, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.
Ystats = Y == 'stats';
Обучите двоичный файл, линейная модель классификации, которая может идентифицировать, являются ли подсчеты слов в веб-странице документации из документации Statistics and Machine Learning Toolbox™. Задайте, чтобы протянуть 30% наблюдений. Оптимизируйте использование целевой функции SpaRSA.
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30); CMdl = CVMdl.Trained{1};
CVMdl
ClassificationPartitionedLinear
модель. Это содержит свойство Trained
, который является массивом ячеек 1 на 1, содержащим ClassificationLinear
модель, что программное обеспечение обучило использование набора обучающих данных.
Извлеките обучение и тестовые данные из определения раздела.
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
Оцените обучение - и демонстрационная тестом ошибка классификации.
ceTrain = loss(CMdl,X(trainIdx,:),Ystats(trainIdx))
ceTrain = 1.3572e-04
ceTest = loss(CMdl,X(testIdx,:),Ystats(testIdx))
ceTest = 5.2804e-04
Поскольку существует одна сила регуляризации в CMdl
, ceTrain
и ceTest
числовые скаляры.
Загрузите набор данных NLP. Предварительно обработайте данные как в Оценочной Потере Классификации Тестовых Выборок и транспонируйте данные о предикторе.
load nlpdata Ystats = Y == 'stats'; X = X';
Обучите двоичный файл, линейную модель классификации. Задайте, чтобы протянуть 30% наблюдений. Оптимизируйте использование целевой функции SpaRSA. Укажите, что наблюдения предиктора соответствуют столбцам.
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30,... 'ObservationsIn','columns'); CMdl = CVMdl.Trained{1};
CVMdl
ClassificationPartitionedLinear
модель. Это содержит свойство Trained
, который является массивом ячеек 1 на 1, содержащим ClassificationLinear
модель, что программное обеспечение обучило использование набора обучающих данных.
Извлеките обучение и тестовые данные из определения раздела.
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
Создайте анонимную функцию, которая измеряет линейную потерю, то есть,
вес для наблюдения j, ответ j (-1 для отрицательного класса, и 1 в противном случае), и необработанный счет классификации наблюдения j. Пользовательские функции потерь должны быть написаны в конкретной форме. Для правил о записи пользовательской функции потерь смотрите LossFun
аргумент пары "имя-значение".
linearloss = @(C,S,W,Cost)sum(-W.*sum(S.*C,2))/sum(W);
Оцените обучение - и демонстрационная тестом потеря классификации с помощью линейной функции потерь.
ceTrain = loss(CMdl,X(:,trainIdx),Ystats(trainIdx),'LossFun',linearloss,... 'ObservationsIn','columns')
ceTrain = -7.8330
ceTest = loss(CMdl,X(:,testIdx),Ystats(testIdx),'LossFun',linearloss,... 'ObservationsIn','columns')
ceTest = -7.7383
Чтобы определить хорошую силу штрафа лассо для линейной модели классификации, которая использует ученика логистической регрессии, сравните демонстрационные тестом коэффициенты ошибок классификации.
Загрузите набор данных NLP. Предварительно обработайте данные, когда в Задают Пользовательскую Потерю Классификации.
load nlpdata Ystats = Y == 'stats'; X = X'; rng(10); % For reproducibility Partition = cvpartition(Ystats,'Holdout',0.30); testIdx = test(Partition); XTest = X(:,testIdx); YTest = Ystats(testIdx);
Создайте набор 11 логарифмически распределенных сильных мест регуляризации от через .
Lambda = logspace(-6,-0.5,11);
Обучите двоичный файл, линейные модели классификации, которые используют каждые из сильных мест регуляризации. Оптимизируйте использование целевой функции SpaRSA. Понизьте допуск на градиент целевой функции к 1e-8
.
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'CVPartition',Partition,'Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = classreg.learning.partition.ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 1 Partition: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none' Properties, Methods
Извлеките обученную линейную модель классификации.
Mdl = CVMdl.Trained{1}
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023x11 double] Bias: [1x11 double] Lambda: [1x11 double] Learner: 'logistic' Properties, Methods
Mdl
ClassificationLinear
объект модели. Поскольку Lambda
последовательность сильных мест регуляризации, можно думать о Mdl
как 11 моделей, один для каждой силы регуляризации в Lambda
.
Оцените демонстрационную тестом ошибку классификации.
ce = loss(Mdl,X(:,testIdx),Ystats(testIdx),'ObservationsIn','columns');
Поскольку существует 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 + 1)); 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, указывая на отрицательный или положительный класс, соответственно.
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].
По умолчанию веса наблюдения являются предшествующими вероятностями класса. Если вы предоставляете веса с помощью Weights
, затем программное обеспечение нормирует их, чтобы суммировать к априорным вероятностям в соответствующих классах. Программное обеспечение использует повторно нормированные веса, чтобы оценить взвешенную потерю классификации.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.