predict

Предсказать отклики линейной регрессионой модели

Описание

пример

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

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

пример

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

Примеры

свернуть все

Создайте квадратичную модель пробега автомобиля как функцию от веса от carsmall набор данных.

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

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

ypred = predict(mdl,X);

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

plot(X,y,'o',X,ypred,'x')
legend('Data','Predictions')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Data, Predictions.

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

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

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

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

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

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

Сохраните подобранную квадратичную модель в файл QLMMdl.mat при помощи saveLearnerForCoder.

saveLearnerForCoder(mdl,'QLMMdl');

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

Задайте функцию точки входа с именем mypredictQLM что делает следующее:

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

  • Загружает установленную квадратичную модель в QLMMdl.mat.

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

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

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

Примечание.Если нажать кнопку, расположенную в правом верхнем разделе этого примера, и открыть пример в MATLAB ®, MATLAB открывает папку примера. Эта папка включает файл функции точки входа.

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

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

Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof (MATLAB Coder). Для получения дополнительной информации смотрите Specify Variable-Size Arguments for Генерация Кода и Specify Properties of Entry-Point Function Inputs (MATLAB Coder).

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

codegen генерирует MEX-функцию mypredictQLM_mex с зависящим от платформы внутренним абонентом.

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

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

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

Возвращенные значения из mypredictQLM_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.

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

h1 = plot(X,y,'k.');
hold on
h2 = plot(Xnew,yhat1,'ro',Xnew,yhat2,'gx');
h3 = plot(Xnew,ci1,'r-','LineWidth',4);
h4 = plot(Xnew,ci2,'g--','LineWidth',2);
legend([h1; h2; h3(1); h4(1)], ...
    {'Data','predict estimates','MEX estimates','predict CIs','MEX CIs'});
xlabel('Weight');
ylabel('MPG');

Figure contains an axes. The axes contains 7 objects of type line. These objects represent Data, predict estimates, MEX estimates, predict CIs, MEX CIs.

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

свернуть все

Объект модели линейной регрессии, заданный как LinearModel объект, созданный при помощи fitlm или stepwiselm, или CompactLinearModel объект, созданный при помощи 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

Тип предсказания, заданный как разделенная разделенными запятой парами, состоящая из 'Prediction' и любой из них 'curve' или 'observation'.

Регрессионная модель для переменных предиктора X и переменной отклика y имеет вид

y = f (<reservedrangesplaceholder1>) + ε,

где f - установленная регрессионная функция, а ε - термин случайного шума.

  • Если 'Prediction' является 'curve', затем predict предсказывает доверительные границы для f (Xnew), подобранные отклики в Xnew.

  • Если 'Prediction' является 'observation', затем predict предсказывает доверительные границы для y, наблюдения отклика в Xnew.

Границы для y шире, чем границы для f (X) из-за дополнительной изменчивости члена шума.

Пример: 'Prediction','observation'

Флаг для вычисления одновременных доверительных границ, заданный как разделенная разделенными запятой парами, состоящая из 'Simultaneous' и либо true, либо false.

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

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

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

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

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

свернуть все

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

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

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

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

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

  • Использовать plotSlice создать рисунок, содержащую ряд графиков, каждый из которых представляет срез через предсказанную регрессионую поверхность. Каждый график показывает установленные значения отклика как функцию одной переменной предиктора, при этом другие переменные предиктора остаются постоянными.

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

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