predict

Предскажите ответы обобщенной линейной модели регрессии

Описание

пример

ypred = predict(mdl,Xnew) возвращает предсказанные значения отклика обобщенной линейной модели mdl регрессии к точкам в Xnew.

[ypred,yci] = predict(mdl,Xnew) также возвращает доверительные интервалы для ответов в Xnew.

пример

[ypred,yci] = predict(mdl,Xnew,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать доверительный уровень доверительного интервала.

Примеры

свернуть все

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

Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с двумя базовыми предикторами X(:,1) и X(:,2).

rng('default') % For reproducibility
rndvars = randn(100,2);
X = [2 + rndvars(:,1),rndvars(:,2)];
mu = exp(1 + X*[1;2]);
y = poissrnd(mu);

Создайте обобщенную линейную модель регрессии данных Пуассона.

mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');

Создайте точки данных для предсказания.

[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);
Xnew = [Xtest1(:),Xtest2(:)];

Предскажите ответы в точках данных.

ypred = predict(mdl,Xnew);

Постройте предсказания.

surf(Xtest1,Xtest2,reshape(ypred,9,9))

Figure contains an axes. The axes contains an object of type surface.

Подбирайте обобщенную линейную модель регрессии, и затем сохраните модель при помощи saveLearnerForCoder. Задайте функцию точки входа, которая загружает модель при помощи loadLearnerForCoder и вызывает predict функция подобранной модели. Затем используйте codegen (MATLAB Coder), чтобы сгенерировать код C/C++. Обратите внимание на то, что генерация кода C/C++ требует MATLAB® Coder™.

Этот пример кратко объясняет рабочий процесс генерации кода для предсказания моделей линейной регрессии в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения в Командной строке. Можно также сгенерировать код с помощью приложения MATLAB Coder. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения Используя Приложение MATLAB Coder.

Обучите модель

Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с двумя базовыми предикторами X(:,1) и X(:,2).

rng('default') % For reproducibility
rndvars = randn(100,2);
X = [2 + rndvars(:,1),rndvars(:,2)];
mu = exp(1 + X*[1;2]);
y = poissrnd(mu);

Создайте обобщенную линейную модель регрессии. Задайте распределение Пуассона для ответа.

mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');

Сохраните модель

Сохраните подбиравшую обобщенную линейную модель регрессии в файл GLMMdl.mat при помощи saveLearnerForCoder.

saveLearnerForCoder(mdl,'GLMMdl');

Задайте функцию точки входа

В вашей текущей папке задайте функцию с именем точки входа mypredictGLM.m это делает следующее:

  • Примите новый вход предиктора и допустимые аргументы пары "имя-значение".

  • Загрузите подбиравшую обобщенную линейную модель регрессии в GLMMdl.mat при помощи loadLearnerForCoder.

  • Возвратите границы доверительного интервала и предсказания.

function [yhat,ci] = mypredictGLM(x,varargin) %#codegen
%MYPREDICTGLM Predict responses using GLM model 
%   MYPREDICTGLM predicts responses for the n observations in the n-by-1
%   vector x using the GLM model stored in the MAT-file GLMMdl.mat,
%   and then returns the predictions in the n-by-1 vector yhat.
%   MYPREDICTGLM also returns confidence interval bounds for the
%   predictions in the n-by-2 vector ci.
CompactMdl = loadLearnerForCoder('GLMMdl');
narginchk(1,Inf);
[yhat,ci] = predict(CompactMdl,x,varargin{:});
end

Добавьте %#codegen директива компилятора (или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые привели бы к ошибкам во время генерации кода.

Сгенерируйте код

Сгенерируйте код для функции точки входа использование codegen (MATLAB Coder). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB®, которое представляет множество значений определенным размером типа данных и массива. Используйте coder.Constant (MATLAB Coder) для имен аргументов пары "имя-значение".

Точки формирования данных для предсказания.

[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);
Xnew = [Xtest1(:),Xtest2(:)];

Сгенерируйте код и задайте возвращающиеся 90%-е одновременные доверительные интервалы на предсказаниях.

codegen mypredictGLM -args {Xnew,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
Code generation successful.

codegen генерирует MEX-функцию mypredictGLM_mex с зависимым платформой расширением.

Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof (MATLAB Coder). Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder).

Проверьте сгенерированный код

Сравните предсказания и доверительные интервалы с помощью predict и mypredictGLM_mex. Задайте аргументы пары "имя-значение" в том же порядке как в -args аргумент в вызове codegen.

[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true);
[yhat2,ci2] = mypredictGLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);

Возвращенные значения от mypredictGLM_mex может включать различия в округлении по сравнению со значениями от predict. В этом случае сравните значения, позволяющие маленький допуск.

find(abs(yhat1-yhat2) > 1e-6)
ans =

  0x1 empty double column vector
find(abs(ci1-ci2) > 1e-6)
ans =

  0x1 empty double column vector

Сравнение подтверждает, что возвращенные значения равны в допуске 1e–6.

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

свернуть все

Обобщенная линейная модель регрессии в виде GeneralizedLinearModel объект создал использование fitglm или stepwiseglm, или CompactGeneralizedLinearModel объект, созданный с помощью compact.

Новые входные значения предиктора в виде таблицы, массива набора данных или матрицы. Каждая строка Xnew соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Если Xnew таблица или массив набора данных, это должно содержать предикторы, которые имеют те же имена предиктора как в PredictorNames свойство mdl.

  • Если Xnew матрица, она должна иметь то же количество переменных (столбцы) в том же порядке, как вход предиктора раньше создавал mdl. Обратите внимание на то, что Xnew должен также содержать любые переменные предикторы, которые не используются в качестве предикторов в подобранной модели. Кроме того, все переменные используются в создании mdl mustBeNumeric. Чтобы обработать числовые предикторы как категориальные, идентифицируйте предикторы с помощью 'CategoricalVars' аргумент пары "имя-значение", когда вы создаете mdl.

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

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

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

Пример: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true) возвращает доверительный интервал yci с 99%-м доверительным уровнем, вычисленным одновременно для всех значений предиктора.

Уровень значения для доверительного интервала в виде разделенной запятой пары, состоящей из 'Alpha' и числовое значение в области значений [0,1]. Доверительный уровень yci равно 100 (1 – Alpha) %. Alpha вероятность, что доверительный интервал не содержит истинное значение.

Пример: 'Alpha',0.01

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

Количество испытаний за биномиальное распределение в виде разделенной запятой пары, состоящей из 'BinomialSize' и скаляр или вектор из той же длины как ответ. predict расширяет скалярный вход в постоянный массив одного размера с ответом. Скалярный вход означает, что все наблюдения имеют то же количество испытаний.

Значение выходных значений в ypred зависит от значения 'BinomialSize'.

  • Если 'BinomialSize' 1 (значение по умолчанию), затем каждое значение в выходе ypred вероятность успеха.

  • Если 'BinomialSize' не 1, затем каждое значение в выходе ypred предсказанное количество успехов в испытаниях.

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

Возместите значение для каждой строки в XnewВ виде разделенной запятой пары, состоящей из 'Offset' и скаляр или вектор с той же длиной как ответ. predict расширяет скалярный вход в постоянный массив одного размера с ответом.

Обратите внимание на то, что значением по умолчанию этого аргумента является нулевой вектор, даже если вы задаете 'Offset' аргумент пары "имя-значение" при подбирании модели. Если вы задаете 'Offset' для подбора кривой программное обеспечение обрабатывает смещение как дополнительный предиктор с содействующим значением, зафиксированным в 1. Другими словами, формула для подбора кривой

f (μ) = Offset + X*b,

где f является функцией ссылки, μ является средним ответом, и X *b является линейной комбинацией предикторов X. Offset предиктор имеет коэффициент 1.

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

Отметьте, чтобы вычислить одновременные доверительные границы в виде разделенной запятой пары, состоящей из 'Simultaneous' и любой TRUE или FALSE.

  • truepredict вычисляет доверительные границы для кривой значений отклика, соответствующих всем значениям предиктора в Xnew, использование метода Шеффа. Область значений между верхними и нижними границами содержит кривую, состоящую из истинных значений отклика с 100 (1 – α) доверие %.

  • falsepredict вычисляет доверительные границы для значения отклика при каждом наблюдении в Xnew. Доверительный интервал для значения отклика в определенном значении предиктора содержит истинное значение отклика с 100 (1 – α) доверие %.

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

Пример: 'Simultaneous',true

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

свернуть все

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

Для биномиальной модели, значения выходных значений в ypred зависит от значения 'BinomialSize' аргумент пары "имя-значение".

  • Если 'BinomialSize' 1 (значение по умолчанию), затем каждое значение в выходе ypred вероятность успеха.

  • Если 'BinomialSize' не 1, затем каждое значение в выходе ypred предсказанное количество успехов в испытаниях.

Для модели со смещением задайте значение смещения при помощи 'Offset' аргумент пары "имя-значение". В противном случае, predict использование 0 как значение смещения.

Доверительные интервалы для ответов, возвращенных как матрица 2D столбца с каждой строкой, обеспечивающей один интервал. Значение доверительного интервала зависит от настроек аргументов пары "имя-значение" 'Alpha' и 'Simultaneous'.

Альтернативная функциональность

  • feval возвращает те же предсказания как predict. feval функция не поддерживает 'Offset' и 'BinomialSize' аргументы в виде пар имя-значение. feval использование 0 как значение смещения и выходные значения в ypred предсказанные вероятности. feval функция может взять несколько входных параметров для новых входных значений предиктора с одним входом для каждого переменного предиктора, который более прост использовать с моделью, созданной из массива набора данных или таблицы. Обратите внимание на то, что feval функция не дает доверительные интервалы на своих предсказаниях.

  • random возвращает предсказания с добавленным шумом.

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

Представленный в R2012a