predict

Класс: ClassificationLinear

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

Описание

пример

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

пример

Label = predict(Mdl,X,'ObservationsIn',dimension) задает размерность наблюдения данных предиктора, либо 'rows' (по умолчанию) или 'columns'. Для примера задайте 'ObservationsIn','columns' чтобы указать, что столбцы в данных предиктора соответствуют наблюдениям.

пример

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

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

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

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

Данные предиктора, которые будут классифицированы, заданы как полная или разреженная числовая матрица или таблица.

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

  • Для числовой матрицы:

    • Переменные в столбцах X должен иметь тот же порядок, что и переменные предиктора, которые обучали Mdl.

    • Если вы обучаете Mdl использование таблицы (для примера, Tbl) и Tbl содержит только числовые переменные предиктора, тогда X может быть числовой матрицей. Для лечения числовых предикторов в Tbl как категориальный во время обучения, идентифицируйте категориальные предикторы с помощью CategoricalPredictors Аргумент пары "имя-значение" из fitclinear. Если Tbl содержит неоднородные переменные предиктора (для примера, числовых и категориальных типов данных) и X является числовой матрицей, тогда predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многополюсные переменные или массивы ячеек, отличные от массивов ячеек векторов символов.

    • Если вы обучаете Mdl использование таблицы (для примера, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и обученные переменные Mdl (хранится в Mdl.PredictorNames). Однако порядок столбцов X не должен соответствовать порядку столбцов Tbl. Кроме того, Tbl и X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.

    • Если вы обучаете Mdl используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames должен быть таким же, как и соответствующий предиктор, имена переменных в X. Чтобы задать имена предикторов во время обучения, используйте PredictorNames Аргумент пары "имя-значение" из fitclinear. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.

Примечание

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

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

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

Примечание

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

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

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

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

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

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

Классификационные оценки, возвращенные как n -by-2-by L числовой массив. n - количество наблюдений в X и L количество сильных сторон регуляризации в Mdl.Lambda. Счет (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 модель.

Спрогнозируйте метки обучающая выборка, или resubstitution.

label = predict(Mdl,X);

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

Создайте матрицу неточностей.

ConfusionTrain = confusionchart(Ystats,label);

Figure contains an object of type ConfusionMatrixChart.

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

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

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

Figure contains an object of type ConfusionMatrixChart.

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

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

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

Figure contains an object of type ConfusionMatrixChart.

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

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

Загрузите набор данных NLP и предварительно обработайте его как в Predict Test-Sample Labels.

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

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

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

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

Загрузите набор данных NLP. Предварительно обработайте данные как в Predict Test-Sample Labels.

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

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

Создайте набор из 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

Извлеките обученную модель линейной классификации.

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

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.

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

idxFinal = 9;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

Подробнее о

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

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

.
Введенный в R2016a