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. То есть метка (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. Счет (i, k, j) - счет для классификации наблюдений i в k классов использование линейной классификационной модели, которая имеет силу регуляризации CVMdl.Trained {1} .Lambda (j). CVMdl.ClassNames сохраняет порядок классов.

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

Примеры

расширить все

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

load nlpdata

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

Модели должны определять, получено ли количество слов на веб-странице из документации Statistics and Machine Learning Toolbox™. Итак, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.

Ystats = Y == 'stats';

Перекрестная проверка двоичной линейной модели классификации с помощью всего набора данных, которая может определить, получено ли слово на веб-странице документации из документации Statistics and Machine Learning 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' страницы документации как находящиеся вне документации Statistics and Machine Learning Toolbox, и ошибочно классифицирует девять страниц как 'stats' страниц.

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

Загрузите набор данных NLP и предварительно обработайте его как в Predict k-fold Cross-Validation Labels. Транспонируйте матрицу данных предиктора.

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

Перекрестная валидация двоичных, линейных моделей классификации с помощью 5-кратной перекрестной валидации. Оптимизируйте целевую функцию с помощью 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. Предварительно обработайте данные как в Estimate k-fold Cross-Validation Posterior Class Probabilities.

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

В тестовой выборке 9471 наблюдение.

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

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

Перекрестная проверка двоичных, линейных моделей классификации, которые используют каждую из сильных сторон регуляризации и 5-кратную перекрестную валидацию. Оптимизируйте целевую функцию с помощью 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