exponenta event banner

случайный

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

Описание

пример

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) для генерации кода C/C + +. Следует отметить, что для создания кода C/C + + требуется Coder™ MATLAB ®.

В этом примере кратко описывается рабочий процесс создания кода для прогнозирования моделей линейной регрессии в командной строке. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения в командной строке. Можно также создать код с помощью приложения MATLAB Coder. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения с помощью приложения MATLAB Coder App.

Модель поезда

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

  • x∼N (1,0,52).

  • β0 = 1 и β = -2.

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

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

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

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

Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделах Определение аргументов переменного размера для генерации кода и Определение свойств входов функции точки входа (кодер MATLAB).

Проверить созданный код

Моделирование ответов с помощью функции 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 (λ) = 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