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 = 
  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

Figure contains 2 axes. Axes 1 with title Test-Sample Statistics contains an object of type line. Axes 2 contains an object of type line.

Выберите индекс силы регуляризации, который балансирует переменную разреженности предиктора и низкую ошибку классификации. В этом случае значение между 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