В этом примере показано, как регуляризовать биномиальную регрессию. По умолчанию (каноническая) функция связи для биномиальной регрессии является логистической функцией.
Загрузить 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) = log (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 является лучшим предиктором для новых данных.