Симулируйте ответы со случайным шумом для обобщенной линейной модели регрессии
задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать количество испытаний за биномиальное распределение или значение смещения, используемое в подборе кривой.ysim
= random(mdl
,Xnew
,Name,Value
)
Создайте обобщенную линейную модель регрессии и симулируйте ее ответ со случайным шумом к новым данным.
Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с одним базовым предиктором X
.
rng('default') % For reproducibility X = rand(20,1); mu = exp(1 + 2*X); y = poissrnd(mu);
Создайте обобщенную линейную модель регрессии данных Пуассона.
mdl = fitglm(X,y,'y ~ x1','Distribution','poisson');
Создайте точки данных для предсказания.
Xnew = (0:.05:1)';
Симулируйте ответы со случайным шумом в точках данных.
ysim = random(mdl,Xnew);
Постройте симулированные значения и исходные значения.
plot(X,y,'rx',Xnew,ysim,'bo',Xnew,feval(mdl,Xnew),'g-') legend('Data','Simulated Response with Noise','Predicted Response', ... 'Location','best')
Подбирайте обобщенную линейную модель регрессии, и затем сохраните модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает модель при помощи loadLearnerForCoder
и вызывает predict
функция подобранной модели. Затем используйте codegen
сгенерировать код C/C++. Обратите внимание на то, что генерация кода C/C++ требует MATLAB® Coder™.
Этот пример кратко объясняет рабочий процесс генерации кода для предсказания моделей линейной регрессии в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения в Командной строке. Можно также сгенерировать код с помощью приложения MATLAB Coder. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения Используя Приложение MATLAB Coder.
Обучите модель
Сгенерируйте выборочные данные предиктора x
и ответ y
со следующими распределениями:
.
и .
.
rng('default') % For reproducibility x = 1 + randn(100,1)*0.5; beta = -2; p = exp(1 + x*beta)./(1 + exp(1 + x*beta)); % Inverse logit n = 10; y = binornd(n,p,100,1);
Создайте обобщенную линейную модель регрессии биномиальных данных. Задайте биномиальный объем выборки 10.
mdl = fitglm(x,y,'y ~ x1','Distribution','Binomial','BinomialSize',n);
Сохраните модель
Сохраните подбиравшую обобщенную линейную модель регрессии в файл GLMMdl.mat
при помощи saveLearnerForCoder
.
saveLearnerForCoder(mdl,'GLMMdl');
Задайте функцию точки входа
В вашей текущей папке задайте функцию с именем точки входа myrandomGLM.m
это делает следующее:
Примите новый вход предиктора и допустимые аргументы пары "имя-значение".
Загрузите подбиравшую обобщенную линейную модель регрессии в GLMMdl.mat
при помощи loadLearnerForCoder
.
Симулируйте ответы из загруженной модели GLM.
function y = myrandomGLM(x,varargin) %#codegen %MYRANDOMGLM Simulate responses using GLM model % MYRANDOMGLM simulates responses for the n observations in the n-by-1 % vector x using the GLM model stored in the MAT-file GLMMdl.mat, and % then returns the simulations in the n-by-1 vector y. CompactMdl = loadLearnerForCoder('GLMMdl'); narginchk(1,Inf); y = random(CompactMdl,x,varargin{:}); end
Добавьте %#codegen
директива компилятора (или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые привели бы к ошибкам во время генерации кода.
Сгенерируйте код
Сгенерируйте код для функции точки входа использование codegen
. Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB®, которое представляет множество значений с определенным размером типа данных и массива. Используйте coder.Constant
для имен аргументов пары "имя-значение".
Задайте данные о предикторе x
и биномиальный параметр n
.
codegen -config:mex myrandomGLM -args {x,coder.Constant('BinomialSize'),coder.Constant(n)}
codegen
генерирует MEX-функцию myrandomGLM_mex
с зависимым платформой расширением.
Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof
. Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder).
Проверьте сгенерированный код
Симулируйте ответы с помощью MEX-функции. Задайте данные о предикторе x
и биномиальный параметр n
.
ysim = myrandomGLM_mex(x,'BinomialSize',n);
Постройте симулированные значения и данные в той же фигуре.
figure plot(x,y,'bo',x,ysim,'r*') legend('Observed responses','Simulated responses') xlabel('x') ylabel('y')
Наблюдаемые и симулированные ответы, кажется, так же распределяются.
mdl
— Обобщенная линейная модель регрессииGeneralizedLinearModel
возразите | CompactGeneralizedLinearModel
объектОбобщенная линейная модель регрессии в виде GeneralizedLinearModel
объект, созданный с помощью fitglm
или stepwiseglm
, или CompactGeneralizedLinearModel
объект, созданный с помощью 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
.
ysim = random(Mdl,Xnew,'BinomialSize',50)
возвращает количества успеха, встревоженного случайным шумом, с помощью количества испытаний, заданных 'BinomialSize'
.'BinomialSize'
— Количество испытаний за биномиальное распределениеКоличество испытаний за биномиальное распределение в виде разделенной запятой пары, состоящей из 'BinomialSize'
и скаляр или вектор той же длины как ответ. random
расширяет скалярный вход в постоянный массив одного размера с ответом. Скалярный вход означает, что все наблюдения имеют то же количество испытаний.
Значение выходных значений в ysim
зависит от значения 'BinomialSize'
.
Если 'BinomialSize'
1 (значение по умолчанию), затем каждое значение в выходе ysim
вероятность успеха.
Если 'BinomialSize'
не 1, затем каждое значение в выходе ysim
предсказанное количество успехов в испытаниях.
Типы данных: single
| double
'Offset'
— Возместите значениеzeros(size(Xnew,1))
(значение по умолчанию) | скаляр | векторВозместите значение для каждой строки в Xnew
В виде разделенной запятой пары, состоящей из 'Offset'
и скаляр или вектор с той же длиной как ответ. random
расширяет скалярный вход в постоянный массив одного размера с ответом.
Обратите внимание на то, что значением по умолчанию этого аргумента является нулевой вектор, даже если вы задаете 'Offset'
аргумент пары "имя-значение" при подбирании модели. Если вы задаете 'Offset'
для подбора кривой программное обеспечение обрабатывает смещение как дополнительный предиктор с содействующим значением, зафиксированным в 1. Другими словами, формула для подбора кривой
f (μ) = Offset + X*b
,
где f является функцией ссылки, μ является средним ответом, и X *b является линейной комбинацией предикторов X. Offset
предиктор имеет коэффициент 1
.
Типы данных: single
| double
ysim
— Симулированные значения ответаСимулированные значения ответа, возвращенные как числовой вектор. Симулированные значения являются предсказанными значениями ответа в Xnew
встревоженный случайным шумом с распределением, данным подобранной моделью. Значения в ysim
независимы, условны на предикторах. Для бинома и подгонок Пуассона, random
генерирует ysim
с заданным распределением и никакой корректировкой к любой предполагаемой дисперсии.
Если 'BinomialSize'
1 (значение по умолчанию), затем каждое значение в выходе ysim
вероятность успеха.
Если 'BinomialSize'
не 1, затем каждое значение в выходе ysim
предсказанное количество успехов в испытаниях.
Для предсказаний без случайного шума используйте predict
или feval
.
predict
принимает один входной параметр, содержащий все переменные предикторы, и дает доверительные интервалы на его предсказаниях.
feval
принимает несколько входных параметров с одним входом для каждого переменного предиктора, который более прост использовать с моделью, созданной из массива набора данных или таблицы. feval
функция не поддерживает аргументы пары "имя-значение" 'Offset'
и 'BinomialSize'
. Функция использует 0 в качестве значения смещения, и выходные значения являются предсказанными вероятностями.
Указания и ограничения по применению:
Используйте saveLearnerForCoder
, loadLearnerForCoder
, и codegen
сгенерировать код для random
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает random
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
random
может возвратить различную последовательность чисел, чем MATLAB®, если любое из следующего верно:
Выход является нескалярным.
Входной параметр недопустим для распределения.
Эта таблица содержит примечания об аргументах random
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
Xnew |
|
Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы использовать |
Для получения дополнительной информации смотрите Введение в Генерацию кода.
CompactGeneralizedLinearModel
| GeneralizedLinearModel
| feval
| predict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.