Класс: Линейный
Прогнозирование меток для линейных классификационных моделей
[ также возвращает оценки классификации для обоих классов, используя любую из комбинаций входных аргументов в предыдущих синтаксисах. Label,Score] = predict(___)Score содержит классификационные оценки для каждой силы регуляризации в Mdl.
Mdl - Модель бинарной линейной классификацииClassificationLinear объект моделиДвоичная, линейная классификационная модель, заданная как ClassificationLinear объект модели. Можно создать ClassificationLinear объект модели с использованием fitclinear.
X - Данные предиктора должны быть классифицированыДанные предиктора, подлежащие классификации, задаются как полная или разреженная числовая матрица или таблица.
По умолчанию каждая строка 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
dimension - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как 'columns' или 'rows'.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени выполнения оптимизации. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
Label - Прогнозируемые метки классовПрогнозируемые метки класса, возвращаемые как категориальный или символьный массив, логическая или числовая матрица или массив ячеек символьных векторов.
В большинстве случаев Label является массивом n-by-L того же типа данных, что и наблюдаемые метки классов (Y) используется для обучения Mdl. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
n - количество наблюдений в X и L - количество сильных сторон регуляризации в Mdl.Lambda. То есть Label( - прогнозируемая метка класса для наблюдения i,j)i использование модели линейной классификации, которая имеет силу регуляризации Mdl.Lambda(.j)
Если Y является массивом символов и L > 1, то Label является массивом ячеек меток классов.
Score - Классификационные баллыКлассификационные баллы, возвращаемые в виде 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 nlpdataX является разреженной матрицей данных предиктора, и 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);

Модель неправильно классифицирует только одну '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);

Модель неверно классифицирует только три страницы документации как находящиеся вне документации Statistics and Machine Learning Toolbox.
Создайте матрицу путаницы для тестовых данных.
ConfusionTest = confusionchart(Ystats(testIdx),labelTest);

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

Кривая 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 логарифмически разнесенных уровней регуляризации от до .
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

Выберите индекс силы регуляризации, который уравновешивает предикторную переменную разреженность и высокий AUC. В этом случае должно быть достаточно значения от 10-2 до 10-1.
idxFinal = 9;
Выберите модель из Mdl с выбранной силой регуляризации.
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal является ClassificationLinear модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.
Для моделей линейной классификации необработанный показатель классификации для классификации наблюдения x, вектора строки, в положительный класс определяется как
+ bj.
Для модели с силой регуляризации j - оцененный вектор-столбец коэффициентов (свойство модели Beta(:,j)) и - оценочное скалярное смещение (свойство модели Bias(j)).
Необработанный показатель классификации для классификации x в отрицательный класс равен -f (x). Программа классифицирует наблюдения в класс, который дает положительную оценку.
Если модель линейной классификации состоит из учащихся с логистической регрессией, то программное обеспечение применяет 'logit' преобразование баллов в необработанные оценки классификации (см. ScoreTransform).
Примечания и ограничения по использованию:
predict не поддерживает высокий table данные.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Можно создать код C/C + + для обоихpredict и update с помощью конфигуратора кодера. Или создайте код только для predict с помощью saveLearnerForCoder, loadLearnerForCoder, и codegen.
Создание кода для predict и update - Создание конфигуратора кодера с помощью learnerCoderConfigurer а затем создать код с помощью generateCode. Затем можно обновить параметры модели в сгенерированном коде без необходимости регенерации кода.
Создание кода для predict - сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen (Кодер MATLAB) для создания кода для функции точки входа.
Чтобы создать код C/C + + с одной точностью для прогнозирования, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
X |
|
| Аргументы пары имя-значение |
|
Дополнительные сведения см. в разделе Введение в создание кода.
ClassificationLinear | confusionchart | fitclinear | loss | perfcurve | testcholdout
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.