margin

Класс: ClassificationLinear

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

Описание

пример

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

пример

m = margin(Mdl,X,Y,'ObservationsIn',dimension) задает размерность наблюдения данных о предикторе, любой 'rows' (значение по умолчанию) или 'columns'. Например, задайте 'ObservationsIn','columns' указать, что столбцы в данных о предикторе соответствуют наблюдениям.

m = margin(Mdl,Tbl,ResponseVarName) возвращает поля классификации для обученного линейного классификатора Mdl использование данных о предикторе в таблице Tbl и класс помечает в Tbl.ResponseVarName.

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

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

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

Двоичный файл, линейная модель классификации в виде 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

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

Примечание

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

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

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

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

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

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

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

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

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

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

Поля классификации, возвращенные как числовой вектор-столбец или матрица.

m n-by-L, где n является количеством наблюдений в X и L является количеством сильных мест регуляризации в Mdl (то есть, numel(Mdl.Lambda)).

m (iJ) поле классификации наблюдения i с помощью обученной линейной модели классификации, которая имеет силу регуляризации 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);

Оцените обучение - и демонстрационные тестом поля.

mTrain = margin(CMdl,X(trainIdx,:),Ystats(trainIdx));
mTest = margin(CMdl,X(testIdx,:),Ystats(testIdx));

Поскольку существует одна сила регуляризации в CMdl, mTrain и mTest вектор-столбцы с длинами, равными количеству обучения, и тестируют наблюдения, соответственно.

Постройте оба набора полей с помощью диаграмм.

figure;
boxplot([mTrain; mTest],[zeros(size(mTrain,1),1); ones(size(mTest,1),1)], ...
    'Labels',{'Training set','Test set'});
h = gca;
h.YLim = [-5 60];
title 'Training- and Test-Set Margins'

Figure contains an axes. The axes with title Training- and Test-Set Margins contains 14 objects of type line.

Распределения полей между наборами обучающих данных и наборами тестов кажутся подобными.

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

Загрузите набор данных NLP. Предварительно обработайте данные как в Оценочных Полях Тестовой Выборки.

load nlpdata
Ystats = Y == 'stats';
X = X';
rng(1); % For reproducibility

Создайте раздел данных, который протягивает 30% наблюдений для тестирования.

Partition = cvpartition(Ystats,'Holdout',0.30);
testIdx = test(Partition); % Test-set indices
XTest = X(:,testIdx);     
YTest = Ystats(testIdx);

Partition cvpartition объект, который задает раздел набора данных.

Случайным образом выберите 10% переменных предикторов.

p = size(X,1); % Number of predictors
idxPart = randsample(p,ceil(0.1*p));

Обучите два двоичных файла, линейные модели классификации: тот, который использует все предикторы и тот, который использует случайные 10%. Оптимизируйте использование целевой функции SpaRSA и укажите, что наблюдения соответствуют столбцам.

CVMdl = fitclinear(X,Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');
PCVMdl = fitclinear(X(idxPart,:),Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');

CVMdl и PCVMdl ClassificationPartitionedLinear модели.

Извлеките обученный ClassificationLinear модели из перекрестных подтвержденных моделей.

CMdl = CVMdl.Trained{1};
PCMdl = PCVMdl.Trained{1};

Оцените тестовые демонстрационные поля для каждого классификатора. Постройте распределение наборов полей с помощью диаграмм.

fullMargins = margin(CMdl,XTest,YTest,'ObservationsIn','columns');
partMargins = margin(PCMdl,XTest(idxPart,:),YTest,...
    'ObservationsIn','columns');

figure;
boxplot([fullMargins partMargins],'Labels',...
    {'All Predictors','10% of the Predictors'});
h = gca;
h.YLim = [-20 60];
title('Test-Sample Margins')

Figure contains an axes. The axes with title Test-Sample Margins contains 14 objects of type line.

Граничное распределение CMdl расположен выше, чем граничное распределение PCMdl.

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

Загрузите набор данных NLP. Предварительно обработайте данные как в Оценочных Полях Тестовой Выборки.

load nlpdata
Ystats = Y == 'stats';
X = X'; 

Partition = cvpartition(Ystats,'Holdout',0.30);
testIdx = test(Partition);
XTest = X(:,testIdx);
YTest = Ystats(testIdx);

Создайте набор 11 логарифмически распределенных сильных мест регуляризации от 10-8 через 101.

Lambda = logspace(-8,1,11);

Обучите двоичный файл, линейные модели классификации, которые используют каждые из сильных мест регуляризации. Оптимизируйте использование целевой функции SpaRSA. Понизьте допуск на градиент целевой функции к 1e-8.

rng(10); % For reproducibility
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: [1x11 double]
            Lambda: [1x11 double]
           Learner: 'logistic'


  Properties, Methods

Mdl ClassificationLinear объект модели. Поскольку Lambda последовательность сильных мест регуляризации, можно думать о Mdl как 11 моделей, один для каждой силы регуляризации в Lambda.

Оцените демонстрационные тестом поля.

m = margin(Mdl,X(:,testIdx),Ystats(testIdx),'ObservationsIn','columns');
size(m)
ans = 1×2

        9471          11

Поскольку существует 11 сильных мест регуляризации, m имеет 11 столбцов.

Постройте демонстрационные тестом поля для каждой силы регуляризации. Поскольку баллы логистической регрессии находятся в [0,1], поля находятся в [-1,1]. Перемасштабируйте поля, чтобы помочь идентифицировать силу регуляризации, которая максимизирует поля по сетке.

figure;
boxplot(10000.^m)
ylabel('Exponentiated test-sample margins')
xlabel('Lambda indices')

Figure contains an axes. The axes contains 77 objects of type line.

Несколько значений Lambda дайте к граничным распределениям, которые уплотнены рядом 100001. Более высокие значения lambda приводят к разреженности переменного предиктора, которая является хорошим качеством классификатора.

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

LambdaFinal = Lambda(5);

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

MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',LambdaFinal);

Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные к predict.

Больше о

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

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

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

| | |

Введенный в R2016a