exponenta event banner

selectModels

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

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

Описание

пример

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