릿지, 라쏘, 일반화 회귀 등 다양한 회귀 분석 모델의 선택
내가 참고하려고 메모하는 글
1. 일반 선형 회귀:
실제 값 - 예측 값 간의 RSS(Residual Sum of Squares)를 최소화할 수 있도록 회귀 계수를 최적화. 규제 적용 X
2.릿지(Ridge):
일반 선형회귀에 L2 규제를 추가
L2규제란? 상대적으로 큰 회귀 계수의 예측 영향도를 감소시키기 위해 회귀 게수값을 더 작게 만드는 규제 모델
Ridge regression was among the first of the penalized regression methods proposed (Hoerl 1962; Hoerl and Kennard 1970). Ridge regression does not shrink coefficients to zero, so it does not perform variable selection.
3. 라쏘(Lasso):
예측 영향력이 작은 Feature의 회귀 계수를 아예 0으로 만들어 선택 변수에서 제외시켜버림.
올가미 툴이라는 이름 답게, 그림판이나 포토샵에서 올가미 쳐서 구역 나누고 선택 혹은 제외 시키는 그림을 생각하면 된다. L1 규제는 이 때문에 피처 선택 기능으로도 불린다.
The Lasso has two shortcomings. When several variables are highly correlated, it tends to select only one variable from that group. When the number of variables, p, exceeds the number of observations, n, the Lasso selects at most n predictors.
•The Double Lasso attempts to separate the selection and shrinkage steps by performing variable selection with an initial Lasso model. The variables selected in the initial model are then used as the input variables for a second Lasso model.
4. 엘라스틱넷(ElasticNet):
L2,L1규제를 함께 결합, 변수가 많은 데이터셋에서 주로 사용됨
L1 규제로 변수 개수를 줄이고, L2 규제로 계수 값의 크기를 조정함
The Elastic Net, on the other hand, tends to select all variables from a correlated group, fitting appropriate coefficients. It can also select more than n predictors when p > n.
5. 로지스틱 회귀(Logistic Regression)
원래는 분류 알고리즘으로 더욱 많이 사용됨.
이진 분류 외에도 희소 영역의 분류, 세밀하게 쪼개진 영역에서도 뛰어난 예측을 보임(텍스트 분류 등)
기본적으로 회귀 모델은 RSS = 손실함수 = Residual Sum of Square를 최소화하는 방향으로 이루어진다.
손실함수는 비용함수라고도 한다.
- 비용함수의 최소화 - 경사하강법
경사하강법: Gradient Descent
W파라미터(변수의 개수에 따른 회귀계수)가 많아질수록 단순 고차원 방정식으로 비용함수를 도출하기 어렵다.
경사하강법은 산 어느 방향이든 계속 내려가다보면 언젠가는 지상에 도착하는 것과 같다.
반복적으로 비용함수, 예측 값과 실제 값의 차이가 작아지는 방향성을 가지고 W파라미터를 지속 보정한다.
최초 오류값 100 -> 90 -> 80 ....
지속적으로 오류 감소시키는 방향으로 보정해나간다.
비용함수의 미분값이 작아지는 방향으로 순차적으로 W 업데이트
더 이상 미분값의 절대값이 작아지지 않으면 비용함수 최소로 간주하고 W반환
예를 들어, 위 그림에서 포물선 최저점에서 미분값이 0에 수렴할 것이다.
왼쪽에서 하강하든, 오른쪽에서 하강하든 (부호의 차이는 있겠으나) 절대값은 큰 방향 -> 작은 방향으로 수렴할 것이다.
RSS함수에서 각 w에 대해서 편미분하는데 편미분 값이 너무 커지는 것을 방지하기 위해 보정계수를 곱한다.
단순 선형 회귀의 경우 Y= w1*xi +w0 로 w0,w1 두 개의 계수값이 있을 것이다.
이를 학습률이라고 한다.
학습률이 너무 낮으면 최적점 도달까지 너무 오래 걸린다.
학습률이 너무 높으면 최적점에서 멀어져 발산하게 된다.
Python코드로 경사하강법을 구현할 경우, w0과 w1을 0으로 초기화한 후 반복적으로 시행하며 회귀계수를 업데이트한다.
이론적으로 경사하강법은 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률, 학습횟수 선택 시 수렴이 보장되어 있다. 하지만 비선형회귀 문제의 경우 convex하지 않을 수 있어 수렴이 보장되지 않는다. 이럴 경우엔 아래 확률적 경사하강법을 대체하여 시행
- 확률적 경사하강법(stochastic gradient descent)
모든 데이터를 사용해서 업데이트하는 경사하강법과 달리 데이터 한개 또는 일부 활용하여 업데이트 ( 미니배치 연산 )
볼록(convex)이 아니며 비선형 회귀 목적식은 SGD 통해 최적화 가능
경사하강법보다 머신러닝 학습에 더 효율적
경사하강법은 즉시 최저점으로 향한다면, SGD는 좀 롤러코스터마냥 왔다갔다 한다.
미니배치 연산으로 쪼개므로, 기존 경사하강법보다 컴퓨터 메모리 등의 하드웨어 연산자원을 효율적으로 사용할 수 있다.
(Out of memory 방지)