본문 바로가기

Programming/Tip&Informaion

[scikit-learn] 사이킷런의 regression

사이킷런을 사용은 해봤지만 공식 사이트는 잘 가보지 못 했는데, 강의를 통해서 들렀는데 제 생각보다 엄청 잘 되어 있어서 놀랐습니다. 그래서 사이킷런 사이트만으로 얼마나 정보를 얻을 수 있는 지 알아보겠습니다.

 

우선 사이킷런 사이트에선 estimator를 고르는 맵을 제공해줍니다. (저 같은 초보자에겐 정말 좋은 자료 같네요.)

scikit-learn.org/stable/tutorial/machine_learning_map/index.html

 

scikit-learn.org/stable/tutorial/machine_learning_map/index.html

 

START에서 시작해보겠습니다.

우선, 저는 numerical 변수를 regression으로 예측할 것입니다.

 

1. sample 데이터가 50보다 큰가?

    No면 데이터를 더 모으라고 하네요.

    Yes로 가겠습니다.

2. 예측할 변수가 category 형태인가?

    No로 가겠습니다.

3. Quantity(양)을 예측하는가?

    Yes로 가겠습니다.

 

Regression 영역에 진입했네요.

이제부터는 모델을 추천해줍니다.

A. Sample이 100K보다 크면 -> SGD Regressor

B. 몇몇의 feature가 중요하면 안 되면 -> LassoElasticNet

C. 몇몇의 feature가 중요해도 된다면 -> Ridge RegressionSVR(kernel="linear")

D. C가 작동하지 않는 다면 -> SVR(kernel="rbf")EnsembleRegressors

 

Regression의 경우 총 7가지를 추천해주네요.

사이트의 이미지에서 해당 모델을 클릭하면 그 모델의 가이드 화면으로 이동합니다.

저는 API 상의 내용과 가이드의 내용을 간략히 알아보겠습니다.

 

1. SGD Regressor

SGD를 가지고 정규화된 경험적 손실을 최소화하는 방식으로 학습하는 선형 모델입니다.

SGD는 Stochastic Gradient Descent 의 약자이며, loss의 gradient를 평가하는 것을 의미한다.

정규화의 경우에는 0 벡터로 수렴하도록 loss function에 페널티를 부과하는데, 이 때 사용하는 것은 유클리안 L2 정규화의 제곱, L1 정규화의 절대값, 둘 다 사용 중에서 선택한다고 합니다.

 

더 SGD에 대한 자세한 내용은 가이드를 통해서 알 수 있습니다.

구현이 쉽고, 효율적이지만 feature scailing에 민감하고, hyper-parameter가 많은 게 단점이라고 하네요.

 

2. Lasso

L1 정규화를 우선적으로 훈련시키는 선형 모델입니다.

ElasticNet 에서 L1의 비율을 1.0 으로 둬서 L2가 없을 경우 같은 목적함수가 된다고 합니다.

 

Lasso도 가이드에서 자세한 정보를 얻을 수 있습니다.

coefficients가 spare한(0이 많은) 경우에 적합하다고 합니다. solution에 의존적인 feature 가 줄어들 수록 좋습니다.

따라서 Lasso의 경우 compressed sensing(압축 감지)에 필수적이라고 합니다.

 

3. ElasticNet

L1과 L2 정규화를 활용한 선형 모델입니다.

이 모델은 L1과 L2의 비율을 사용자가 정할 수 있습니다. 앞서 말했듯이 L1의 비율을 1.0으로 두면 Lasso와 동일해집니다.

 

가이드를 보면 Lasso처럼 spare한 모델에 맞게 학습하면서도, Ridge의 정규화 특징을 유지하고 있다고 합니다.

Elastic-net은 여러 feature 들이 서로 연관되어 있을 때 유용하다고 합니다. Lasso는 이런 feature 들 중에서 하나를 선택하는 경향이 있다면, Elastic-net은 양쪽 다 선택합니다. Lasso와 Ridge 사이의 트레이드 오프를 활용하여 실용적인 이점이 있습니다.

 

4. Ridge Regression

L2 정규화를 사용하는 선형적 최소 제곱법입니다. 이 모델의 loss function은 선형적 최소 제곱 함수와 정규화는 L2-norm에 의해 주어집니다. Tikhonov regularization라고 불리기도 합니다. 이 estimator는 다변량분포(multi-variate) regression을 지원합니다. (예를 들어, y가 2차원 모양)

 

가이드를 보면 coefficients의 크기에 페널티를 부과함으로써 Ordinary Least Squares의 몇몇 문제를 해결합니다.

 

5. SVR

API에는 별 설명이 없어서 가이드를 확인해보겠습니다.

SVR(Support Vector Regression)은 Support Vector Machine 에서 Regression 관련 함수입니다. 원래는 Support Vector Classification을 regression 문제를 해결하기 위해 확장한 것입니다.

Support Vector Classification에 의해 생성된 모델은 훈련 데이터셋의 subset에만 의존합니다. 왜냐하면 모델을 만들기 위해 비용함수가 경계를 넘는 부분을 고려하지 않기 때문입니다. 유사하게, Support Vector Regression에 의해 생성된 모델은 훈련 데이터셋의 subset에만 의존합니다. 비용함수가 타겟에 가까운 예측을 무시하기 때문입니다.

 

kernel function 부분을 선택할 수 있는데, 기본값은 rbf 입니다. linear은 말 그대로 선형적으로 에측하는 모델이고, rbf는 Radial Basis Function의 약자로 $$ e\exp(-\gamma \|x-x'\|^2) $$ 공식을 따릅니다.

 

6. EnsembleRegressors

EnsembleRegressors는 특별한 API나 함수가 아니고, Ensemble 하는 방식으로, 여러 가지 Regressor을 같이 사용하는 방식입니다. 가이드에는 Ensemble을 활용하는 여러가지 방식이 나와있습니다.