предсказать

Класс: ClassificationLinear

Предскажите метки для линейных моделей классификации

Синтаксис

Label = predict(Mdl,X)
Label = predict(Mdl,X,Name,Value)
[Label,Score] = predict(___)

Описание

пример

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

пример

Label = predict(Mdl,X,Name,Value) возвращает предсказанные метки класса с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям.

пример

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

Входные параметры

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

Двоичный файл, линейная модель классификации, заданная как объект модели ClassificationLinear. Можно создать объект модели ClassificationLinear с помощью fitclinear.

Данные о предикторе, заданные как n-by-p полная или разреженная матрица. Эта ориентация X указывает, что строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным прогноза.

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', то вы можете испытать значительное сокращение во время вычисления.

Типы данных: single | double

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Размерность наблюдения данных о предикторе, заданная как пара, разделенная запятой, состоящая из 'ObservationsIn' и 'columns' или 'rows'.

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', то вы можете испытать значительное сокращение во время выполнения оптимизации.

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

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

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

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

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

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

Если Mdl.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 
Mdl = fitclinear(X,Ystats);

Mdl является моделью ClassificationLinear.

Предскажите учебную выборку, или перезамену, метки.

label = predict(Mdl,X);

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

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

ConfusionTrain = confusionchart(Ystats,label);

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

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

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

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

rng(1) % For reproducibility 
CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30,...
    'ObservationsIn','columns');
Mdl = CVMdl.Trained{1};

CVMdl является моделью ClassificationPartitionedLinear. Это содержит свойство Trained, которое является массивом ячеек 1 на 1, содержащим модель ClassificationLinear, что программное обеспечение обучило использование набора обучающих данных.

Извлеките обучение и тестовые данные из определения раздела.

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

Предскажите обучение - и демонстрационные тестом метки.

labelTrain = predict(Mdl,X(:,trainIdx),'ObservationsIn','columns');
labelTest = predict(Mdl,X(:,testIdx),'ObservationsIn','columns');

Поскольку существует одна сила регуляризации в Mdl, labelTrain и labelTest являются вектор-столбцами с длинами, равными количеству обучения, и тестируют наблюдения, соответственно.

Создайте матрицу беспорядка для данных тренировки.

ConfusionTrain = confusionchart(Ystats(trainIdx),labelTrain);

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

Создайте матрицу беспорядка для тестовых данных.

ConfusionTest = confusionchart(Ystats(testIdx),labelTest);

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

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

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

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

Случайным образом разделите данные в наборы обучающих данных и наборы тестов путем определения 30%-й выборки затяжки. Идентифицируйте индексы набора тестов.

cvp = cvpartition(Ystats,'Holdout',0.30);
idxTest = test(cvp);

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

CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','CVPartition',cvp,...
    'Learner','logistic','Solver','sparsa');
Mdl = CVMdl.Trained{1};

Mdl является обученным использованием модели ClassificationLinear набора обучающих данных, заданного в разделе cvp только.

Предскажите демонстрационные тестом следующие вероятности класса.

[~,posterior] = predict(Mdl,X(:,idxTest),'ObservationsIn','columns');

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

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

[fpr,tpr,~,auc] = perfcurve(Ystats(idxTest),posterior(:,2),Mdl.ClassNames(2));
auc
auc = 0.9985

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

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

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

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

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

Создайте раздел данных, который задает к затяжке 10% наблюдений. Извлеките демонстрационные тестом индексы.

rng(10); % For reproducibility
Partition = cvpartition(Ystats,'Holdout',0.10);
testIdx = test(Partition);
XTest = X(:,testIdx);
n = sum(testIdx)
n = 3157
YTest = Ystats(testIdx);

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

Создайте набор 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 = 
  classreg.learning.partition.ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 1
              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

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

Оцените, что тестовая выборка предсказала метки и следующие вероятности класса.

[label,posterior] = predict(Mdl1,XTest,'ObservationsIn','columns');
Mdl1.ClassNames;
posterior(3,1,5)
ans = 1.0000

label 3157 11 матрица предсказанных меток. Каждый столбец соответствует предсказанным меткам модели, обученной с помощью соответствующей силы регуляризации. posterior является 3157 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(YTest,posterior(:,2,j),Mdl1.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('Test-Sample Statistics')
hold off

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

idxFinal = 9;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

Больше о

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

Расширенные возможности

Введенный в R2016a