Предскажите ответы обобщенной линейной модели регрессии
Создайте обобщенную линейную модель регрессии и предскажите ее ответ на новые данные.
Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с двумя базовыми предикторами X(:,1)
и X(:,2)
.
rng('default') % For reproducibility rndvars = randn(100,2); X = [2 + rndvars(:,1),rndvars(:,2)]; mu = exp(1 + X*[1;2]); y = poissrnd(mu);
Создайте обобщенную линейную модель регрессии данных Пуассона.
mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');
Создайте точки данных для предсказания.
[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2); Xnew = [Xtest1(:),Xtest2(:)];
Предскажите ответы в точках данных.
ypred = predict(mdl,Xnew);
Постройте предсказания.
surf(Xtest1,Xtest2,reshape(ypred,9,9))
Подбирайте обобщенную линейную модель регрессии, и затем сохраните модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает модель при помощи loadLearnerForCoder
и вызывает predict
функция подобранной модели. Затем используйте codegen
сгенерировать код C/C++. Обратите внимание на то, что генерация кода C/C++ требует MATLAB® Coder™.
Этот пример кратко объясняет рабочий процесс генерации кода для предсказания моделей линейной регрессии в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения в Командной строке. Можно также сгенерировать код с помощью приложения MATLAB Coder. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного обучения Используя Приложение MATLAB Coder.
Обучите модель
Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с двумя базовыми предикторами X(:,1)
и X(:,2)
.
rng('default') % For reproducibility rndvars = randn(100,2); X = [2 + rndvars(:,1),rndvars(:,2)]; mu = exp(1 + X*[1;2]); y = poissrnd(mu);
Создайте обобщенную линейную модель регрессии. Задайте распределение Пуассона для ответа.
mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');
Сохраните модель
Сохраните подбиравшую обобщенную линейную модель регрессии в файл GLMMdl.mat
при помощи saveLearnerForCoder
.
saveLearnerForCoder(mdl,'GLMMdl');
Задайте функцию точки входа
В вашей текущей папке задайте функцию с именем точки входа mypredictGLM.m
это делает следующее:
Примите новый вход предиктора и допустимые аргументы пары "имя-значение".
Загрузите подбиравшую обобщенную линейную модель регрессии в GLMMdl.mat
при помощи loadLearnerForCoder
.
Возвратите границы доверительного интервала и предсказания.
function [yhat,ci] = mypredictGLM(x,varargin) %#codegen %MYPREDICTGLM Predict responses using GLM model % MYPREDICTGLM predicts 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 predictions in the n-by-1 vector yhat. % MYPREDICTGLM also returns confidence interval bounds for the % predictions in the n-by-2 vector ci. CompactMdl = loadLearnerForCoder('GLMMdl'); narginchk(1,Inf); [yhat,ci] = predict(CompactMdl,x,varargin{:}); end
Добавьте %#codegen
директива компилятора (или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые привели бы к ошибкам во время генерации кода.
Сгенерируйте код
Сгенерируйте код для функции точки входа использование codegen
. Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB®, которое представляет множество значений с определенным размером типа данных и массива. Используйте coder.Constant
для имен аргументов пары "имя-значение".
Точки формирования данных для предсказания.
[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2); Xnew = [Xtest1(:),Xtest2(:)];
Сгенерируйте код и задайте возвращающиеся 90%-е одновременные доверительные интервалы на предсказаниях.
codegen mypredictGLM -args {Xnew,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
codegen
генерирует MEX-функцию mypredictGLM_mex
с зависимым платформой расширением.
Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof
. Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder).
Проверьте сгенерированный код
Сравните предсказания и доверительные интервалы с помощью predict
и mypredictGLM_mex
. Задайте аргументы пары "имя-значение" в том же порядке как в -args
аргумент в вызове codegen
.
[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true); [yhat2,ci2] = mypredictGLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);
Возвращенные значения от mypredictGLM_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
.
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
.
[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
'BinomialSize'
— Количество испытаний за биномиальное распределениеКоличество испытаний за биномиальное распределение в виде разделенной запятой пары, состоящей из 'BinomialSize'
и скаляр или вектор той же длины как ответ. predict
расширяет скалярный вход в постоянный массив одного размера с ответом. Скалярный вход означает, что все наблюдения имеют то же количество испытаний.
Значение выходных значений в ypred
зависит от значения 'BinomialSize'
.
Если 'BinomialSize'
1 (значение по умолчанию), затем каждое значение в выходе ypred
вероятность успеха.
Если 'BinomialSize'
не 1, затем каждое значение в выходе ypred
предсказанное количество успехов в испытаниях.
Типы данных: single
| double
'Offset'
— Возместите значениеzeros(size(Xnew,1))
(значение по умолчанию) | скаляр | векторВозместите значение для каждой строки в Xnew
В виде разделенной запятой пары, состоящей из 'Offset'
и скаляр или вектор с той же длиной как ответ. predict
расширяет скалярный вход в постоянный массив одного размера с ответом.
Обратите внимание на то, что значением по умолчанию этого аргумента является нулевой вектор, даже если вы задаете 'Offset'
аргумент пары "имя-значение" при подбирании модели. Если вы задаете 'Offset'
для подбора кривой программное обеспечение обрабатывает смещение как дополнительный предиктор с содействующим значением, зафиксированным в 1. Другими словами, формула для подбора кривой
f (μ) = Offset + X*b
,
где f является функцией ссылки, μ является средним ответом, и X *b является линейной комбинацией предикторов X. Offset
предиктор имеет коэффициент 1
.
Типы данных: single
| double
'Simultaneous'
— Отметьте, чтобы вычислить одновременные доверительные границыfalse
(значение по умолчанию) | true
Отметьте, чтобы вычислить одновременные доверительные границы в виде разделенной запятой пары, состоящей из 'Simultaneous'
и любой TRUE или FALSE.
true
— predict
вычисляет доверительные границы для кривой значений ответа, соответствующих всем значениям предиктора в Xnew
, использование метода Шеффа. Область значений между верхними и нижними границами содержит кривую, состоящую из истинных значений ответа с 100 (1 – α) доверие %.
false
— predict
вычисляет доверительные границы для значения ответа при каждом наблюдении в Xnew
. Доверительный интервал для значения ответа в определенном значении предиктора содержит истинное значение ответа с 100 (1 – α) доверие %.
Одновременные границы более широки, чем отдельные границы, потому что требование, чтобы целая кривая значений ответа была в границах, более строго, чем требование, чтобы значение ответа в одном значении предиктора было в границах.
Пример: 'Simultaneous',true
ypred
— Предсказанные значения ответаПредсказанные значения ответа в Xnew
, возвращенный как числовой вектор.
Для биномиальной модели, значения выходных значений в ypred
зависит от значения 'BinomialSize'
аргумент пары "имя-значение".
Если 'BinomialSize'
1 (значение по умолчанию), затем каждое значение в выходе ypred
вероятность успеха.
Если 'BinomialSize'
не 1, затем каждое значение в выходе ypred
предсказанное количество успехов в испытаниях.
Для модели со смещением задайте значение смещения при помощи 'Offset'
аргумент пары "имя-значение". В противном случае, predict
использование 0
как значение смещения.
yci
— Доверительные интервалы для ответовДоверительные интервалы для ответов, возвращенных как матрица 2D столбца с каждой строкой, обеспечивающей один интервал. Значение доверительного интервала зависит от настроек аргументов пары "имя-значение" 'Alpha'
и 'Simultaneous'
.
feval
возвращает те же предсказания как predict
. feval
функция не поддерживает 'Offset'
и 'BinomialSize'
аргументы в виде пар имя-значение. feval
использование 0 как значение смещения и выходные значения в ypred
предсказанные вероятности. feval
функция может взять несколько входных параметров для новых входных значений предиктора с одним входом для каждого переменного предиктора, который более прост использовать с моделью, созданной из массива набора данных или таблицы. Обратите внимание на то, что feval
функция не дает доверительные интервалы на своих предсказаниях.
random
возвращает предсказания с добавленным шумом.
Указания и ограничения по применению:
Используйте saveLearnerForCoder
, loadLearnerForCoder
, и codegen
сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
Xnew |
|
Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательский уровень значения в сгенерированном коде, включайте |
Для получения дополнительной информации смотрите Введение в Генерацию кода.
CompactGeneralizedLinearModel
| GeneralizedLinearModel
| feval
| fitglm
| random
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.