로지스틱 회귀 분석을위한 정규화 방법


42

Ridge, Lasso, ElasticNet과 같은 방법을 사용한 정규화는 선형 회귀에 매우 일반적입니다. 다음을 알고 싶었습니다.이 방법이 로지스틱 회귀에 적용 가능합니까? 그렇다면 로지스틱 회귀 분석에 사용해야하는 방식에 차이가 있습니까? 이러한 방법을 적용 할 수없는 경우 어떻게 로지스틱 회귀를 정규화합니까?


특정 데이터 세트를보고 있습니까? 따라서 데이터 계산, 예를 들어 데이터 선택, 스케일링 및 오프셋과 같이 초기 계산이 성공하기 쉬운 데이터를 다루기 쉽게 만들어야합니다. 아니면 방법과 이유에 대해 좀 더 일반적인 시각입니까 (0에 대해 계산할 특정 데이터 세트가 없습니까?
Philip Oakley

1
이것은 정규화 방법과 이유에 대한보다 일반적인 모습입니다. 특별히 언급 된 선형 회귀 예제를 살펴본 정규화 방법 (리지, 올가미, 엘라스틱 넷 등)에 대한 소개 텍스트입니다. 구체적으로 물류에 대해 언급 한 사람이 없으므로 질문입니다.
TAK

1
로지스틱 회귀는 비 식별 링크 기능을 사용하는 GLM 형식이며 거의 모든 것이 적용됩니다.
Firebug

1
Andrew Ng의 주제에 관한 비디오 를 우연히 만났 습니까?
Antoni Parellada

릿지, 올가미 및 탄력적 그물 회귀는 인기있는 옵션이지만 유일한 정규화 옵션은 아닙니다. 예를 들어, 평활 행렬은 큰 2 차 도함수로 함수에 불이익을 주므로 정규화 매개 변수를 사용하면 회귀 분석에 "다이얼 인"할 수 있으며 이는 데이터의 과적 합과 과적 합 간의 훌륭한 절충안입니다. 릿지 / 라소 / 탄성 순 회귀와 마찬가지로 이것도 로지스틱 회귀와 함께 사용할 수 있습니다.
복원 상태 Monica

답변:


49

예, 정규화는 회귀 및 분류를 포함한 모든 선형 방법에 사용할 수 있습니다. 나는 회귀와 분류 사이에 너무 많은 차이가 없다는 것을 보여주고 싶습니다 : 유일한 차이점은 손실 함수입니다.

특히, 선형 방법에는 손실 함수, 정규화, 알고리즘 의 세 가지 주요 구성 요소가 있습니다. 손실 함수와 정규화가 최적화 형식의 문제에서 목적 함수이고 알고리즘이이를 해결하는 방법 인 경우 (객관 함수는 볼록한 모양이므로이 게시물에서는 다루지 않습니다).

L(y^,y)=(y^y)2L(y^,y)=|y^y|L()yy^

L(y^,y)=log(1+exp(y^y))L(y^,y)=(1y^y)+y{1,1}y^y^

정규화 설정에서 L1 및 L2 정규화에 대해 언급했지만 다른 형식도 있으며이 게시물에서는 다루지 않습니다.

따라서 높은 수준에서 선형 방법은

minimizew   x,yL(wx,y)+λh(w)

손실 함수를 회귀 설정에서 로지스틱 손실로 바꾸면 로지스틱 회귀가 정규화됩니다.

예를 들어, 능선 회귀 분석에서 최적화 문제는

minimizew   x,y(wxy)2+λww

손실 함수를 로지스틱 손실로 바꾸면 문제가됩니다.

minimizew   x,ylog(1+exp(wxy))+λww

여기에 L2 정규화와 함께 로지스틱 회귀가 있습니다.


이것은 장난감 합성 이진 데이터 세트에서 어떻게 보이는지입니다. 왼쪽 그림은 선형 모델 (결정 경계)이있는 데이터입니다. 오른쪽 그림은 목적 함수 윤곽입니다 (x 및 y 축은 2 개의 매개 변수 값을 나타냅니다). 데이터 세트는 2 개의 가우시안에서 생성되었으며, 우리는 로지스틱 회귀 모델을 인터셉트없이 맞출 수 있으므로 오른쪽 하위 그림에서 시각화 할 수있는 매개 변수는 두 개뿐입니다.

파란색 선은 정규화가없는 로지스틱 회귀이고 검은 색 선은 L2 정규화가있는 로지스틱 회귀입니다. 오른쪽 그림의 파란색과 검은 색 점은 목적 함수에 대한 최적의 매개 변수입니다.

λ0

여기에 이미지 설명을 입력하십시오

다음은 L1 정규화를 사용한 다른 예입니다.

여기에 이미지 설명을 입력하십시오

이 실험의 목적은 로지스틱 회귀 분석에서 정규화가 어떻게 작동하는지 보여 주려고하지만 정규화 된 모형이 더 낫다는 주장은 아닙니다.


λλ0

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


wxyy^=f(x)=wx1

yy{1,1}

y^=wxy^yy^=wx{1,1}y^

y{0,1}

코드는 다른 답변에서 찾을 수 있습니다.

왜 로지스틱 회귀가 완벽한 분리 사례에서 작동하지 않는지에 대한 직관적 인 설명이 있습니까? 왜 정규화를 추가하면 문제가 해결됩니까?


4
wTxf(x)

@ hxd1011 답변에 감사드립니다. 윤곽선에서 검은 실선이 무엇을 나타내는 지 설명해 주시겠습니까? 더 정확하게 말하면, x와 y 축은 우리가 사용하는 2 개의 매개 변수를 보여줍니다. 그러나 8000, 10000, 12000과 같은 실선과 숫자는 어떻습니까. 감사합니다!
Jespar


12

l(β)=l(β)+12ln|i(β)|
i(β)=1nipi(1pi)xixi{(yi,xi)={(1,1),(0,0)}glmR

1
예, R 패키지 logistf 또는 brglm을 사용할 수 있습니다! 아마도 언급할만한 가치가 있습니다.
Tom Wenseleers

매우 우아하지만 최적화 속도가 느리지 않습니까? 그라디언트에서는 모든 반복에서 다시 계산해야하는 의 역수를 얻습니다 .i(β)
appletree

실제로 @appletree
StasK

(+1) 나는 Firth의 수정에 대해 들어 본 적이 없다. 인용 된 논문의 암시 적 접근 방식이 GLM 솔루션에 많은 시간을 추가 할 것으로 기대하지 않습니까? (행렬을 뒤집을 필요는 없으며, 레버리지 만 계산하면됩니다. 반복적으로 가중 된 최소 제곱을 통해 GLM을 풀면 Q 팩터행-노름입니다 . 레버는 사용하여 데이터와 노출에 추가됩니다. Jeffreys 조정 에서 대신 )1 / 2h/21/2
GeoMatt22

6

예, 로지스틱 회귀에 적용 할 수 있습니다. R에서 glmnet을 사용하면 로지스틱 회귀 분석에 "이항식"인 적절한 패밀리를 지정하기 만하면됩니다. 데이터와 해결하려는 문제에 따라 지정할 수있는 몇 가지 (독, 다항식 등)가 있습니다.


이를 위해 glmnet을 사용하는 것의 단점은 그 접근 방식이 의미 수준을 제공하지 않는다는 것입니다. 당신이 그에 관심이 있다면, R 패키지 logistf 또는 brglm가 더 나은 방법이 될 것입니다 ...
Tom Wenseleers

@TomWenseleers에는 plm 값을 얻기 위해 glmnet을 부트 스트랩하는 방법도 있습니다. 그러나, "일반"부트 스트랩으로 복잡 조금 올가미 계수가 작동하지 않습니다이다
성공을 비네

저를 주셔서 감사합니다 나는 다른 사람들이 여기에 예, 너무이 언급 본 적이 그것에 대해 알고 stats.stackexchange.com/questions/34859/...을 하지만, 일부 R 패키지에 구현 어떤 표준을 찾을 수 없습니다. 당신은 어떤 포인터가 있습니까? 아니면 이것에 대한 좋은 기본 문헌? 부트 스트랩의 단점은 또한 대규모 데이터 세트의 경우 일반적으로 매우 느리다는 것입니다.
Tom Wenseleers

R package hdi, cran.r-project.org/web/packages/hdi/index.html 에서 구현 된 것과 같은 방법을 언급하고 있습니까?
Tom Wenseleers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.