exponenta event banner

предсказать

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

Описание

пример

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) для генерации кода C/C + +. Следует отметить, что для создания кода C/C + + требуется Coder™ MATLAB ®.

В этом примере кратко описывается рабочий процесс создания кода для прогнозирования моделей линейной регрессии в командной строке. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения в командной строке. Можно также создать код с помощью приложения MATLAB Coder. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения с помощью приложения MATLAB Coder App.

Модель поезда

Загрузить 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). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы указать тип данных и точный размер входного массива, передайте выражение MATLAB ®, представляющее набор значений с определенным типом данных и размером массива. Использоватьcoder.Constant (Кодер MATLAB) для имен аргументов пары имя-значение.

Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделах Определение аргументов переменного размера для генерации кода и Определение свойств входов функции точки входа (кодер MATLAB).

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 (X) +

где 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