Overfitting dalam Regresi Linear

Aug 27 2020

Saya baru saja memulai pembelajaran mesin dan saya kesulitan memahami bagaimana overfitting dapat terjadi dalam model regresi linier.

Mengingat kita hanya menggunakan 2 variabel fitur untuk melatih model, bagaimana mungkin bidang datar dipasang berlebihan ke kumpulan titik data?

Saya berasumsi regresi linier hanya menggunakan garis untuk menggambarkan hubungan linier antara 2 variabel dan bidang datar untuk menggambarkan hubungan antara 3 variabel, saya kesulitan memahami (atau lebih tepatnya membayangkan) bagaimana overfitting pada garis atau bidang dapat terjadi?

Jawaban

20 RobertLong Aug 27 2020 at 17:18

Dalam regresi linier, overfitting terjadi jika model "terlalu kompleks". Ini biasanya terjadi bila ada banyak parameter dibandingkan dengan jumlah pengamatan. Model seperti itu tidak akan menggeneralisasi data baru dengan baik. Artinya, ini akan bekerja dengan baik pada data pelatihan, tetapi buruk pada data pengujian.

Simulasi sederhana dapat menunjukkan ini. Disini saya menggunakan R:

> set.seed(2)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> 
> (m0 <- lm(Y ~ X)) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -0.2393     1.8568  -0.129    0.909
X             1.0703     0.6780   1.579    0.255

Residual standard error: 1.516 on 2 degrees of freedom
Multiple R-squared:  0.5548,    Adjusted R-squared:  0.3321 
F-statistic: 2.492 on 1 and 2 DF,  p-value: 0.2552

Perhatikan bahwa kami memperoleh perkiraan yang baik dari nilai sebenarnya untuk koefisien X. Perhatikan Adjusted R-squared sebesar 0,3321 yang merupakan indikasi kesesuaian model.

Sekarang kami menyesuaikan model kuadrat:

> (m1 <- lm(Y ~ X + I(X^2) )) %>% summary()


Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -4.9893     2.7654  -1.804    0.322
X             5.8202     2.5228   2.307    0.260
I(X^2)       -0.9500     0.4967  -1.913    0.307

Residual standard error: 0.9934 on 1 degrees of freedom
Multiple R-squared:  0.9044,    Adjusted R-squared:  0.7133 
F-statistic: 4.731 on 2 and 1 DF,  p-value: 0.3092

Sekarang kita memiliki Adjusted R-squared yang jauh lebih tinggi: 0,7133 yang mungkin membuat kita berpikir bahwa modelnya jauh lebih baik. Memang jika kita memplot data dan valus yang diprediksi dari kedua model kita mendapatkan:

> fun.linear <- function(x) { coef(m0)[1] + coef(m0)[2] * x  }
> fun.quadratic <- function(x) { coef(m1)[1] + coef(m1)[2] * x  + coef(m1)[3] * x^2}
> 
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point()  + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)

Jadi secara sepintas lalu, model kuadrat terlihat jauh lebih baik.

Sekarang, jika kita mensimulasikan data baru, tetapi menggunakan model yang sama untuk memplot prediksi, kita dapatkan

> set.seed(6)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point()  + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)

Jelas model kuadrat tidak berjalan dengan baik, sedangkan model linier masih masuk akal. Namun, jika kita mensimulasikan lebih banyak data dengan jarak yang diperpanjang, menggunakan seed asli, sehingga titik data awal sama dengan simulasi pertama yang kita temukan:

> set.seed(2)
> N <- 10
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point()  + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)

Jelas model linier masih berkinerja baik, tetapi model kuadrat tidak ada harapan di luar rentang orriginal. Hal ini karena ketika kami memasangkan model, kami memiliki terlalu banyak parameter (3) dibandingkan dengan jumlah observasi (4).


Edit: Untuk menjawab pertanyaan di komentar untuk jawaban ini, tentang model yang tidak menyertakan istilah tingkat tinggi.

Situasinya sama: Jika jumlah parameter mendekati jumlah observasi, model akan overfitted. Dengan tidak adanya suku orde yang lebih tinggi, hal ini akan terjadi ketika jumlah variabel / fitur dalam model mendekati jumlah observasi.

Sekali lagi kami dapat mendemonstrasikan ini dengan mudah dengan simulasi:

Di sini kami mensimulasikan data data acak dari distribusi normal, sehingga kami memiliki 7 pengamatan dan 5 variabel / fitur:

> set.seed(1)
> n.var <- 5
> n.obs <- 7
> 
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
> 
> lm(Y ~ . , dt) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -0.6607     0.2337  -2.827    0.216
V1            0.6999     0.1562   4.481    0.140
V2           -0.4751     0.3068  -1.549    0.365
V3            1.2683     0.3423   3.705    0.168
V4            0.3070     0.2823   1.087    0.473
V5            1.2154     0.3687   3.297    0.187

Residual standard error: 0.2227 on 1 degrees of freedom
Multiple R-squared:  0.9771,    Adjusted R-squared:  0.8627 

Kami memperoleh R-squared yang disesuaikan sebesar 0,86 yang menunjukkan kesesuaian model yang sangat baik. Pada data yang murni acak. Model terlalu banyak dipasang. Sebagai perbandingan jika kita menggandakan jumlah obervasi menjadi 14:

> set.seed(1)
> n.var <- 5
> n.obs <- 14
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
> lm(Y ~ . , dt) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.10391    0.23512  -0.442   0.6702  
V1          -0.62357    0.32421  -1.923   0.0906 .
V2           0.39835    0.27693   1.438   0.1883  
V3          -0.02789    0.31347  -0.089   0.9313  
V4          -0.30869    0.30628  -1.008   0.3430  
V5          -0.38959    0.20767  -1.876   0.0975 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7376 on 8 degrees of freedom
Multiple R-squared:  0.4074,    Adjusted R-squared:  0.03707 
F-statistic:   1.1 on 5 and 8 DF,  p-value: 0.4296

..menyesuaikan R turun menjadi hanya 0,037

4 Dhanushkumar Aug 28 2020 at 00:10

Overfitting terjadi jika model berperforma baik pada data kereta tetapi tidak berfungsi dengan baik pada data pengujian. Ini karena garis yang paling sesuai dengan model regresi linier Anda bukanlah garis yang digeneralisasikan. Ini mungkin karena berbagai faktor. Beberapa faktor umum adalah

  • Pencilan dalam data kereta.
  • Train and Test data berasal dari distribusi yang berbeda.

Jadi sebelum membangun model, pastikan Anda telah memeriksa faktor-faktor ini untuk mendapatkan model umum.

2 Peteris Aug 29 2020 at 00:22

Sejumlah besar parameter dibandingkan dengan titik data

Secara umum, salah satu aspek overfitting adalah mencoba untuk "menemukan informasi dari pengetahuan" saat Anda ingin menentukan sejumlah besar parameter yang sebanding dari sejumlah terbatas poin data bukti aktual.

Untuk regresi linier sederhana y = ax + bada dua parameter, jadi untuk sebagian besar kumpulan data, parameter tersebut akan menggunakan parameter, bukan parameter berlebih. Namun, mari kita lihat kasus (merosot) dari hanya dua titik data. Dalam situasi tersebut, Anda selalu dapat menemukan solusi regresi linier yang sempurna - namun, apakah solusi tersebut bermakna? Mungkin tidak. Jika Anda memperlakukan regresi linier dari dua titik data sebagai solusi yang memadai, itu akan menjadi contoh utama overfitting.

Berikut adalah contoh bagus overfitting dengan regresi linier oleh Randall Munroe dari ketenaran xkcd yang menggambarkan masalah ini: