exponenta event banner

kfoldPredict

Прогнозирование меток для наблюдений, не используемых для обучения

Описание

пример

Label = kfoldPredict(CVMdl) возвращает метки класса с перекрестной проверкой, предсказанные моделью с перекрестной проверкой, двоичной линейной классификацией CVMdl. То есть, для каждого раза, kfoldPredict предсказывает метки классов для наблюдений, которые он выдает, когда он тренируется с использованием всех других наблюдений.

Label содержит прогнозируемые метки класса для каждой силы регуляризации в моделях линейной классификации, которые составляют CVMdl.

пример

[Label,Score] = kfoldPredict(CVMdl) также возвращает перекрестно проверенные оценки классификации для обоих классов. Score содержит классификационные оценки для каждой силы регуляризации в CVMdl.

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

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

Перекрестно проверенная, двоичная, линейная модель классификации, указанная как ClassificationPartitionedLinear объект модели. Можно создать ClassificationPartitionedLinear модель с использованием fitclinear и указание любого из аргументов пары «имя-значение» перекрестной проверки, например, CrossVal.

Чтобы получить оценки, kfoldPredict применяет те же данные, которые используются для перекрестной проверки модели линейной классификации (X и Y).

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

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

Перекрестная проверка, прогнозируемые метки класса, возвращаемые как категориальный или символьный массив, логическая или числовая матрица или массив ячеек символьных векторов.

В большинстве случаев Label является массивом n-by-L того же типа данных, что и наблюдаемые метки классов (см. Y) используется для создания CVMdl. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.) n - количество наблюдений в данных предиктора (см. X) и L - количество сильных сторон регуляризации в CVMdl.Trained{1}.Lambda. То есть Label(i,j) - прогнозируемая метка класса для наблюдения i использование модели линейной классификации, которая имеет силу регуляризации CVMdl.Trained{1}.Lambda(j).

Если Y является массивом символов и L > 1, то Label является массивом ячеек меток классов.

Перекрестно проверенные оценки классификации, возвращенные в виде n-by-2-by-L числового массива. n - количество наблюдений в данных предиктора, которые были созданы CVMdl (см. X) и L - количество сильных сторон регуляризации в CVMdl.Trained{1}.Lambda. Score(i,k,j) является оценкой для классификации наблюдения i в класс k использование модели линейной классификации, которая имеет силу регуляризации CVMdl.Trained{1}.Lambda(j). CVMdl.ClassNames сохраняет порядок классов.

Если CVMdl.Trained{1}.Learner является 'logistic', то классификационные оценки являются задними вероятностями.

Примеры

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

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

load nlpdata

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

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

Ystats = Y == 'stats';

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

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'CrossVal','on');
Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [34023x1 double]
              Bias: -1.0008
            Lambda: 3.5193e-05
           Learner: 'svm'


  Properties, Methods

CVMdl является ClassificationPartitionedLinear модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно изменить количество сгибов с помощью 'KFold' аргумент пары имя-значение.

Прогнозировать метки для наблюдений, которые fitclinear не использовал при обучении складки.

label = kfoldPredict(CVMdl);

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

Создайте матрицу путаницы.

ConfusionTrain = confusionchart(Ystats,label);

Figure contains an object of type ConfusionMatrixChart.

Модель имеет неправильную классификацию 15 'stats' страницы документации как находящиеся вне документации набора инструментов для статистического и машинного обучения, и неправильно классифицирует девять страниц как 'stats' страницы.

Модели линейной классификации возвращают апостериорные вероятности только для учащихся с логистической регрессией.

Загрузите набор данных NLP и выполните его предварительную обработку, как в разделе Предсказание k-кратных меток перекрестной проверки. Транспонируйте матрицу данных предиктора.

load nlpdata
Ystats = Y == 'stats';
X = X';

Перекрестная проверка двоичных линейных классификационных моделей с использованием пятикратной перекрестной проверки. Оптимизируйте целевую функцию с помощью SpaRSA. Понизить допуск на градиенте целевой функции до 1e-8.

rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'KFold',5,'Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','GradientTolerance',1e-8);

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

[~,posterior] = kfoldPredict(CVMdl);
CVMdl.ClassNames
ans = 2x1 logical array

   0
   1

Потому что есть одна сила регуляризации в CVMdl, posterior - матрица с 2 столбцами и строками, равными количеству наблюдений. Колонка i содержит задние вероятности Mdl.ClassNames(i) с учетом особого замечания.

Получите ложные и истинные положительные показатели и оцените AUC. Укажите, что второй класс является положительным.

[fpr,tpr,~,auc] = perfcurve(Ystats,posterior(:,2),CVMdl.ClassNames(2));
auc
auc = 0.9990

AUC: 0.9990, что указывает на модель, которая хорошо предсказывает.

Постройте график кривой ROC.

figure;
plot(fpr,tpr)
h = gca;
h.XLim(1) = -0.1;
h.YLim(2) = 1.1;
xlabel('False positive rate')
ylabel('True positive rate')
title('ROC Curve')

Figure contains an axes. The axes with title ROC Curve contains an object of type line.

Кривая ROC показывает, что модель классифицируется почти идеально.

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

Загрузите набор данных NLP. Предварительная обработка данных, как в оценке k-кратной перекрестной проверки вероятности заднего класса.

load nlpdata
Ystats = Y == 'stats';
X = X';

В тестовом образце имеется 9471 наблюдение.

Создайте набор из 11 логарифмически разнесенных уровней регуляризации от 10-6 до 10-0,5.

Lambda = logspace(-6,-0.5,11);

Перекрестная проверка двоичных линейных моделей классификации, которые используют каждую из уровней регуляризации и пятикратную перекрестную проверку. Оптимизируйте целевую функцию с помощью SpaRSA. Понизить допуск на градиенте целевой функции до 1e-8.

rng(10) % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns', ...
    'KFold',5,'Learner','logistic','Solver','sparsa', ...
    'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023x11 double]
              Bias: [1x11 double]
            Lambda: [1x11 double]
           Learner: 'logistic'


  Properties, Methods

Mdl1 является ClassificationLinear объект модели. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о Mdl1 как 11 моделей, по одной для каждой силы регуляризации в Lambda.

Предсказать перекрестно проверенные метки и вероятности заднего класса.

[label,posterior] = kfoldPredict(CVMdl);
CVMdl.ClassNames;
[n,K,L] = size(posterior)
n = 31572
K = 2
L = 11
posterior(3,1,5)
ans = 1.0000

label является матрицей предсказанных меток 31572 на 11. Каждый столбец соответствует прогнозируемым меткам модели, обученной с использованием соответствующей силы регуляризации. posterior является матрицей 31572-на-2-на-11 вероятности заднего класса. Столбцы соответствуют классам, а страницы соответствуют уровням регуляризации. Например, posterior(3,1,5) указывает, что апостериорная вероятность того, что первый класс (метка 0) назначается наблюдению 3 моделью, которая использует Lambda(5) поскольку сила регуляризации составляет 1,0000.

Для каждой модели вычислите AUC. Обозначьте второй класс как положительный.

auc = 1:numel(Lambda);  % Preallocation
for j = 1:numel(Lambda)
    [~,~,~,auc(j)] = perfcurve(Ystats,posterior(:,2,j),CVMdl.ClassNames(2));
end

Более высокие значения 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(auc), ...
    log10(Lambda),log10(numNZCoeff + 1)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} AUC')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
title('Cross-Validated Statistics')
hold off

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

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

idxFinal = 9;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

Подробнее

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

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