Этот пример показывает, как упорядочить биномиальную регрессию. (Каноническая) функция ссылки по умолчанию для биномиальной регрессии является логистической функцией.
Загрузите данные ionosphere. Ответ Y является массивом ячеек символов 'b' или 'g'. Преобразуйте ячейки в логические значения с 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.
Модель является логитом (mu) = журнал (mu / (1 - mu)) = X*B0 + cnst. Поэтому для прогнозов, mu = exp(X*B0 + cnst)/(1+exp(x*B0 + cnst)).
Функция 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 является лучшим предиктором для новых данных.