Bagaimana cara melatih regresi (logistik?) Di R menggunakan fungsi kerugian L1?

11

Saya bisa melatih regresi logistik dalam Rmenggunakan

glm(y ~ x, family=binomial(logit)))

tapi, IIUC, ini mengoptimalkan kemungkinan log.

Apakah ada cara untuk melatih model menggunakan fungsi kehilangan linier ( L1 ) (yang dalam hal ini sama dengan jarak variasi total )?

Yaitu, diberi vektor numerik x dan vektor sedikit (logis) y , saya ingin membangun fungsi monoton (pada kenyataannya, peningkatan) f sedemikian rupa sehingga |f(x)y|diminimalkan.

Lihat juga

sds
sumber
Apa yang Anda inginkan tidak ada, dan terus terang, itu tidak masuk akal. Kami dapat mendiskusikan alternatif tetapi Anda harus menyatakan secara lebih menyeluruh apa yang Anda coba lakukan. Mengapa Anda ingin menyesuaikan model logistik dengan kerugian L1?
user603
@ user603: Karena saya ingin mengevaluasi model saya menggunakan TVD
sds
Anda tampaknya berbicara tentang menyesuaikan kurva logistik dengan data, daripada menyesuaikan data yang didistribusikan secara biner - yaitu, bentuk regresi nonlinier , tetapi menggunakan norma daripada L 2 . Memang, fungsi kerugian Σ | f ( x ) - y | menunjukkan bahwa maksimum bukan 1 (jika itu masalahnya, itu membuat referensi ke GLM binomial menyesatkan). Di sisi lain, jika itu benar-benar adalah dibatasi untuk 0-1, fungsi kerugian tidak masuk akal. Bisakah Anda memberikan detail situasi aktual Anda? L1L2|f(x)y|1
Glen_b -Reinstate Monica
Harap perhatikan bahwa bantuan ini meminta Anda tidak mengirim silang pertanyaan yang sama ke beberapa situs, tetapi pilih satu situs saja. Jika nanti Anda berubah pikiran tentang situs mana yang terbaik, beri tanda untuk perhatian moderator dan minta untuk dipindahkan.
Glen_b -Reinstate Monica
@ Glen_b: Saya pikir "bit (logis) vektor y" tidak menyiratkan tanggapan 0/1.
sds

Jawaban:

21

Apa yang ingin Anda lakukan tidak ada karena, karena kurangnya kata yang lebih baik, cacat secara matematis.

Tetapi pertama-tama, saya akan menekankan mengapa menurut saya premis pertanyaan Anda masuk akal. Saya kemudian akan mencoba menjelaskan mengapa saya pikir kesimpulan yang Anda ambil dari mereka didasarkan pada kesalahpahaman model logistik dan, akhirnya, saya akan menyarankan pendekatan alternatif.

Saya akan menunjukkan pengamatannAnda(huruf tebal menunjukkan vektor) yang terletak diruangpdimensi (entri pertama x{(xxi,yi)}i=1nnpxxip<nyi[0,1]f(xxi)=f(xxiββ)xxiββnp

Anda benar bahwa jika Anda bermaksud menggunakan TVD sebagai kriteria untuk mengevaluasi model yang sesuai, maka masuk akal untuk mengharapkan kecocokan Anda untuk mengoptimalkan kriteria yang sama di antara semua kandidat yang mungkin, pada data Anda. Karenanya

ββ=argminββRp||yyf(xxiββ)||1

Masalahnya adalah istilah error : dan jika kita menegakkan (kami hanya ingin model kita menjadi asimtotik berisi ), kemudian, harus menjadi heteroskedastic . Ini karena dapat mengambil dua nilai, 0 dan 1. Oleh karena itu, diberikan , juga hanya dapat mengambil dua nilai: ketika , yang terjadi dengan probabilitas , dan ketikaϵi=yif(xxiββ)E(ϵϵ)=0ϵi yixxiϵi1f(xxiββ)yi=1f(xxiββ)f(xxiββ)yi=1, yang terjadi dengan probabilitas .1f(xxiββ)

Pertimbangan ini secara bersama menyiratkan bahwa:

var(ϵϵ)=E(ϵϵ2)=(1f(xxββ))2f(xxββ)+(f(xxββ))2(1f(xxββ))=(1f(xxββ))f(xxββ)=E(yy|xx)E(1yy|xx)

karenanya tidak konstan tetapi berbentuk parabola cekung dan dimaksimalkan ketika sedemikian rupa sehingga .var(ϵϵ)xxE(y|xx).5

Ini melekat heteroskedastisitas dari residual memiliki konsekuensi . Ini menyiratkan antara lain bahwa ketika meminimalkan fungsi kehilangan , Anda secara asimptot merupakan bagian dari bobot sampel Anda. Yaitu, yang cocok tidak cocok dengan data sama sekali tetapi hanya sebagian yang terkumpul di sekitar tempat-tempat di mana sedemikian rupa sehingga . Intinya, ini adalah titik data paling tidak informatif dalam sampel Anda : mereka sesuai dengan pengamatan yang komponen kebisingannya terbesar. Karenanya, kecocokan Anda ditarik ke , misalnya dibuat tidak relevan.l1ββxxE(yy|xx).5ββ=ββ:f(xxββ).5

Salah satu solusi, seperti yang jelas dari paparan di atas adalah dengan menjatuhkan persyaratan ketidakberpihakan. Cara populer untuk bias estimator (dengan beberapa interpretasi Bayesian terlampir) adalah dengan memasukkan istilah penyusutan. Jika kami skala responsnya:

yi+=2(yi.5),1in

dan, untuk kemanfaatan komputasi, ganti dengan fungsi monoton lainnya --it akan nyaman bagi sekuel untuk menunjukkan komponen pertama dari vektor parameter sebagai dan yang - dan termasuk istilah penyusutan (misalnya salah satu bentuk ), masalah optimisasi yang dihasilkan menjadi:f(xxββ)g(xx,[c,γγ])=xx[c,γγ]cp1γγ||γγ||2

[c,γγ]=argmin[[c,γγ]Rpi=1nmax(0,1yi+xxi[[c,γγ])+12||γγ||2

Perhatikan bahwa dalam masalah optimisasi baru (juga cembung) ini, penalti untuk pengamatan yang diklasifikasikan dengan benar adalah 0 dan tumbuh secara linier dengan untuk yang tidak diklasifikasikan - seperti dalam kerugian. Solusi untuk masalah optimasi kedua ini adalah koefisien linear svm (dengan pemisahan sempurna). Berbeda dengan , masuk akal untuk mempelajari dari data dengan penalti jenis TVD ('type' karena istilah bias) . Akibatnya, solusi ini diterapkan secara luas. Lihat misalnya paket R LiblineaR .xx[[c,γ]l1 β[c,γγ] [ c , γββ[c,γγ]

pengguna603
sumber
Saya berharap saya bisa memberi Anda lebih dari 25 poin :-)
sds
@ sd; terima kasih: itu pertanyaan yang bagus :) Saya akan kembali siang hari dan mengisi rinciannya, memperbaiki beberapa kesalahan ketik.
user603
8

Saya tidak yakin mengapa Anda ingin menggunakan kerugian L1 untuk sesuatu yang dibatasi antara 0 dan 1. Tergantung pada apa tujuan Anda, Anda mungkin ingin mempertimbangkan sesuatu seperti kehilangan engsel, yang mirip dengan kehilangan L1 dalam satu arah dan datar di yang lain.

Bagaimanapun, kode di bawah ini harus melakukan apa yang Anda minta. Perhatikan bahwa respons optimal pada dasarnya adalah fungsi langkah.

set.seed(1)

# Fake data
x = seq(-1, 1, length = 100)
y = rbinom(100, plogis(x), size = 1) # plogis is the logistic function

# L1 loss
loss = function(y, yhat){
  sum(abs(y - yhat))
}

# Function to estimate loss associated with a given slope & intercept
fn = function(par){
  a = par[1]
  b = par[2]
  loss(y = y, yhat = plogis(a + b * x))
}

# Find the optimal parameters
par = optim(
  par = c(a = 0, b = 0),
  fn = fn
)$par

# Plot the results
plot(y ~ x)
curve(plogis(par[1] + par[2] * x), add = TRUE, n = 1000)
David J. Harris
sumber
0

Anda dapat menggunakan paket glmnet untuk pemasangan model L1, L2. Ini tidak terbatas pada regresi logistik tetapi termasuk itu.

Berikut sketsanya: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Ada juga webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear baik, tetapi saya telah menemukan glmnet lebih mudah untuk memulai. Glmnet menyertakan fungsi yang melakukan validasi silang dan memilih parameter regularisasi untuk Anda berdasarkan pada berbagai metrik seperti AUC.

Mengenai teori, saya akan membaca makalah tibshiarini tentang laso (regularisasi L1) dan bab dalam elemen pembelajaran statistik. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Tentang kehilangan log, hanya untuk mengevaluasi model. Ini bukan fungsi kerugian untuk pemasangan model.

marbel
sumber