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. The axes 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 + + требуется Coder™ MATLAB ®.

Этот пример кратко объясняет рабочий процесс генерации кода для предсказания линейных регрессионых моделей в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного Обучения в Командной Строке. Вы также можете сгенерировать код с помощью приложения 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). Для получения дополнительной информации смотрите Specify Variable-Size Arguments for Генерация Кода и Specify Properties of Entry-Point Function Inputs (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. The axes 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 должен быть числовым. Чтобы рассматривать числовые предикторы как категориальные, идентифицируйте предикторы, используя 'CategoricalVars' аргумент пары "имя-значение" при создании mdl.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами 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 (<reservedrangesplaceholder1>) = Offset + X*b,

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

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

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

свернуть все

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

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

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

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

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

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

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

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

.
Введенный в R2012a