Предскажите ответы модели линейной регрессии
Создайте квадратичную модель пробега автомобиля как функция веса от 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')
Подбирайте модель линейной регрессии, и затем сохраните модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает модель при помощи loadLearnerForCoder
и вызывает predict
функция подобранной модели. Затем используйте codegen
сгенерировать код C/C++. Обратите внимание на то, что генерация кода C/C++ требует MATLAB® Coder™.
Этот пример кратко объясняет рабочий процесс генерации кода для прогноза моделей линейной регрессии в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Прогноза Модели Машинного обучения в Командной строке. Можно также сгенерировать код с помощью приложения 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
.
Возвратите границы доверительного интервала и прогнозы.
type mypredictQLM.m % Display contents of mypredictQLM.m
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
. Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB®, которое представляет множество значений с определенным размером типа данных и массива. Используйте coder.Constant
для имен аргументов пары "имя-значение".
Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof
. Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder).
codegen mypredictQLM -args {X,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
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');
mdl
— Объект модели линейной регрессииLinearModel
возразите | CompactLinearModel
объектОбъект модели линейной регрессии, заданный как LinearModel
объект создается при помощи fitlm
или stepwiselm
, или CompactLinearModel
объект создается при помощи compact
.
Xnew
— Новые входные значения предиктораНовые входные значения предиктора, заданные как таблица, массив набора данных или матрица. Каждая строка 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'
— Уровень значенияУровень значения для доверительного интервала, заданного как разделенная запятой пара, состоящая из 'Alpha'
и числовое значение в области значений [0,1]. Доверительный уровень yci
равно 100 (1 – Alpha
) %. Alpha
вероятность, что доверительный интервал не содержит истинное значение.
Пример: 'Alpha',0.01
Типы данных: single
| double
'Prediction'
— Тип прогноза'curve'
(значение по умолчанию) | 'observation'
Тип прогноза, заданный как разделенная запятой пара, состоящая из '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'
— Отметьте, чтобы вычислить одновременные доверительные границыfalse
(значение по умолчанию) | true
Отметьте, чтобы вычислить одновременные доверительные границы, заданные как разделенная запятой пара, состоящая из 'Simultaneous'
и любой TRUE или FALSE.
true
— predict
вычисляет доверительные границы для кривой значений ответа, соответствующих всем значениям предиктора в Xnew
, использование метода Шеффа. Область значений между верхними и нижними границами содержит кривую, состоящую из истинных значений ответа с 100 (1 – α) уверенность %.
false
— predict
вычисляет доверительные границы для значения ответа при каждом наблюдении в Xnew
. Доверительный интервал для значения ответа в определенном значении предиктора содержит истинное значение ответа с 100 (1 – α) уверенность %.
Одновременные границы более широки, чем отдельные границы, потому что требование, чтобы целая кривая значений ответа была в границах, более строго, чем требование, чтобы значение ответа в одном значении предиктора было в границах.
Пример: 'Simultaneous',true
ypred
— Предсказанные значения ответаПредсказанные значения ответа оценены в Xnew
, возвращенный как числовой вектор.
yci
— Доверительные интервалы для ответовДоверительные интервалы для ответов, возвращенных как матрица 2D столбца с каждой строкой, обеспечивающей один интервал. Значение доверительного интервала зависит от настроек аргументов пары "имя-значение" 'Alpha'
Предсказание
, и 'Simultaneous'
.
feval
возвращает те же прогнозы как predict
. feval
функция может взять несколько входных параметров, с одним входом для каждого переменного предиктора, и не дает доверительные интервалы на его прогнозах.
random
возвращает прогнозы с добавленным шумом.
Используйте plotSlice
создать фигуру, содержащую ряд графиков, каждый представляющий срез через предсказанную поверхность регрессии. Каждый график показывает подходящие значения ответа функцией одного переменного предиктора с другими переменными предикторами, сохраненными постоянными.
Указания и ограничения по применению:
Используйте saveLearnerForCoder
, loadLearnerForCoder
, и codegen
сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
mdl |
|
Xnew |
|
Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательский уровень значения в сгенерированном коде, включайте |
Для получения дополнительной информации смотрите Введение в Генерацию кода.
CompactLinearModel
| LinearModel
| feval
| plotSlice
| random
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.