Обучите обобщенную линейную модель, а затем сгенерируйте код из функции, которая классифицирует новые наблюдения на основе модели. Этот пример основан на примере Use Custom-Defined Link Function.
Введите выборочные данные.
Предположим, что обратный режим PDF является подходящей функцией ссылки для задачи.
Задайте функцию с именем myInvNorm.m который принимает значения
и возвращает соответствующие значения обратной переменной стандартного нормального cdf.
function in = myInvNorm(mu) %#codegen
%myInvNorm Inverse of standard normal cdf for code generation
% myInvNorm is a GLM link function that accepts a numeric vector mu, and
% returns in, which is a numeric vector of corresponding values of the
% inverse of the standard normal cdf.
%
in = norminv(mu);
end
Задайте другую функцию с именем myDInvNorm.m который принимает значения
и возвращает соответствующие значения производной функции ссылки.
function din = myDInvNorm(mu) %#codegen
%myDInvNorm Derivative of inverse of standard normal cdf for code
%generation
% myDInvNorm corresponds to the derivative of the GLM link function
% myInvNorm. myDInvNorm accepts a numeric vector mu, and returns din,
% which is a numeric vector of corresponding derivatives of the inverse
% of the standard normal cdf.
%
din = 1./normpdf(norminv(mu));
end
Задайте другую функцию с именем myInvInvNorm.m который принимает значения
и возвращает соответствующие значения обратной функции ссылки.
function iin = myInvInvNorm(mu) %#codegen
%myInvInvNorm Standard normal cdf for code generation
% myInvInvNorm is the inverse of the GLM link function myInvNorm.
% myInvInvNorm accepts a numeric vector mu, and returns iin, which is a
% numeric vector of corresponding values of the standard normal cdf.
%
iin = normcdf(mu);
end
Создайте массив структур, который задает каждую из функций ссылки. В частности, массив структур содержит поля с именем 'Link', 'Derivative', и 'Inverse'. Соответствующими значениями являются имена функций.
link =
struct with fields:
Link: 'myInvNorm'
Derivative: 'myDInvNorm'
Inverse: 'myInvInvNorm'
Подбор GLM для y на x использование функции link link. Верните массив структур статистики.
b является вектором 2 на 1 коэффициентах регрессии.
В текущей рабочей папке задайте функцию, называемую classifyGLM.m что:
Принимает измерения с столбцами, соответствующими показателям в x, коэффициенты регрессии, размерности которых соответствуют b, функцию ссылки связи, структуру статистики GLM и любые действительные glmval аргумент пары "имя-значение"
Возвращает предсказания и доверительные интервальные поля ошибки
function [yhat,lo,hi] = classifyGLM(b,x,link,varargin) %#codegen
%CLASSIFYGLM Classify measurements using GLM model
% CLASSIFYGLM classifies the n observations in the n-by-1 vector x using
% the GLM model with regression coefficients b and link function link,
% and then returns the n-by-1 vector of predicted values in yhat.
% CLASSIFYGLM also returns margins of error for the predictions using
% additional information in the GLM statistics structure stats.
narginchk(3,Inf);
if(isstruct(varargin{1}))
stats = varargin{1};
[yhat,lo,hi] = glmval(b,x,link,stats,varargin{2:end});
else
yhat = glmval(b,x,link,varargin{:});
end
end
Сгенерируйте MEX-функцию из classifyGLM.m. Поскольку на C используется статическое типирование, codegen необходимо определить свойства всех переменных в файлах MATLAB ® во время компиляции. Чтобы убедиться, что MEX-функция может использовать те же входы, используйте -args аргумент для задания следующего в заданном порядке:
Коэффициенты регрессии b как константа времени компиляции
Наблюдения в выборке x
Ссылка как константа времени компиляции
Результат статистики GLM как константа времени компиляции
Имя 'Confidence' как константа времени компиляции
Доверительный уровень 0.9
Чтобы обозначить аргументы как константы времени компиляции, используйте coder.Constant.
Code generation successful.
codegen генерирует файл MEX classifyGLM_mex.mexw64 в текущей папке. Расширение файла зависит от вашей системной платформы.
Сравнение предсказаний при помощи glmval и classifyGLM_mex. Задайте аргументы пары "имя-значение" в том же порядке, что и в -args аргумент в вызове codegen.
agree1 =
logical
1
agree2 =
logical
1
agree3 =
logical
1
Сгенерированная MEX-функция производит те же предсказания, что и predict.