머신러닝 모델 중 하나로,
데이터로 학습을 해서 타깃을 예측할 때 bias를 높이고 variance는 줄이는 역할을 한다.
Ridge Regression을 사용하면
- Train데이터를 학습한 결과, 타깃을 좀 덜 맞추더라도 학습 과정에서의 과적합을 줄인다.
- select k best 역할도 해준다. (가장 영향을 많이 미치는 feature를 골라 보여준다)
- 어떤 feature가 target에 영향을 많이 주는지 알 수 있음(계수인 coef_가 큰 feature들이다.)
과적합을 줄이는 간단한 방법 중 한 가지는 모델의 복잡도를 줄이는 방법이다.
특성의 갯수를 줄이거나 모델을 단순한 모양으로 만들면, 일반화가 더 잘되는 모델이 된다.
RidgeCV (Cross-Validation) Ridge에 교차검증 알고리즘 적용
→ 데이터를 겹치지 않게 k개의 집단으로 나눠, 가장 에러가 작은 alpha(람다)와 best score를 보여준다.
교차 검증을 하는 횟수인 k는 직접 지정할 수 있지만, 통상적으로 5, 10으로 많이 사용합니다.
- k가 작을수록 bias는 커지고, k가 커진다면 variance가 커진다.
- k가 크다면 시간도 많이 걸린다.
Ridge + 다항함수 + pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
def RidgeRegression(degree=3, **kwargs):
return make_pipeline(PolynomialFeatures(degree),
Ridge(**kwargs))
for alpha in [0.001, 0.01, 0.0025, 0.05, 0.09, 0.12, 0.4, 1.0, 1, 5, 10, 100]:
print(f'Ridge Regression, alpha={alpha}')
# Ridge 모델 학습
model = RidgeRegression(alpha=alpha, normalize=True)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
len(coefs_) # 계수의 숫자. feature가 늘어난 양을 확인할 수 있다.
PolynomialFeatures(다항함수)에 Ridge 회귀를 사용하면 정규화 효과를 더 잘 확인할 수 있다.
다항함수를 사용하면, 변수들의 차수가 늘어나 데이터셋의 feature들이 엄청 늘어나고, 데이터에 과적합을 일으킨다.
Ridge 모델을 사용하면 feature 중 영향력이 높은 feature만 남길 수 있다.
Ridge 모델에 다항함수, make pipeline을 같이 사용하는 건 Ridge 함수의 역할을 보기 위해 과적합을 일부러 심하게 일으키는 것으로, 굳이 다항함수를 사용할 필요는 없다.
coef_의 길이를 확인해보면, 다항함수를 사용한 결과 feature의 개수가 엄청 늘어났음을 볼 수 있다.
회귀계수를 크기별로 정렬한 뒤 그래프로 뽑아보면 다음과 같은 형태다.
y값을 기준으로 음수 값을 가지는 것은 회귀계수가 음수이고,
양수 값을 가지는 것은 중요한 특성이라는 의미이다.
대부분의 feature의 y값이 0이라는 것은 feature selection을 통해 유의미한 특성만 남았다는 것이다.
Ridge Regression에서 람다(알파)의 값을 올리면, feature 중 계수의 크기가 작은 feature는 더 작아지고,
계수의 크기가 큰 feature은 스케일은 작아질지라도, 람다 값을 올릴 때마다 중요성은 더 커진다.
Ridge Regression에서 람다(알파)값을 올린다는 건 결국, 회귀 계수의 스케일을 조정하고
중요한 feature 만 남기는 역할을 한다.
어느 정도 feature selection 역할을 하는 셈이다.
특성들끼리 target 외의 다른 feature에도 영향을 주는 것을 다중 공산성 문제라고 한다.
선형 회귀에서는 특성들이 서로 영향을 안 준다는 것을 가정으로 하는 모델이지만, 실제 데이터는 그렇지 않다.
feature 끼리 서로 복잡하게 영향을 미친다. 이때 발생하는 것이 다중 공산성 문제다.
→ 특성을 많이 쓸수록 다중공산성 문제가 생긴다. 특성들끼리 어떤 영향을 주는지 알 수가 없기 때문이다.
→ 그렇다면 중요한 특성만 뽑아서 다중공산성 문제를 해결할 수 있다.
- 특성들끼리의 상관관계와 조합을 다 계산해볼 수 있겠지만... 경우의 수가 많기 때문에
- 영향을 주는 특성들을 일일이 뺄 수가 없다.
→ RidgeRegression으로 다중공산성 문제를 해결할 수 있다.
최종 모델 = Train + Validation + Test
모델의 학습을 위해서 데이터를 가지고 훈련, 검증, 테스트 셋으로 나눈다.
이 과정에서 검증, 테스트 셋은 훈련에 사용이 되지 않는다.
그래서 서비스하기 전, 더 좋은 정확성을 제공할 수 있는 모델을 위해
모델 튜닝이 끝난 다음에 검증, 테스트 데이터 셋도 훈련 데이터와 합쳐 같이 학습시킨다.
Ridge CV - Cross Validation을 사용하는 장점
데이터셋을 train, validation, test 셋으로 나누면 validation set을 학습에 쓸 수 없다.
CV를 사용하면, 나눠둔 Validation set도 학습에 사용할 수 있다.
'머신러닝, 딥러닝' 카테고리의 다른 글
Decision Tree 모델에서의 feature_importances_의 의미 (0) | 2021.02.07 |
---|---|
랜덤포레스트 모델의 결측값 대체 방법 (0) | 2021.02.05 |
교차검증(Cross Validation) (0) | 2021.02.01 |
일반화(Generalize)란? (0) | 2021.02.01 |
선형회귀에서 2차원 array를 사용하는 이유 (0) | 2021.01.30 |