Предскажите ответы модели линейной регрессии
Создайте квадратичную модель пробега автомобиля в зависимости от веса от 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
(MATLAB Coder), чтобы сгенерировать код 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
.
Возвратите границы доверительного интервала и предсказания.
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). Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (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');
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
функция может взять несколько входных параметров с одним входом для каждого переменного предиктора, который более прост использовать с моделью, созданной из массива набора данных или таблицы. Обратите внимание на то, что feval
функция не дает доверительные интервалы на своих предсказаниях.
random
возвращает предсказания с добавленным шумом.
Использование plotSlice
создать фигуру, содержащую ряд графиков, каждый представляющий срез через предсказанную поверхность регрессии. Каждый график показывает подходящие значения отклика в зависимости от одного переменного предиктора с другими переменными предикторами, сохраненными постоянными.
Указания и ограничения по применению:
Использование saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
mdl |
|
Xnew |
|
Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательский уровень значения в сгенерированном коде, включайте |
Для получения дополнительной информации смотрите Введение в Генерацию кода.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
Эта функция поддерживает объекты модели, снабженные входными параметрами графического процессора массивов.
CompactLinearModel
| LinearModel
| feval
| random
| plotSlice
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.