Обучите обобщенную линейную модель, а затем создайте код из функции, которая классифицирует новые наблюдения на основе модели. Этот пример основан на примере «Использовать пользовательскую функцию связи».
Введите данные образца.
Предположим, что функция обратного нормального 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. Возвращает структурный массив статистики.
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.