로지스틱 회귀를 R
사용할 수 있습니다.
glm(y ~ x, family=binomial(logit)))
그러나 IIUC는 로그 가능성을 최적화합니다.
선형 ( ) 손실 함수 (이 경우 총 변동 거리 와 동일)를 사용하여 모델을 학습하는 방법 이 있습니까?
즉, 숫자 벡터 주어진 및 비트 (논리) 벡터 , I는 (증가하는 사실)를 단조 함수를 생성하고자 되도록최소화됩니다.y f ∑ | f ( x ) − y |
또한보십시오
로지스틱 회귀를 R
사용할 수 있습니다.
glm(y ~ x, family=binomial(logit)))
그러나 IIUC는 로그 가능성을 최적화합니다.
선형 ( ) 손실 함수 (이 경우 총 변동 거리 와 동일)를 사용하여 모델을 학습하는 방법 이 있습니까?
즉, 숫자 벡터 주어진 및 비트 (논리) 벡터 , I는 (증가하는 사실)를 단조 함수를 생성하고자 되도록최소화됩니다.y f ∑ | f ( x ) − y |
또한보십시오
답변:
더 나은 단어가 없기 때문에 수학적으로 결함이 있기 때문에 원하는 것은 존재하지 않습니다.
그러나 먼저, 나는 당신의 질문의 전제가 건전하다고 생각하는 이유를 강조 할 것입니다. 그런 다음 그로부터 도출 한 결론이 로지스틱 모델에 대한 오해에 근거한다고 생각하는 이유를 설명하려고 노력할 것이며, 마지막으로 대안적인 접근법을 제안 할 것입니다.
I가 나타내는 것 하여 관찰 (대담한 글자가 경로를 나타낸다)의 어느 거짓말 차원 공간 (첫 번째 엔트리 1)와 , 와 의 단조로운 함수 , 등을 말한다 로지스틱 곡선 아이디어를 고치기 위해. 편의상, 나는 이 비해 충분히 크다고 가정합니다 . np x p<n y i ∈[0,1]f( xx n p
적합 모델을 평가 하기 위해 TVD 를 기준 으로 사용하려는 경우 , 데이터에 대해 가능한 모든 후보 중에서 동일한 기준을 최적화하는 것이 적합하다는 것이 합리적입니다. 그 후
문제는 오류 용어입니다 : 그리고 만약 우리가 을 강제한다면 (우리는 단순히 모델이 편향 되기를 원합니다 ) 는 heteroskedastic 이어야 합니다 . 때문이다 두 값 0을 취할 수 1. 따라서 주어진 , 또한 두 개의 값을 취할 수있다 : , 때 확률 및 발생합니다. 확률 와 함께 발생합니다 .
이러한 고려 사항은 다음을 의미합니다.
따라서 은 일정하지 않지만 오목한 포물선 모양이며 가 와 같은 경우 최대화됩니다 .
잔차 의이 고유 이분산성은 결과를 초래 합니다. 이는 손실 함수를 최소화 할 때 샘플의 부분적으로 임을 의미 합니다. 즉, 피팅 된 는 데이터를 전혀 맞추지 않고 가 와 같은 위치에 모여있는 데이터의 일부에만 해당하지 않습니다 . 요컨대, 이들은 샘플에서 가장 유익한 데이터 포인트입니다 . 이는 노이즈 성분이 가장 큰 관측치에 해당합니다. 따라서, 당신의 적합은 쪽으로 끌어 당겨 집니다 (예 : 관련이 없음).
위의 설명에서 분명한 한 가지 해결책은 편견의 요구를 없애는 것입니다. 추정값을 편향시키는 일반적인 방법은 축소 용어를 포함시키는 것입니다. 응답의 규모를 조정하면 :
계산상의 편의를 위해 를 다른 모노톤 함수 -속편이 매개 변수 벡터의 첫 번째 구성 요소를 로, 나머지 은 로 표시하는 것이 편리 하며 축소 용어 (예 : 형식 중 하나)를 포함합니다. ) 결과 최적화 문제는 다음과 같습니다.
이 새로운 (볼록한) 최적화 문제에서 올바르게 분류 된 관측치에 대한 페널티는 0이며 l_1에서와 같이 미스 분류 된 것에 대해서는 와 선형으로 증가 합니다 손실. 이 제 최적화 문제에 대한 해결책은 계수 (완전한 분리와 함께) 경축 선형 SVM이다. 와는 반대로 TVD 유형의 페널티가있는 데이터에서 이러한 를 배우는 것이 좋습니다 (바이어스 항으로 인해 'type'). . 결과적으로이 솔루션은 널리 구현됩니다. 예를 들어 R 패키지 LiblineaR을 참조하십시오 .
왜 당신이 0과 1 사이에 제한된 것을 위해 L1 손실을 사용하고 싶은지 잘 모르겠습니다. 목표가 무엇인지에 따라, 한 방향으로 평평한 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)
L1, L2 모델에 glmnet 패키지를 사용할 수 있습니다. 로지스틱 회귀에만 국한되지 않고 포함합니다.
여기 비네팅이 있습니다 : http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
웹 세미나도 있습니다 : https://www.youtube.com/watch?v=BU2gjoLPfDc
Liblinear는 좋지만 glmnet을 시작하는 것이 더 쉽다는 것을 알았습니다. Glmnet에는 교차 유효성 검사를 수행하고 AUC와 같은 다양한 메트릭을 기반으로 정규화 매개 변수를 선택하는 기능이 포함되어 있습니다.
이론과 관련하여 나는 올가미 (L1 정규화)와 통계 학습 요소의 장에 관한 tibshiarini 논문을 읽을 것입니다. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf
로그 손실에 대해서는 단지 모델을 평가하는 것입니다. 모델 피팅의 손실 기능이 아닙니다.