Упорядочите логистическую регрессию

Этот пример показывает, как упорядочить биномиальную регрессию. (Каноническая) функция ссылки по умолчанию для биномиальной регрессии является логистической функцией.

Шаг 1. Подготовьте данные.

Загрузите данные ionosphere. Ответ Y является массивом ячеек символов 'b' или 'g'. Преобразуйте ячейки в логические значения с true, представляющим 'g'. Удалите первые два столбца X, потому что у них есть некоторые неловкие статистические свойства, которые выходят за рамки этого обсуждения.

load ionosphere
Ybool = strcmp(Y,'g');
X = X(:,3:end);

Шаг 2. Создайте перекрестную подтвержденную подгонку.

Создайте упорядоченную биномиальную регрессию с помощью 25 значений Lambda и 10-кратной перекрестной проверки. Этот процесс может занять несколько минут.

rng('default') % for reproducibility
[B,FitInfo] = lassoglm(X,Ybool,'binomial',...
    'NumLambda',25,'CV',10);

Шаг 3. Исследуйте графики найти соответствующую регуляризацию.

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 исходных предикторов.

Шаг 4. Создайте упорядоченную модель.

Постоянный термин находится в записи 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];

Шаг 5. Исследуйте невязки.

Отобразите данные тренировки на графике против образцовых прогнозов для упорядоченной модели lassoglm.

preds = glmval(B1,X,'logit');
histogram(Ybool - preds) % plot residuals
title('Residuals from lassoglm model')

Шаг 6. Альтернатива: Используйте идентифицированные предикторы в, наименьшие квадраты обобщили линейную модель.

Вместо того, чтобы использовать смещенные прогнозы из модели, можно сделать несмещенную модель, использующую только идентифицированные предикторы.

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 является лучшим предиктором для новых данных.