Як тренувати (логістичну?) Регресію в R за допомогою функції втрати L1?


11

Я можу тренувати логістичну регресію в Rвикористанні

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

але, IIUC, це оптимізує ймовірність журналу.

Чи є спосіб тренувати модель, використовуючи лінійну ( ) функцію втрат (яка в даному випадку така ж, як загальна відстань варіації )?L1

Тобто, даючи числовий вектор і бітовий (логічний) вектор , я хочу побудувати монотонну (фактично зростаючу) функцію таку, щозводиться до мінімуму.xyf|f(x)y|

Дивись також


Те, що ви хочете, не існує, і щоб бути тупим, це не має особливого сенсу. Ми можемо обговорити альтернативи, але вам потрібно більш ретельно зазначити, що ви намагаєтесь зробити. Чому ви хочете підігнати логістичну модель із втратою L1?
користувач603

@ user603: Тому що я хочу оцінити свою модель за допомогою TVD
sds

Ви, здається, говорите про пристосування логістичної кривої до даних, а не про встановлення біноміально розподілених даних - тобто про форму нелінійної регресії , але з використанням а не норми . Дійсно, функція втратиприпускає, що максимум не дорівнює (якщо це так, він посилається на оманливий біноміальний GLM). З іншого боку, якщо він дійсно буде обмежений до 0-1, функція втрат не має сенсу. Чи можете ви, будь ласка, надати детальну інформацію про свою фактичну ситуацію? L 2| f ( x ) - y | 1L1L2|f(х)-у|1
Glen_b -Встановіть Моніку

Зауважте, що довідка просить не пересилати одне і те ж запитання на кілька сайтів, а замість цього вибирати один. Якщо згодом ви передумаєте, який сайт найкращий, позначте його на увазі модератора і попросіть його перенести.
Glen_b -Встановіть Моніку

@Glen_b: Я думаю, що "бітовий (логічний) вектор y" має на увазі відповідь 0/1.
sds

Відповіді:


21

Те, що ви хочете зробити, не існує, оскільки це є відсутністю кращого слова.

Але спершу наголошу, чому я вважаю, що передумови вашого питання є здоровими. Потім я спробую пояснити, чому я вважаю, що висновки, які ви робите з них, спираються на нерозуміння логістичної моделі, і, нарешті, я запропоную альтернативний підхід.

Позначу вашихnспостережень (сміливіші літери позначають вектори), які лежать уpрозмірному просторі (перший запис x{(ххi,уi)}i=1ннp дорівнює 1) зp<n, y i[0,1]і f( xххip<нуi[0,1] - монотонна функція xf(ххi)=f(ххi'ββ) , скажімо, яклогістична кривадля фіксації ідей. Для доцільності, я просто припущущо п єдоситьвеликийпорівнянні з р .ххi'ββнp

Ви впевнені, що якщо ви плануєте використовувати TVD в якості критерію для оцінки пристосованої моделі, то розумно очікувати, що ваша відповідність оптимізує той самий критерій серед усіх можливих кандидатів за вашими даними. Звідси

ββ=аргхвββRp||уу-f(ххi'ββ)||1

Проблема - термін помилки : і якщо ми застосуємо E ( ϵϵi=уi-f(ххi'ββ) (ми просто хочемо, щоб наша модель була асимптотичнонеупередженою), тоді, ϵ я мушубутигетерокедастичною. Це тому, що y я може приймати лише два значення, 0 і 1. Отже, задано xЕ(ϵϵ)=0ϵi уi , ϵ я також може приймати лише два значення:1-f( xххiϵi коли y i = 1 , що відбувається з ймовірністю f ( x1-f(ххi'ββ)yi=1 , і - f ( xf(xxiββ) при y i = 1 , що відбувається з вірогідністю 1 - f ( xf(xxiββ)yi=1 .1f(xxiββ)

Ці міркування разом означають, що:

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

звідси не є постійною, а увігнутою параболою і максимізується при хvar(ϵϵ) такий, що E ( y | xxx .E(y|xx).5

Ця властива гетерокедастичність залишків має наслідки . Це передбачає, серед іншого, що, мінімізуючи функцію втрат , ви є асимптотичною частиною вашої вибірки. Тобто придатний βl1 взагалі не підходить для даних, але лише його частина, яка згрупована навколо місць, де xββ такий, що E ( yxx . На думку, ценайменш інформативні точки даних у вашій вибірці: вони відповідають тим спостереженням, для яких компонент шуму найбільший. Отже, ваш притягнення тягнеться до βE(yy|xx).5 , наприклад зробив невідповідним.ββ=ββ:f(xxββ).5

Одне з рішень, як видно з викладеного вище, полягає у відміні вимоги неупередженості. Популярний спосіб зміщення оцінювача (із доданою байєсівською інтерпретацією) - включення терміна усадки. Якщо ми змінимо масштаб відповіді:

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

а для обчислювальної доцільності замініть іншою монотонною функцією g ( xf(xxββ) - це буде зручно для подальшого позначення першого компонента вектора параметра як c, а решта p - 1 одиниць γg(xx,[c,γγ])=xx[c,γγ]cp1γγ-- and include a shrinkage term (for example one of the form ||γγ||2), the resulting optimization problem becomes:

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

Note that in this new (also convex) optimization problem, the penalty for a correctly classified observations is 0 and it grows linearly with xx[[c,γ] for a miss-classified one --as in the l1 loss. The [c,γγ] solution to this second optimization problem are the celebrated linear svm (with perfect separation) coefficients. As opposed to the ββ, it makes sense to learn these [c,γγ]з даних із штрафом типу TVD ("тип" через термін зміщення). Отже, це рішення широко впроваджується. Дивіться, наприклад, пакет R LiblineaR .


Я б хотів, щоб я міг дати вам більше 25 балів :-)
sds

@sds; thanks: it was a great question :) I will come back during the day and fill in the details, correct some typo.
user603

8

Я не впевнений, чому ви хочете використовувати втрату L1 для чогось обмеженого між 0 і 1. Залежно від того, яка ваша мета, ви можете замість цього розглянути щось на зразок втрати шарніра, що подібне до втрати L1 в одному напрямку та плоскому в іншому.

У будь-якому випадку, наведений нижче код повинен виконувати те, про що ви просили. Зауважимо, що оптимальна реакція - це в основному ступінчаста функція.

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

Ви можете використовувати пакет glmnet для встановлення моделей L1, L2. Вона не обмежується логістичною регресією, але включає її.

Ось віньєтка: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Також є веб-майнер: https://www.youtube.com/watch?v=BU2gjoLPfDc

Бібліотека хороша, але я знайшов glmnet простіше розпочати. Glmnet включає функцію, яка робить перехресну перевірку і вибирає для вас параметр регуляризації на основі різних показників, таких як AUC.

Щодо теорії, я б прочитав документ tibshiarini щодо ласо (регуляризація L1) та розділ про елементи статистичного навчання. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Щодо втрати журналу, варто лише оцінити моделі. Це не функція втрат для встановлення моделі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.