Jak trenować regresję (logistyczną?) W R za pomocą funkcji utraty L1?

11

Potrafię trenować regresję logistyczną w zakresie Rkorzystania

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

ale IIUC optymalizuje to pod kątem prawdopodobieństwa dziennika.

Czy istnieje sposób wytrenowania modelu za pomocą funkcji straty liniowej ( L1 ) (która w tym przypadku jest taka sama jak całkowita odległość zmienności )?

To znaczy, biorąc pod uwagę wektor liczbowy x i nieco (logiczny) wektor y , chcę skonstruować funkcję monotoniczną (w rzeczywistości zwiększającą się) f taką, że |f(x)y|jest zminimalizowane.

Zobacz też

sds
źródło
To, czego chcesz, nie istnieje, i mówiąc wprost, nie ma większego sensu. Możemy omówić alternatywy, ale musisz dokładniej określić, co próbujesz zrobić. Dlaczego chcesz dopasować model logistyczny do utraty L1?
user603
@ user603: Ponieważ chcę ocenić swój model za pomocą TVD
sds
Wydaje się, że mówisz o dopasowaniu krzywej logistycznej do danych, a nie dopasowaniu danych o rozkładzie dwumianowym - to znaczy formie regresji nieliniowej , ale z wykorzystaniem raczej normy niż L 2 . Rzeczywiście, funkcja straty | f ( x ) - y | sugeruje, że maksimum nie wynosi 1 (w takim przypadku odnosi się do dwumianowego GLM wprowadzającego w błąd). Z drugiej strony, jeśli tak naprawdę jest ograniczony do 0-1, funkcja straty nie ma sensu. Czy możesz podać szczegóły swojej faktycznej sytuacji? L1L2|f(x)y|1
Glen_b
Należy pamiętać, że pomoc prosi, aby nie przesyłać tego samego pytania do wielu witryn, ale zamiast tego wybrać jedną. Jeśli później zmienisz zdanie na temat tego, która strona jest najlepsza, oflaguj ją, aby zwrócić uwagę moderatora i poprosić o przeniesienie.
Glen_b
@Glen_b: Myślę, że „bitowy (logiczny) wektor y” implikuje odpowiedź 0/1.
sds

Odpowiedzi:

21

To, co chcesz zrobić, nie istnieje, ponieważ z braku lepszego słowa jest matematycznie wadliwe.

Ale najpierw podkreślę, dlaczego uważam, że przesłanki twojego pytania są solidne. Spróbuję następnie wyjaśnić, dlaczego uważam, że wyciągnięte z nich wnioski opierają się na niezrozumieniu modelu logistycznego, a na koniec zasugeruję alternatywne podejście.

Oznaczę twojenobserwacji (pogrubione litery oznaczają wektory), które leżą wprzestrzenipwymiarowej (pierwszy wpis x{(xxi,yi)}i=1nnp jest 1)p<n, Y i[0,1], a f( xxxip<nyi[0,1] to monotonna funkcja xf(xxi)=f(xxiββ) , powiedz jakkrzywa logistyczna,aby naprawić pomysły. Dla wygody założę, że n jestwystarczającoduże w porównaniu do p .xxiββnp

Masz rację, że jeśli zamierzasz użyć TVD jako kryterium oceny dopasowanego modelu, uzasadnione jest oczekiwanie, że twoje dopasowanie zoptymalizuje to samo kryterium wśród wszystkich możliwych kandydatów na twoich danych. W związku z tym

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

Problemem jest błąd : i jeśli(po prostu chcemy, aby nasz model był asymptotyczniebezstronny), wtedymusibyćheteroskedastyczny. Wynika to z tego, żemoże przyjmować tylko dwie wartości, 0 i 1. Dlatego, biorąc pod uwagę ,może również przyjmować tylko dwie wartości:gdy, co występuje z prawdopodobieństwemigdy, co występuje z prawdopodobieństwem.ϵi=yif(xxiββ)ϵ i y i xE(ϵϵ)=0ϵi yiϵ i 1-f( xxxiϵiy i = 1 f ( x1f(xxiββ)yi=1- f ( xf(xxiββ)y i = 1 1 - f ( xf(xxiββ)yi=11f(xxiββ)

Te rozważania łącznie oznaczają, że:

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

stąd nie jest stały, ale ma wklęsły kształt paraboli i jest maksymalizowany, gdy jest takie, że .var(ϵϵ)xxE(y|xx).5

Ta nieodłączna heteroskedastyczność reszt ma konsekwencje . Oznacza to między innymi, że minimalizując utraty , masz asymptotycznie część swojej próbki. Oznacza to, że dopasowany ogóle nie pasuje do danych, ale tylko jego część skupiona wokół miejsc, w których jest taki, że . To są najmniej pouczające punkty danych w twojej próbie : odpowiadają one obserwacjom, dla których składnik hałasu jest największy. Dlatego twoje dopasowanie jest przyciągane do , np. Jest nieistotne.l1ββxxE(yy|xx).5ββ=ββ:f(xxββ).5

Jednym z rozwiązań, jak wynika z powyższego opisu, jest zniesienie wymogu bezstronności. Popularnym sposobem na odchylenie estymatora (z dołączoną interpretacją bayesowską) jest włączenie terminu skurczu. Jeśli przeskalujemy odpowiedź:

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

i dla celów obliczeniowych zastąp inną funkcją monotoniczną --it będzie wygodne kontynuacja oznacza pierwszy komponent wektora parametru jak , a pozostałe te - i to określenie kurczenie (na przykład jedna z postaci ), wynikający z tego problem optymalizacji staje się:f(xxββ)g(xx,[c,γγ])=xx[c,γγ]cp1γγ||γγ||2

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

Zwróć uwagę, że w tym nowym (również wypukłym) problemie optymalizacji kara za poprawnie sklasyfikowane obserwacje wynosi 0 i rośnie liniowo wraz z dla sklasyfikowanej - jak w utrata. Rozwiązaniem drugiego problemu optymalizacji są znane współczynniki liniowe svm (z idealną separacją). W przeciwieństwie do , sensowne jest nauczenie się tych z danych z karą typu TVD („typ” z powodu określenia błędu) . W związku z tym to rozwiązanie jest szeroko wdrażane. Zobacz na przykład pakiet R LiblineaR .1 1 [ c , γxx[[c,γ]l1 β[c,γγ] [ c , γββ[c,γγ]

użytkownik603
źródło
Chciałbym dać ci więcej niż 25 punktów :-)
sds
@sds; dzięki: to było świetne pytanie :) Wrócę w ciągu dnia i uzupełnię szczegóły, poprawię literówkę.
user603
8

Nie jestem pewien, dlaczego chcesz użyć utraty L1 do czegoś ograniczonego między 0 a 1. W zależności od tego, jaki jest twój cel, możesz rozważyć coś takiego jak utrata zawiasu, która jest podobna do utraty L1 w jednym kierunku i płasko w innym.

W każdym razie poniższy kod powinien wykonać to, o co prosiłeś. Zauważ, że optymalna reakcja jest w zasadzie funkcją krokową.

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
źródło
0

Możesz użyć pakietu glmnet do dopasowania modeli L1, L2. Nie ogranicza się to do regresji logistycznej, ale obejmuje ją.

Oto winieta: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Istnieje również webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear jest dobry, ale łatwiej było mi zacząć korzystać z glmnet. Glmnet zawiera funkcję, która dokonuje weryfikacji krzyżowej i wybiera dla ciebie parametr regularyzacji na podstawie różnych wskaźników, takich jak AUC.

Jeśli chodzi o teorię, czytałbym artykuł tibshiarini dotyczący lasso (regularyzacja L1) i rozdział dotyczący elementów uczenia statystycznego. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

O utracie dziennika chodzi tylko o ocenę modeli. To nie jest funkcja straty dla dopasowania modelu.

marmur
źródło