random

Симулируйте ответы со случайным шумом для обобщенной линейной модели регрессии

Описание

пример

ysim = random(mdl,Xnew) симулирует ответы на данные о предикторе в Xnew использование обобщенной линейной модели mdl регрессии, добавление случайного шума.

пример

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')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Data, Simulated Response with Noise, Predicted Response.

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

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

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

Сгенерируйте выборочные данные предиктора x и ответ y со следующими распределениями:

  • xN(1,0.52).

  • β0=1 и β=-2.

  • yBinomial(10,exp(1+xβ)1+exp(1+xβ)).

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

Задайте данные о предикторе x и биномиальный параметр n.

codegen -config:mex myrandomGLM -args {x,coder.Constant('BinomialSize'),coder.Constant(n)}
Code generation successful.

codegen генерирует MEX-функцию myrandomGLM_mex с зависимым платформой расширением.

Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof (MATLAB Coder). Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Observed responses, Simulated responses.

Наблюдаемый и симулированные отклики, кажется, так же распределяются.

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

свернуть все

Обобщенная линейная модель регрессии в виде GeneralizedLinearModel объект создал использование fitglm или stepwiseglm, или CompactGeneralizedLinearModel объект, созданный с помощью compact.

Новые входные значения предиктора в виде таблицы, массива набора данных или матрицы. Каждая строка Xnew соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Если Xnew таблица или массив набора данных, это должно содержать предикторы, которые имеют те же имена предиктора как в PredictorNames свойство mdl.

  • Если Xnew матрица, она должна иметь то же количество переменных (столбцы) в том же порядке, как вход предиктора раньше создавал mdl. Обратите внимание на то, что Xnew должен также содержать любые переменные предикторы, которые не используются в качестве предикторов в подобранной модели. Кроме того, все переменные используются в создании mdl mustBeNumeric. Чтобы обработать числовые предикторы как категориальные, идентифицируйте предикторы с помощью 'CategoricalVars' аргумент пары "имя-значение", когда вы создаете mdl.

Типы данных: single | double | table

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: ysim = random(Mdl,Xnew,'BinomialSize',50) возвращает количества успеха, встревоженного случайным шумом, с помощью количества испытаний, заданных 'BinomialSize'.

Количество испытаний за биномиальное распределение в виде разделенной запятой пары, состоящей из 'BinomialSize' и скаляр или вектор из той же длины как ответ. random расширяет скалярный вход в постоянный массив одного размера с ответом. Скалярный вход означает, что все наблюдения имеют то же количество испытаний.

Значение выходных значений в ysim зависит от значения 'BinomialSize'.

  • Если 'BinomialSize' 1 (значение по умолчанию), затем каждое значение в выходе ysim вероятность успеха.

  • Если 'BinomialSize' не 1, затем каждое значение в выходе ysim предсказанное количество успехов в испытаниях.

Типы данных: single | double

Возместите значение для каждой строки в XnewВ виде разделенной запятой пары, состоящей из 'Offset' и скаляр или вектор с той же длиной как ответ. random расширяет скалярный вход в постоянный массив одного размера с ответом.

Обратите внимание на то, что значением по умолчанию этого аргумента является нулевой вектор, даже если вы задаете 'Offset' аргумент пары "имя-значение" при подбирании модели. Если вы задаете 'Offset' для подбора кривой программное обеспечение обрабатывает смещение как дополнительный предиктор с содействующим значением, зафиксированным в 1. Другими словами, формула для подбора кривой

f (μ) = Offset + X*b,

где f является функцией ссылки, μ является средним ответом, и X *b является линейной комбинацией предикторов X. Offset предиктор имеет коэффициент 1.

Типы данных: single | double

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

свернуть все

Значения симулированного отклика, возвращенные как числовой вектор. Симулированные значения являются предсказанными значениями отклика в Xnew встревоженный случайным шумом с распределением, данным подобранной моделью. Значения в ysim независимы, условны на предикторах. Для бинома и подгонок Пуассона, random генерирует ysim с заданным распределением и никакой корректировкой к любой предполагаемой дисперсии.

  • Если 'BinomialSize' 1 (значение по умолчанию), затем каждое значение в выходе ysim вероятность успеха.

  • Если 'BinomialSize' не 1, затем каждое значение в выходе ysim предсказанное количество успехов в испытаниях.

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

Для предсказаний без случайного шума используйте predict или feval.

  • predict принимает один входной параметр, содержащий все переменные предикторы, и дает доверительные интервалы на его предсказаниях.

  • feval принимает несколько входных параметров с одним входом для каждого переменного предиктора, который более прост использовать с моделью, созданной из массива набора данных или таблицы. feval функция не поддерживает аргументы пары "имя-значение" 'Offset' и 'BinomialSize'. Функция использует 0 в качестве значения смещения, и выходные значения являются предсказанными вероятностями.

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

Представленный в R2012a
Для просмотра документации необходимо авторизоваться на сайте