Logistic

為什麼邏輯回歸在高維度上特別容易過擬合?

  • June 1, 2020

為什麼*“邏輯回歸的漸近性*”使它特別容易 在高維度上****過度擬合?(來源):

在此處輸入圖像描述

我了解LogLoss交叉熵)隨著 $ y $ (真實概率)方法 $ 1-y' $ (預測概率):

但是為什麼這意味著*“邏輯回歸的漸近性質會在沒有正則化的情況下將****高維的損失推向 0 ”*?

在我看來,僅僅因為損失會迅速增長(如果我們非常接近錯誤且完全相反的答案),並不意味著它會因此嘗試完全插值數據。如果有的話,優化器會盡可能積極地避免進入損失的漸近部分(快速增長部分)。

現有的答案沒有錯,但我認為解釋可能更直觀一些。這裡有三個關鍵思想。

  1. 漸近預測 =======

在邏輯回歸中,我們使用線性模型來預測 $ \mu $ , 的對數機率 $ y=1 $

$$ \mu = \beta X $$

然後我們使用邏輯/逆對數函數將其轉換為概率

$$ P(y=1) = \frac{1}{1 + e^{-\mu}} $$

在此處輸入圖像描述

重要的是,這個函數實際上從未達到 $ 0 $ 或者 $ 1 $ . 反而, $ y $ 越來越接近 $ 0 $ 作為 $ \mu $ 變得更消極,更接近 $ 1 $ 因為它變得更加積極。

在此處輸入圖像描述

2.完美分離

有時,您最終會遇到模型想要預測的情況 $ y=1 $ 或者 $ y=0 $ . 當可以通過數據繪製一條直線時,就會發生這種情況,這樣每個 $ y=1 $ 在線的一側,並且 $ 0 $ 在另一。這稱為完美分離

1D 中的完美分離

二維

在此處輸入圖像描述

發生這種情況時,模型會嘗試預測盡可能接近 $ 0 $ 和 $ 1 $ 盡可能,通過預測的值 $ \mu $ 盡可能低和高。為此,它必須設置回歸權重, $ \beta $ 盡可能大。

正則化是一種抵消這種情況的方法:不允許設置模型 $ \beta $ 無限大,所以 $ \mu $ 不能無限高或無限低,並且預測 $ y $ 不能靠近 $ 0 $ 或者 $ 1 $ .

  1. 更多維度更容易實現完美分離 ================

因此,當您有許多預測變量時,正則化變得更加重要。

為了說明,這裡再次繪製了之前繪製的數據,但沒有第二個預測變量。我們看到再也不可能畫出一條完美分隔的直線 $ y=0 $ 從 $ y=1 $ .

在此處輸入圖像描述


代碼

# https://stats.stackexchange.com/questions/469799/why-is-logistic-regression-particularly-prone-to-overfitting

library(tidyverse)
theme_set(theme_classic(base_size = 20))

# Asymptotes
mu = seq(-10, 10, .1)
p = 1 / (1 + exp(-mu))
g = ggplot(data.frame(mu, p), aes(mu, p)) + 
 geom_path() +
 geom_hline(yintercept=c(0, 1), linetype='dotted') +
 labs(x=expression(mu), y='P(y=1)')
g

g + coord_cartesian(xlim=c(-10, -9), ylim=c(0, .001))

# Perfect separation
x = c(1, 2, 3, 4, 5, 6)
y = c(0, 0, 0, 1, 1, 1)
df = data.frame(x, y)
ggplot(df, aes(x, y)) +
 geom_hline(yintercept=c(0, 1), linetype='dotted') +
 geom_smooth(method='glm', 
             method.args=list(family=binomial), se=F) +
 geom_point(size=5) +
 geom_vline(xintercept=3.5, color='red', size=2, linetype='dashed')

## In 2D
x1 = c(rnorm(100, -2, 1), rnorm(100, 2, 1))
x2 = c(rnorm(100, -2, 1), rnorm(100, 2, 1))
y = ifelse( x1 + x2 > 0, 1, 0)
df = data.frame(x1, x2, y)
ggplot(df, aes(x1, x2, color=factor(y))) +
 geom_point() +
 geom_abline(intercept=1, slope=-1,
             color='red', linetype='dashed') +
 scale_color_manual(values=c('blue', 'black')) +
 coord_equal(xlim=c(-5, 5), ylim=c(-5, 5)) +
 labs(color='y')

## Same data, but ignoring x2
ggplot(df, aes(x1, y)) +
 geom_hline(yintercept=c(0, 1), linetype='dotted') +
 geom_smooth(method='glm', 
             method.args=list(family=binomial), se=T) +
 geom_point()

引用自:https://stats.stackexchange.com/questions/469799

comments powered by Disqus