AI/MachineLearning

과적합 방지 기법 - 정규화

2021. 6. 4. 10:07
목차
  1. 릿지(Ridge), 라쏘(Lasso) 회귀를 위한 사이킷런 라이브러리/함수
  2. 엘라스틱넷 회귀를 위한 사이킷런 라이브러리/함수

릿지(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()

출처: 앨리스 교육

반응형
저작자표시 (새창열림)
  1. 릿지(Ridge), 라쏘(Lasso) 회귀를 위한 사이킷런 라이브러리/함수
  2. 엘라스틱넷 회귀를 위한 사이킷런 라이브러리/함수
'AI/MachineLearning' 카테고리의 다른 글
  • 분류 개념과 로지스틱 회귀
  • 회귀 알고리즘 평가 지표
  • 과적합 방지 기법 - 교차 검증
  • 다항 회귀 모델 구현
향식이
향식이
성장을 무기로, 성실함을 필살기로 가지고 있습니다.
향식이
향식이의 군침 싹 도는 개발일기
향식이
전체
오늘
어제
  • 분류 전체보기
    • Language
      • Python
      • Java
    • Database
      • Mysql
    • Infra
      • Docker
      • Airflow
    • Develop
      • DevCourseTIL
      • TroubleShooting
      • ComputerScience
      • Tech-review
    • Framework
      • Django
    • AI
      • MachineLearning
    • Medical
      • Term
    • Daily
      • TMI
      • Book
    • ETC
      • JupyterLab

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 중요한 건..
  • https://github.com/hyangsso
  • It's no fun if it's easy, BINGO ⋯

인기 글

태그

  • MySQL
  • groupby
  • Pandas
  • 파이프라인
  • Review
  • 파이썬
  • 가중치
  • airflow
  • 과적합
  • 인공지능
  • 정규화
  • 데이터
  • 기술
  • 오류
  • Python
  • Kafka
  • 해결
  • Docker
  • 판다스
  • 코드
  • 예제
  • tech
  • 퍼셉트론
  • 머신러닝
  • error
  • tensorflow
  • 견고한
  • Compose
  • 텐서플로
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
향식이
과적합 방지 기법 - 정규화
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.