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 + + требуется Coder™ MATLAB ®.

Этот пример кратко объясняет рабочий процесс генерации кода для предсказания линейных регрессионых моделей в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного Обучения в Командной Строке. Вы также можете сгенерировать код с помощью приложения 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). Для получения дополнительной информации смотрите Specify Variable-Size Arguments for Генерация Кода и Specify Properties of Entry-Point Function Inputs (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 должен быть числовым. Чтобы рассматривать числовые предикторы как категориальные, идентифицируйте предикторы, используя '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 (<reservedrangesplaceholder1>) = Offset + X*b,

где f - ссылка функция, μ - средняя характеристика, а X * b - линейная комбинация предикторов X. The 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 как значение смещения.

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

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

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

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

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

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