loss

Класс: ClassificationLinear

Потеря классификации для линейных моделей классификации

Описание

пример

L = loss(Mdl,X,Y) возвращает потери классификации для двоичного файла, линейной модели Mdl классификации использование данных о предикторе в X и соответствующий класс помечает в YL содержит коэффициенты ошибок классификации для каждой силы регуляризации в Mdl.

L = loss(Mdl,Tbl,ResponseVarName) возвращает потери классификации для данных о предикторе в Tbl и истинный класс помечает в Tbl.ResponseVarName.

L = loss(Mdl,Tbl,Y) возвращает потери классификации для данных о предикторе в таблице Tbl и истинный класс помечает в Y.

пример

L = loss(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям или задают функцию потерь классификации.

Входные параметры

развернуть все

Двоичный файл, линейная модель классификации в виде ClassificationLinear объект модели. Можно создать ClassificationLinear использование объекта модели fitclinear.

Данные о предикторе в виде n-by-p полная или разреженная матрица. Эта ориентация X указывает, что строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным предикторам.

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем вы можете испытать значительное сокращение во время вычисления.

Длина Y и количество наблюдений в X должно быть равным.

Типы данных: single | double

Класс помечает в виде категориального, символа или массива строк; логический или числовой вектор; или массив ячеек из символьных векторов.

  • Тип данных Y должен совпасть с типом данных Mdl.ClassNames. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)

  • Отличные классы в Y должно быть подмножество Mdl.ClassNames.

  • Если Y символьный массив, затем каждый элемент должен соответствовать одной строке массива.

  • Длина Y должно быть равно количеству наблюдений в X или Tbl.

Типы данных: categorical | char | string | logical | single | double | cell

Выборочные данные раньше обучали модель в виде таблицы. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl может содержать дополнительные столбцы для весов наблюдения и переменной отклика. Tbl должен содержать все предикторы, используемые, чтобы обучить Mdl. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.

Если Tbl содержит переменную отклика, используемую, чтобы обучить Mdl, затем вы не должны задавать ResponseVarName или Y.

Если вы обучаете Mdl использование выборочных данных, содержавшихся в таблице, затем входные данные для loss должен также быть в таблице.

Имя переменной отклика в виде имени переменной в Tbl. Если Tbl содержит переменную отклика, используемую, чтобы обучить Mdl, затем вы не должны задавать ResponseVarName.

Если вы задаете ResponseVarName, затем необходимо задать его как вектор символов или строковый скаляр. Например, если переменная отклика хранится как Tbl.Y, затем задайте ResponseVarName как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.Y, как предикторы.

Переменная отклика должна быть категориальным, символом или массивом строк; логический или числовой вектор; или массив ячеек из символьных векторов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

Типы данных: char | string

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Функция потерь в виде разделенной запятой пары, состоящей из 'LossFun' и встроенное имя функции потерь или указатель на функцию.

  • В следующей таблице перечислены доступные функции потерь. Задайте тот с помощью его соответствующего вектора символов или строкового скаляра.

    ЗначениеОписание
    'binodeviance'Биномиальное отклонение
    'classiferror'Неправильно классифицированный уровень в десятичном числе
    'exponential'Экспоненциальная потеря
    'hinge'Потеря стержня
    'logit'Логистическая потеря
    'mincost'Минимальный ожидал стоимость misclassification (для классификационных оценок, которые являются апостериорными вероятностями),
    'quadratic'Квадратичная потеря

    'mincost' подходит для классификационных оценок, которые являются апостериорными вероятностями. Для линейных моделей классификации ученики логистической регрессии возвращают апостериорные вероятности как классификационные оценки по умолчанию, но ученики SVM не делают (см. predict).

  • Чтобы задать пользовательскую функцию потерь, используйте обозначение указателя на функцию. Функция должна иметь эту форму:

    lossvalue = lossfun(C,S,W,Cost)

    • Выходной аргумент lossvalue скаляр.

    • Вы задаете имя функции (lossfun).

    • C n- K логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение. n количество наблюдений в Tbl или X, и K количество отличных классов (numel(Mdl.ClassNames). Порядок следования столбцов соответствует порядку класса в Mdl.ClassNames. Создайте C установкой C(p,q) = 1, если наблюдение p находится в классе q, для каждой строки. Установите все другие элементы строки p к 0.

    • S n- K числовая матрица классификационных оценок. Порядок следования столбцов соответствует порядку класса в Mdl.ClassNamesS матрица классификационных оценок, похожих на выход predict.

    • W n- 1 числовой вектор из весов наблюдения.

    • Cost K- K числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K) задает стоимость 0 для правильной классификации и 1 для misclassification.

Пример: 'LossFun', @lossfun

Типы данных: char | string | function_handle

Размерность наблюдения данных о предикторе в виде 'rows' или 'columns'.

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns' для данных о предикторе в таблице.

Типы данных: char | string

Веса наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и числовой вектор или имя переменной в Tbl.

  • Если вы задаете Weights как числовой вектор, затем размер Weights должно быть равно количеству наблюдений в X или Tbl.

  • Если вы задаете Weights как имя переменной в Tbl, затем имя должно быть вектором символов или строковым скаляром. Например, если веса хранятся как Tbl.W, затем задайте Weights как 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.W, как предикторы.

Если вы предоставляете веса, то для каждой силы регуляризации, loss вычисляет взвешенную потерю классификации и нормирует веса, чтобы суммировать до значения априорной вероятности в соответствующем классе.

Типы данных: double | single

Выходные аргументы

развернуть все

Потери классификации, возвращенные в виде числа или вектора-строки. Интерпретация L зависит от Weights и LossFun.

L одного размера с Mdl.Lambda. L (j) потеря классификации линейной модели классификации, обученной с помощью силы регуляризации Mdl. Lambda (j).

Примеры

развернуть все

Загрузите набор данных 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);

Создайте анонимную функцию, которая измеряет линейную потерю, то есть,

L=j-wjyjfjjwj.

wj вес для наблюдения j, yj ответ j (-1 для отрицательного класса, и 1 в противном случае), и fj необработанная классификационная оценка наблюдения 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 логарифмически распределенных сильных мест регуляризации от 10-6 через 10-0.5.

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 = 
  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: [-12.1393 -12.1393 -12.1393 -12.1393 -12.1393 ... ]
            Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 ... ]
           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

Figure contains 2 axes objects. Axes object 1 with title Test-Sample Statistics contains an object of type line. Axes object 2 contains an object of type line.

Выберите индекс силы регуляризации, которая балансирует разреженность переменного предиктора и низкую ошибку классификации. В этом случае, значение между 10-4 к 10-1 должен быть достаточным.

idxFinal = 7;

Выберите модель из Mdl с выбранной силой регуляризации.

MdlFinal = selectModels(Mdl,idxFinal);

MdlFinal ClassificationLinear модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные к predict.

Больше о

развернуть все

Алгоритмы

По умолчанию веса наблюдения являются предшествующими вероятностями класса. Если вы предоставляете веса с помощью Weights, затем программное обеспечение нормирует их, чтобы суммировать к априорным вероятностям в соответствующих классах. Программное обеспечение использует повторно нормированные веса, чтобы оценить взвешенную потерю классификации.

Расширенные возможности

Смотрите также

| |

Введенный в R2016a