selectModels

Класс: ClassificationLinear

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

Описание

пример

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