Прогнозирование ответов обобщенной модели линейной регрессии
Создайте обобщенную модель линейной регрессии и спрогнозируйте ее реакцию на новые данные.
Создание выборочных данных с использованием случайных чисел Пуассона с двумя основными предикторами 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) для генерации кода C/C + +. Следует отметить, что для создания кода C/C + + требуется Coder™ MATLAB ®.
В этом примере кратко описывается рабочий процесс создания кода для прогнозирования моделей линейной регрессии в командной строке. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения в командной строке. Можно также создать код с помощью приложения MATLAB Coder. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения с помощью приложения MATLAB Coder App.
Модель поезда
Создание выборочных данных с использованием случайных чисел Пуассона с двумя основными предикторами 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). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы указать тип данных и точный размер входного массива, передайте выражение MATLAB ®, представляющее набор значений с определенным типом данных и размером массива. Использоватьcoder.Constant (Кодер MATLAB) для имен аргументов пары имя-значение.
Создание точек для прогнозирования.
[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). Дополнительные сведения см. в разделах Определение аргументов переменного размера для генерации кода и Определение свойств входов функции точки входа (кодер MATLAB).
Проверить созданный код
Сравнение прогнозов и доверительных интервалов с использованием 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 (λ) = 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 - Доверительные интервалы для ответовДоверительные интервалы для ответов, возвращаемые в виде матрицы из двух столбцов, при этом каждая строка предоставляет один интервал. Значение доверительного интервала зависит от настроек аргументов пары имя-значение 'Alpha' и 'Simultaneous'.
feval возвращает те же прогнозы, что и predict. feval функция не поддерживает 'Offset' и 'BinomialSize' аргументы пары имя-значение. feval использует 0 в качестве значения смещения, а выходные значения в ypred прогнозируют вероятности. feval функция может принимать несколько входных аргументов для новых входных значений предиктора с одним входом для каждой переменной предиктора, что проще для использования с моделью, созданной из таблицы или массива набора данных. Обратите внимание, что feval функция не дает доверительных интервалов в своих прогнозах.
random возвращает прогнозы с добавленным шумом.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для predict функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen для создания кода для функции точки входа.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
Xnew |
|
| Аргументы пары имя-значение |
Имена в аргументах пары имя-значение должны быть константами времени компиляции. Например, чтобы разрешить определяемый пользователем уровень значимости в сгенерированном коде, включите |
Дополнительные сведения см. в разделе Введение в создание кода.
Эта функция полностью поддерживает массивы графических процессоров. Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
Эта функция поддерживает объекты модели, оснащенные входными аргументами графического процессора.
CompactGeneralizedLinearModel | feval | fitglm | GeneralizedLinearModel | random
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.