поле

Класс: ClassificationLinear

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

Синтаксис

m = margin(Mdl,X,Y)
m = margin(___,Name,Value)

Описание

пример

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

пример

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

Аргументы в виде пар имя-значение

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

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

Примечание

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

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

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

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

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

m(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'

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

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

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

Граничное распределение 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 = 
  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.

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

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')

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

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

LambdaFinal = Lambda(5);

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

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

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

Больше о

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

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

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

| | |

Введенный в R2016a