Làm cách nào để tôi huấn luyện hồi quy (logistic?) Trong R bằng hàm mất L1?


11

Tôi có thể đào tạo một hồi quy logistic trong Rviệc sử dụng

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

nhưng, IIUC, điều này tối ưu hóa cho khả năng đăng nhập.

Có cách nào để huấn luyện mô hình bằng cách sử dụng hàm mất tuyến tính ( ) (trong trường hợp này giống với tổng khoảng cách biến đổi ) không?L1

Tức là, được cho một vectơ số và một vectơ (logic) , tôi muốn xây dựng một hàm đơn điệu (trên thực tế, tăng) sao chođược giảm thiểu.xyf|f(x)y|

Xem thêm


Những gì bạn muốn không tồn tại, và nói thẳng ra, nó không có ý nghĩa nhiều. Chúng tôi có thể thảo luận về các lựa chọn thay thế nhưng bạn cần nói rõ hơn những gì bạn đang cố gắng làm. Tại sao bạn muốn phù hợp với một mô hình logistic với mất L1?
user603

@ user603: Bởi vì tôi muốn đánh giá mô hình của mình bằng TVD
sds

Có vẻ như bạn đang nói về việc khớp đường cong logistic với dữ liệu, thay vì khớp dữ liệu phân phối nhị thức - nghĩa là một dạng hồi quy phi tuyến , nhưng sử dụng thay vì định mức. Thật vậy, hàm mấtgợi ý rằng mức tối đa không phải là (nếu đó là trường hợp, nó làm cho tham chiếu đến sai lệch GLM nhị thức). Mặt khác, nếu nó thực sự bị giới hạn ở 0-1, thì hàm mất sẽ không có ý nghĩa. Bạn có thể cho biết chi tiết về tình hình thực tế của bạn xin vui lòng? L1L2|f(x)y|1
Glen_b -Reinstate Monica

Xin lưu ý rằng trợ giúp yêu cầu bạn không đăng chéo cùng một câu hỏi lên nhiều trang web, nhưng thay vào đó hãy chọn một trang web duy nhất. Nếu sau này bạn đổi ý về trang web nào là tốt nhất, hãy gắn cờ cho sự chú ý của người điều hành và yêu cầu nó được di chuyển.
Glen_b -Reinstate Monica

@Glen_b: Tôi nghĩ rằng "bit (logic) vector y" không ngụ ý phản hồi 0/1.
sds

Câu trả lời:


21

Những gì bạn muốn làm không tồn tại bởi vì nó, vì thiếu từ tốt hơn, thiếu sót về mặt toán học.

Nhưng trước tiên, tôi sẽ nhấn mạnh lý do tại sao tôi nghĩ rằng tiền đề của câu hỏi của bạn là âm thanh. Sau đó tôi sẽ cố gắng giải thích lý do tại sao tôi nghĩ rằng kết luận bạn rút ra từ họ dựa trên sự hiểu lầm về mô hình logistic và cuối cùng, tôi sẽ đề xuất một cách tiếp cận khác.

Tôi sẽ biểu thị các quan sát của bạn (các chữ cái đậm hơn biểu thị các vectơ) nằm trong không gian chiều (mục nhập đầu tiên của là 1) với , và là một hàm đơn điệu của , nói như đường cong logistic để sửa ý tưởng. Để giải quyết vấn đề, tôi sẽ chỉ cho rằng là đủ lớn so với .{(xxi,yi)}i=1nnpxxip<nyi[0,1]f(xxi)=f(xxiββ)xxiββnp

Bạn đúng rằng nếu bạn có ý định sử dụng TVD làm tiêu chí để đánh giá mô hình được trang bị, thì thật hợp lý khi mong đợi sự phù hợp của bạn để tối ưu hóa cùng tiêu chí đó trong số tất cả các ứng cử viên có thể, trên dữ liệu của bạn. Vì thế

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

Vấn đề là thuật ngữ lỗi : và nếu chúng tôi thực thi (chúng tôi chỉ đơn giản muốn mô hình của mình không thiên vị ) phảidị thể . Điều này là do có thể nhận hai giá trị 0 và 1. Do đó, với , cũng chỉ có thể nhận hai giá trị: khi , xảy ra với xác suất và khiϵi=yif(xxiββ)E(ϵϵ)=0ϵi yixxiϵi1f(xxiββ)yi=1f(xxiββ)f(xxiββ)yi=1, xảy ra với xác suất .1f(xxiββ)

Những cân nhắc này cùng ngụ ý rằng:

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

do đó không phải là hằng số parabola lõm và được tối đa hóa khi sao cho .var(ϵϵ)xxE(y|xx).5

Sự không đồng nhất vốn có của phần dư có hậu quả . Điều này hàm ý trong số những điều khác mà khi giảm thiểu chức năng mất , bạn là một phần quá trọng lượng của mẫu. Đó là, được trang bị toàn không phù hợp với dữ liệu mà chỉ là phần của nó được nhóm xung quanh các vị trí nơi sao cho . Nói một cách dí dỏm, đây là những điểm dữ liệu ít thông tin nhất trong mẫu của bạn : chúng tương ứng với những quan sát mà thành phần nhiễu là lớn nhất. Do đó, mức độ phù hợp của bạn được kéo về phía , ví dụ: không liên quan.l1ββxxE(yy|xx).5ββ=ββ:f(xxββ).5

Một giải pháp, rõ ràng từ giải trình ở trên là bỏ yêu cầu không thiên vị. Một cách phổ biến để thiên vị công cụ ước tính (có một số giải thích Bayes kèm theo) là bao gồm một thuật ngữ co rút. Nếu chúng tôi mở rộng lại phản hồi:

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

và, để nhanh chóng tính toán, thay thế bằng một hàm đơn điệu khác --it sẽ thuận lợi cho các phần tiếp theo để biểu thị thành phần đầu tiên của vector của tham số như và số còn lại cái - và bao gồm một thuật ngữ co rút (ví dụ một trong những hình thức ), vấn đề tối ưu hóa kết quả trở thành:f(xxββ)g(xx,[c,γγ])=xx[c,γγ]cp1γγ||γγ||2

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

Lưu ý rằng trong bài toán tối ưu hóa mới (cũng lồi) này, hình phạt cho các quan sát được phân loại chính xác là 0 và nó phát triển tuyến tính với cho một lỗi được phân loại sai - như trong thua. Giải pháp cho vấn đề tối ưu hóa thứ hai này là các hệ số svm tuyến tính (với sự phân tách hoàn hảo). Trái ngược với , việc tìm hiểu những từ dữ liệu với hình phạt loại TVD ('loại' là điều hợp lý) . Do đó, giải pháp này được thực hiện rộng rãi. Xem ví dụ gói LiblineaR .xx[[c,γ]l1[c,γγ]ββ[c,γγ]


Tôi ước tôi có thể cho bạn nhiều hơn 25 điểm :-)
sds

@sds; cảm ơn: đó là một câu hỏi tuyệt vời :) Tôi sẽ trở lại vào ban ngày và điền vào các chi tiết, sửa một số lỗi chính tả.
user603

8

Tôi không chắc tại sao bạn muốn sử dụng mất L1 cho thứ gì đó bị ràng buộc trong khoảng từ 0 đến 1. Tùy thuộc vào mục tiêu của bạn là gì, bạn có thể muốn xem xét một số thứ như mất bản lề thay vào đó, tương tự như mất L1 theo một hướng và bằng phẳng trong cái khác

Trong mọi trường hợp, mã dưới đây sẽ làm những gì bạn đã yêu cầu. Lưu ý rằng đáp ứng tối ưu về cơ bản là một chức năng bước.

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)

0

Bạn có thể sử dụng gói glmnet để phù hợp với các mô hình L1, L2. Nó không giới hạn ở hồi quy logistic nhưng bao gồm nó.

Đây là họa tiết: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Ngoài ra còn có một webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear là tốt, nhưng tôi đã thấy glmnet dễ dàng hơn để bắt đầu. Glmnet bao gồm một chức năng xác thực chéo và chọn tham số chính quy cho bạn dựa trên các số liệu khác nhau như AUC.

Về lý thuyết, tôi sẽ đọc bài báo tibshiarini liên quan đến lasso (chính quy L1) và chương về các yếu tố của học thống kê. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Về việc mất log, nó chỉ để đánh giá các mô hình. Đây không phải là một chức năng mất cho phù hợp mô hình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.