exponenta event banner

край

Класс: Линейный

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

Описание

пример

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

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

Примеры

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

Загрузите набор данных NLP.

load nlpdata

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

Модели должны определять, содержится ли подсчет слов на веб-странице в документации Toolbox™ статистики и машинного обучения. Таким образом, определите метки, соответствующие страницам документации Toolbox™ статистики и машинного обучения.

Ystats = Y == 'stats';

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

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

LambdaFinal = Lambda(5);

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

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

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

Подробнее

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

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

Представлен в R2016a