Этот пример показывает, как упорядочить биномиальную регрессию. Функция канонической ссылки по умолчанию для биномиальной регрессии является логистической функцией.
Загрузите ionosphere
данные. Ответ на Y
- массив ячеек из 'g'
или 'b'
персонажи. Преобразуйте камеры в логические значения с true
представление 'g'
. Удалите первые два столбца X
потому что они имеют некоторые неловкие статистические свойства, которые выходят за возможности этого обсуждения.
load ionosphere Ybool = strcmp(Y,'g'); X = X(:,3:end);
Создайте регуляризованную биномиальную регрессию с помощью 25 Lambda
значения и 10-кратная перекрестная валидация. Этот процесс может занять несколько минут.
rng('default') % for reproducibility [B,FitInfo] = lassoglm(X,Ybool,'binomial',... 'NumLambda',25,'CV',10);
lassoPlot
может задать и стандартный график трассировки, и перекрестный график отклонения. Исследуйте оба графика.
lassoPlot(B,FitInfo,'PlotType','CV'); legend('show','Location','best') % show legend
График идентифицирует точку минимального отклонения с зеленым кругом и штриховой линией как функцию от параметра регуляризации Lambda
. Синяя точка окружности имеет минимальное отклонение плюс не более одного стандартного отклонения.
lassoPlot(B,FitInfo,'PlotType','Lambda','XScale','log');
График трассировки показывает ненулевые коэффициенты модели как функцию от параметра регуляризации Lambda
. Поскольку существует 32 предиктора и линейная модель, существует 32 кривых. Как Lambda
увеличивается налево, lassoglm
устанавливает различные коэффициенты в нуль, удаляя их из модели.
График трассировки несколько сжат. Изменение масштаба для получения дополнительной информации.
xlim([.01 .1]) ylim([-3 3])
Как Lambda
увеличивается к левой части графика, остается меньше ненулевых коэффициентов.
Найдите количество ненулевых коэффициентов модели в Lambda
значение с минимальным отклонением плюс одна стандартная точка отклонения. Регуляризованные коэффициенты модели указаны в столбце FitInfo.Index1SE
от B
матрица.
indx = FitInfo.Index1SE; B0 = B(:,indx); nonzeros = sum(B0 ~= 0)
nonzeros = 14
Когда вы задаете Lambda
на FitInfo.Index1SE
, lassoglm
удаляет более половины из 32 исходных предикторов.
Постоянный член находится в FitInfo.Index1SE
ввод FitInfo.Intercept
вектор. Вызывайте это значение cnst
.
Модель logit (mu) = журнал (mu/( 1 - mu)) = X*B0 + cnst
. Поэтому для предсказаний mu = exp(X*B0 + cnst)/(1+exp(x*B0 + cnst))
.
The glmval
функция оценивает предсказания модели. Это принимает, что первый коэффициент модели относится к постоянному члену. Поэтому сначала создайте вектор коэффициентов с постоянным членом.
cnst = FitInfo.Intercept(indx); B1 = [cnst;B0];
Постройте график обучающих данных относительно предсказаний модели для регуляризованных lassoglm
модель.
preds = glmval(B1,X,'logit'); histogram(Ybool - preds) % plot residuals title('Residuals from lassoglm model')
Вместо использования смещенных предсказаний из модели можно сделать объективную модель, используя только идентифицированные предикторы.
predictors = find(B0); % indices of nonzero predictors mdl = fitglm(X,Ybool,'linear',... 'Distribution','binomial','PredictorVars',predictors)
mdl = Generalized linear regression model: y ~ [Linear formula with 15 terms in 14 predictors] Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue _________ _______ ________ __________ (Intercept) -2.9367 0.50926 -5.7666 8.0893e-09 x1 2.492 0.60795 4.099 4.1502e-05 x3 2.5501 0.63304 4.0284 5.616e-05 x4 0.48816 0.50336 0.9698 0.33215 x5 0.6158 0.62192 0.99015 0.3221 x6 2.294 0.5421 4.2317 2.3198e-05 x7 0.77842 0.57765 1.3476 0.1778 x12 1.7808 0.54316 3.2786 0.0010432 x16 -0.070993 0.50515 -0.14054 0.88823 x20 -2.7767 0.55131 -5.0365 4.7402e-07 x24 2.0212 0.57639 3.5067 0.00045372 x25 -2.3796 0.58274 -4.0835 4.4363e-05 x27 0.79564 0.55904 1.4232 0.15467 x29 1.2689 0.55468 2.2876 0.022162 x32 -1.5681 0.54336 -2.8859 0.0039035 351 observations, 336 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 262, p-value = 1e-47
Постройте график невязок модели.
plotResiduals(mdl)
Как ожидалось, невязки от модели с наименьшими квадратами немного меньше, чем у регуляризованной модели. Однако это не значит, что mdl
является лучшим предиктором для новых данных.