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

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

Перекрестные подтвержденные баллы классификации, возвращенные как n-by-2-by-L числовой массив. n является количеством наблюдений в данных о предикторе, которые создали CVMdl (см. X) и L является количеством сильных мест регуляризации в CVMdl.Trained{1}.Lambda. Счет (iKJ) счет к классификации наблюдения i в класс k использование линейной модели классификации, которая имеет силу регуляризации CVMdl. Обученный {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Метка вектор-столбец прогнозов, содержащих столько же строк сколько наблюдения в X.

Создайте матрицу беспорядка.

ConfusionTrain = confusionchart(Ystats,label);

Модель неправильно классифицирует 15 'stats' страницы документации, как являющиеся за пределами документации Statistics and Machine Learning Toolbox, и, неправильно классифицируют девять страниц как 'stats' страницы.

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

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

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')

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

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

Загрузите набор данных NLP. Предварительно обработайте данные как в Оценочной Перекрестной проверке k-сгиба Следующие Вероятности Класса.

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

В тестовой выборке существует 9 471 наблюдение.

Создайте набор 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 = 
  classreg.learning.partition.ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1×1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023×11 double]
              Bias: [-13.2904 -13.2904 -13.2904 -13.2904 -9.9357 -7.0782 -5.4335 -4.5473 -3.4223 -3.1649 -2.9795]
            Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162]
           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

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

idxFinal = 9;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

Больше о

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

Введенный в R2016a