exponenta event banner

предсказать

Класс: Линейный

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

Описание

пример

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. То есть 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 является категориальным вектором меток класса. В данных имеется более двух классов.

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

Ystats = Y == 'stats';

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

rng(1); % For reproducibility 
Mdl = fitclinear(X,Ystats);

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

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

label = predict(Mdl,X);

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

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

ConfusionTrain = confusionchart(Ystats,label);

Figure contains an object of type ConfusionMatrixChart.

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

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

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

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

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

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

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