selectModels

Класс: ClassificationLinear

Выберите подмножество упорядоченных, бинарных линейных моделей классификации

Синтаксис

SubMdl = selectModels(Mdl,idx)

Описание

пример

SubMdl = selectModels(Mdl,idx) возвращает подмножество обученных, бинарных линейных моделей классификации от набора бинарных линейных моделей классификации (Mdl), обученный с помощью различных сильных мест регуляризации. Индексы (idx) соответствуют сильным местам регуляризации в Mdl.Lambda и задают который модели возвратиться.

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

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

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

Несмотря на то, что Mdl является одним объектом модели, если numel(Mdl.Lambda) = L ≥ 2, то можно думать о Mdl как о L, обучил модели.

Индексы, соответствующие сильным местам регуляризации, заданным как числовой вектор положительных целых чисел. Значения idx должны быть в интервале [1, L], где L = numel(Mdl.Lambda).

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

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

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

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

Примеры

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

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

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

Оцените демонстрационную тестом ошибку классификации.

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

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

idxFinal = 7;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

Советы

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

  1. Протяните фрагмент данных для тестирования.

  2. Обучите двоичный файл, линейная модель классификации использование fitclinear. Задайте сетку сильных мест регуляризации с помощью аргумента пары "имя-значение" ' Lambda ' и снабдите данными тренировки. fitclinear возвращает один объект модели ClassificationLinear, но это содержит модель для каждой силы регуляризации.

  3. Чтобы определить качество каждой упорядоченной модели, передайте возвращенный объект модели и протянутые данные к, например, loss.

  4. Идентифицируйте индексы (idx) удовлетворительного подмножества упорядоченных моделей, и затем передайте возвращенную модель и индексы к selectModels. selectModels возвращает один объект модели ClassificationLinear, но это содержит упорядоченные модели numel(idx).

  5. Чтобы предсказать метки класса для новых данных, передайте данные и подмножество упорядоченных моделей к predict.

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

| | |

Введенный в R2016a