margin

Класс: ClassificationLinear

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

Описание

пример

m = margin(Mdl,X,Y) возвращает поля классификации для двоичной, линейной модели классификации Mdl использование данных предиктора в X и соответствующие метки классов в Y. m содержит классификационные поля для каждой регуляризационной прочности в 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 is n -by - L, где n - количество наблюдений в X и L количество сильных сторон регуляризации в Mdl (то есть numel(Mdl.Lambda)).

м (i, j) - классификационный запас 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. Предварительно обработайте данные как в Estimate Test-Sample Margins.

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. Предварительно обработайте данные как в Estimate Test-Sample Margins.

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. Более высокие значения лямбды приводят к разреженности переменной предиктора, которая является хорошим качеством классификатора.

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

LambdaFinal = Lambda(5);

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

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

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

Подробнее о

расширить все

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

Введенный в R2016a