릿지(Ridge), 라쏘(Lasso) 회귀를 위한 사이킷런 라이브러리/함수
- from sklearn.linear_model import Ridge : 사이킷런에 저장된 릿지회귀를 불러옵니다.
- Ridge(alpha) : 릿지 회귀를 정의합니다.
- alpha : 기본값은 1입니다.
- alpha값이 클수록 더 강한 정규화를 적용합니다.
- from sklearn.linear_model import Lasso : 사이킷런에 저장된 라쏘회귀를 불러옵니다.
- Lasso(alpha) : 라쏘 회귀를 정의합니다.
- alpha: 기본값은 1입니다.
- alpha값이 클수록 더 강한 정규화를 적용합니다.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
def load_data():
X, y = load_boston(return_X_y = True)
feature_names = load_boston().feature_names
return X,y,feature_names
def Ridge_regression(X, y):
# alpha : 정규화를 적용할 정도, 클수록 더 강한 정규화 적용
# 중요하지 않은 베타는 0에 가까워짐
ridge_reg = Ridge(alpha = 10)
ridge_reg.fit(X, y)
return ridge_reg
def Lasso_regression(X, y):
# alpha 값이 너무 크면 중요한 값을 잃을 수 있음
lasso_reg = Lasso(alpha = 10)
lasso_reg.fit(X, y)
return lasso_reg
# 각 변수의 beta_i 크기를 시각화하는 함수입니다.
def plot_graph(coef, title):
fig = plt.figure()
plt.ylim(-1,1)
plt.title(title)
coef.plot(kind='bar')
plt.savefig("result.png")
elice_utils.send_image("result.png")
def main():
X,y,feature_names = load_data()
ridge_reg = Ridge_regression(X, y)
lasso_reg = Lasso_regression(X, y)
# Ridge 회귀의 beta_i의 크기를 저장합니다.
ridge_coef = pd.Series(ridge_reg.coef_, feature_names).sort_values()
print("Ridge 회귀의 beta_i\n", ridge_coef)
# Lasso 회귀의 beta_i의 크기를 저장합니다.
lasso_coef = pd.Series(lasso_reg.coef_, feature_names).sort_values()
print("Lasso 회귀의 beta_i\n", lasso_coef)
plot_graph(ridge_coef, 'Ridge')
plot_graph(lasso_coef, 'Lasso')
if __name__=="__main__":
main()
엘라스틱넷 회귀를 위한 사이킷런 라이브러리/함수
- from sklearn.linear_model import ElasticNet : 엘라스틱넷 회귀를 불러옵니다.
- ElasticNet(alpha, l1_ratio)
- alpha: 기본값은 1입니다.
- alpha값이 클수록 더 강한 정규화를 적용합니다.
- l1_ratio: L1 정규화를 반영할 비율
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
def load_data():
X, y = load_boston(return_X_y = True)
feature_names = load_boston().feature_names
return X,y,feature_names
def ElasticNet_regression(train_X, train_y):
ElasticNet_reg = ElasticNet(alpha = 0.001, l1_ratio = 0.002)
ElasticNet_reg.fit(train_X, train_y)
return ElasticNet_reg
# 각 변수의 beta_i 크기를 시각화하는 함수입니다.
def plot_graph(coef):
coef.plot(kind='bar')
plt.savefig("result.png")
elice_utils.send_image("result.png")
def main():
X,y,feature_names = load_data()
train_X, test_X, train_y, test_y = train_test_split(X,y,test_size=0.2, random_state=100)
elasticnet_reg = ElasticNet_regression(train_X, train_y)
# 엘라스틱넷 회귀 모델 평가 점수 출력하기
score = elasticnet_reg.score(test_X,test_y)
print("ElasticNet 회귀의 평가 점수:", score)
# 엘라스틱넷 회귀의 beta_i의 크기를 저장하기
ElasticNet_coef = pd.Series(elasticnet_reg.coef_, feature_names).sort_values()
print("\nElasticNet 회귀의 beta_i\n", ElasticNet_coef)
plot_graph(ElasticNet_coef)
return elasticnet_reg
if __name__=="__main__":
main()
출처: 앨리스 교육
반응형