predict

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

Синтаксис

ypred = predict(mdl,Xnew)
[ypred,yci] = predict(mdl,Xnew)
[ypred,yci] = predict(mdl,Xnew,Name,Value)

Описание

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

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

[ypred,yci] = predict(mdl,Xnew,Name,Value) предсказывает ответы с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы.

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

mdl

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

Xnew

Точки, в который mdl предсказывает ответы.

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

  • Если Xnew числовая матрица, она должна иметь то же количество переменных (столбцы), как использовался, чтобы создать mdl. Кроме того, все переменные используются в создании mdl mustBeNumeric.

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

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

'Alpha'

Положительная скалярная величина от 0 к 1. Доверительный уровень yci 100 (1 – alpha)%.

Значение по умолчанию: 0.05, значение 95%-го доверительного интервала.

'BinomialSize'

Значение биномиального параметра n для каждой строки в обучающих данных. BinomialSize может быть вектор та же длина как Xnew, или скаляр, который применяется к каждой строке. Значение по умолчанию 1 производит ypred значения, которые являются предсказанными пропорциями. Используйте BinomialSize только если mdl является подходящим к биномиальному распределению.

Значение по умолчанию: 1

'Offset'

Значение смещения для каждой строки в Xnew. Offset может быть вектор та же длина как Xnew, или скаляр, который применяется к каждой строке. Смещение используется в качестве дополнительного предиктора с содействующим значением, зафиксированным в 1. Другими словами, если b подходящий вектор коэффициентов и link функция ссылки,

link(ypred) = Offset + Xnew * b.

Значение по умолчанию: zeros(size(Xnew,1))

'Simultaneous'

Логическое значение, задающее, являются ли доверительные границы для всех значений предиктора одновременно (true), или содержите для каждого отдельного значения предиктора (false). Одновременные границы более широки, чем отдельные границы, потому что это является более строгим, чтобы потребовать что целая кривая быть в границах, чем потребовать что кривая в одном значении предиктора быть в границах.

Для получения дополнительной информации смотрите polyconf.

По умолчанию: false

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

ypred

Вектор предсказанных средних значений в Xnew.

yci

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

Примеры

развернуть все

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

Сгенерируйте искусственные данные для модели с помощью случайных чисел Пуассона с двумя базовыми предикторами 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','distr','poisson');

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

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

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

ypred = predict(mdl,Xnew);

Постройте прогнозы.

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

Создайте доверительные интервалы на прогнозах.

[ypred yci] = predict(mdl,Xnew);

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

Сгенерируйте искусственные данные.

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(:)];

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

saveLearnerForCoder(mdl,'GLMMdl');

Задайте функцию в своей рабочей папке под названием mypredictGLM.m это:

  • Принимает измерения со столбцами, соответствующими тем в Xnew и допустимые аргументы пары "имя-значение"

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

  • Возвращает границы доверительного интервала и прогнозы

function [yhat,ci] = mypredictGLM(x,varargin) %#codegen
%MYPREDICTGLM Predict response using GLM model 
%   MYPREDICTGLM predicts responses for the n observations in the n-by-1
%   vector x using 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

Сгенерируйте MEX-функцию от mypredictGLM.m. Задайте возвращающиеся 90%-е одновременные доверительные интервалы на прогнозах. Поскольку C использует статический контроль типов, codegen должен определить свойства всех переменных в файлах MATLAB® во время компиляции. Чтобы определять аргументы как константы времени компиляции, используйте coder.Constant.

codegen -config:mex mypredictGLM -args {Xnew,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}

Файл MEX mypredictGLM_mex.mexw64 генерирует к вашей рабочей директории. Расширение файла зависит от вашей платформы системы.

Сравните прогнозы при помощи 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);

comp1 = (yhat1 - yhat2)'*(yhat1 - yhat2);
comp2 = diag((ci1 - ci2)'*(ci1 - ci2));
agree1 = comp1 < eps
agree2 = comp2 < eps
agree1 =

  logical

   1


agree2 =

  2x1 logical array

   1
   1

Сгенерированный файл MEX производит те же прогнозы как predict.

Советы

  • Для прогнозов с добавленным шумом используйте random.

  • Для синтаксиса, который может быть легче использовать с моделями, созданными из массивов набора данных, попробуйте feval.

Альтернативы

feval возвращает те же прогнозы, но использует отдельные входные массивы в каждом предикторе, вместо одного входного массива, содержащего все предикторы.

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

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

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