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