Предсказать отклики обобщенной линейной регрессионой модели
Создайте обобщенную линейную регрессионую модель и предсказайте ее реакцию на новые данные.
Сгенерируйте выборочные данные с помощью случайных чисел Пуассона с двумя базовыми предикторами 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
(MATLAB Coder) для генерации кода C/C + +. Обратите внимание, что для генерации кода C/C + + требуется Coder™ MATLAB ®.
Этот пример кратко объясняет рабочий процесс генерации кода для предсказания линейных регрессионых моделей в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного Обучения в Командной Строке. Вы также можете сгенерировать код с помощью приложения 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
(MATLAB Coder). Поскольку C и C++ являются статически типизированными языками, вы должны определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB ®, которое представляет множество значений с определенным типом данных и размером массива. Использование coder.Constant
(MATLAB Coder) для имен аргументов пары "имя-значение".
Создайте точки для предсказания.
[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}
Code generation successful.
codegen
генерирует MEX-функцию mypredictGLM_mex
с зависящим от платформы внутренним абонентом.
Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof
(MATLAB Coder). Для получения дополнительной информации смотрите Specify Variable-Size Arguments for Генерация Кода и Specify Properties of Entry-Point Function Inputs (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
должен быть числовым. Чтобы рассматривать числовые предикторы как категориальные, идентифицируйте предикторы, используя '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 (<reservedrangesplaceholder1>) = Offset + X*b
,
где f - ссылка функция, μ - средняя характеристика, а X * b - линейная комбинация предикторов X. The 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
- Доверительные интервалы для ответовДоверительные интервалы для ответов, возвращенные как двухколоночная матрица с каждой строкой, обеспечивающей один интервал. Значение доверительного интервала зависит от настроек аргументов пары "имя-значение" 'Alpha'
и 'Simultaneous'
.
feval
возвращает те же предсказания, что и predict
. feval
функция не поддерживает 'Offset'
и 'BinomialSize'
аргументы в виде пар имя-значение. feval
использует 0 в качестве значения смещения и выходные значения в ypred
предсказаны вероятности. feval
функция может взять несколько входные параметры для новых входных значений предиктора с одним входом для каждой переменной предиктора, который проще использовать с моделью, созданной из таблицы или массива набора данных. Обратите внимание, что feval
функция не дает доверительных интервалов на своих предсказаниях.
random
возвращает предсказания с добавленным шумом.
Указания и ограничения по применению:
Использовать saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
чтобы сгенерировать код для функции точки входа.
Эта таблица содержит примечания к аргументам predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
mdl | Для указаний по применению и ограничений объекта модели, смотрите
Генерацию кода CompactGeneralizedLinearModel |
Xnew |
|
Аргументы пары "имя-значение" |
Имена в аргументах пары "имя-значение" должны быть константами во время компиляции. Для примера, чтобы разрешить пользовательский уровень значимости в сгенерированном коде, включите |
Для получения дополнительной информации смотрите Введение в генерацию кода.
Эта функция полностью поддерживает массивы GPU. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
Эта функция поддерживает объекты модели, оснащенные входными параметрами массива GPU.
CompactGeneralizedLinearModel
| feval
| fitglm
| GeneralizedLinearModel
| random
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.