정규화 선형회귀 ( Regularization Regression ) - ridge, lasso, elasticnet
1. Ridge Regression
1) 정의
- Ridge 회귀모형에서는 가중치들의 제곱합(squared sum of weights)을 최소화하는 것을 추가적인 제약 조건으로 한다.
- λ는 기존의 잔차 제곱합과 추가적 제약 조건의 비중을 조절하기 위한 하이퍼 모수(hyper parameter)이다. λ가 크면 정규화 정도가 커지고 가중치의 값들이 작아진다. λ가 작아지면 정규화 정도가 작아지며 λ 가 0이 되면 일반적인 선형 회귀모형이 된다.
2) python Example
from sklearn.datasets import load_boston
from sklearn.linear_model import Lasso,ElasticNet,Ridge
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import validation_curve
import numpy as np
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
boston = load_boston()
X = boston.data
y = boston.target
ridge = Ridge()
alphas = np.logspace(-4, 0, 200)
parameters = {'alpha': alphas }
ridge_reg = GridSearchCV(ridge, parameters, scoring='neg_mean_squared_error',cv=5)
ridge_reg.fit(X,y)
print(ridge_reg.best_params_)
print(ridge_reg.best_score_)
2. Lasso Regression
1) 정의
- Lasso(Least Absolute Shrinkage and Selection Operator) 회귀모형은 가중치의 절대값의 합을 최소화하는 것을 추가적인 제약 조건으로 한다.
2) python Example
## lasso
alphas = np.logspace(-4, 0, 200)
train_scores = []
test_scores = []
for alpha in alphas:
model = Lasso(alpha=alpha)
train_score = -mean_squared_error(y, model.fit(X, y).predict(X))
test_score = np.mean(cross_val_score(model, X, y, scoring="neg_mean_squared_error", cv=5))
train_scores.append(train_score)
test_scores.append(test_score)
optimal_alpha = alphas[np.argmax(test_scores)]
optimal_score = np.max(test_scores)
plt.plot(alphas, test_scores, "-", label="test ")
plt.plot(alphas, train_scores, "--", label="train")
plt.axhline(optimal_score, linestyle=':')
plt.axvline(optimal_alpha, linestyle=':')
plt.scatter(optimal_alpha, optimal_score)
plt.title("Best Regularization")
plt.ylabel('score')
plt.xlabel('Regularization')
plt.legend()
plt.show()
lasso = Lasso()
alphas = np.logspace(-4, 0, 200)
parameters = {'alpha': alphas }
lasso_reg = GridSearchCV(lasso, parameters, scoring='neg_mean_squared_error',cv=5)
lasso_reg.fit(X,y)
print(lasso_reg.best_params_)
print(lasso_reg.best_score_)
3. Elastic Net Regression
1) 정의
- Elastic Net 회귀모형은 가중치의 절대값의 합과 제곱합을 동시에 제약 조건으로 가지는 모형이다.
2) Python Example
elasticnet = ElasticNet()
alphas = np.logspace(-4, 0, 200)
parameters = {'alpha': alphas }
elasticnet_reg = GridSearchCV(elasticnet, parameters, scoring='neg_mean_squared_error',cv=5)
elasticnet_reg.fit(X,y)
print(elasticnet_reg.best_params_)
print(elasticnet_reg.best_score_)
참고 자료
https://datascienceschool.net/view-notebook/83d5e4fff7d64cb2aecfd7e42e1ece5e/
https://towardsdatascience.com/how-to-perform-lasso-and-ridge-regression-in-python-3b3b75541ad8
'Machine Learning' 카테고리의 다른 글
예측력이 좋은 XGBoost Regression 개념 및 python 예제 (0) | 2019.10.09 |
---|---|
서포트 벡터 머신 SVM ( Support Vector Machine)의 개념 및 python예제 (0) | 2019.10.09 |
Random Forest Regression ( 랜덤포래스트 회귀 ) 개념 및 python 예제 (0) | 2019.10.09 |
Logistic Regression (로지스틱 회귀) 개념 및 python 예제 (0) | 2019.10.09 |
Linear Regression ( 선형 회귀 ) 개념 및 python 예제 (0) | 2019.10.09 |