ABOUT ME

-

  • [n213] Ridge Regression
    AI 부트캠프 2021. 10. 20. 15:22

    One-hot Encoding

    피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼z럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방식. 

    - 순서가 없는 범주형 자료 : 명목형 (Nominal)
    - 순서가 있는 범주형 자료 : 순서형 (Ordinal)

     

    순서가 의미 없는 범주들은 one-hot 인코딩 하는 것이 좋다. 각 카테고리에 해당하는 변수들이 모두 차원에 더해지므로 카테고리가 너무 많은 경우 (high cardinality)에는 사용하기 적합하지 않다. 

    세 개의 컬럼이지만 2개가 정해지면 나머지 하나는 자동으로 결정되므로 (셋 중 하나의 값이 1이므로), 두개만 넣는다 -> 다중공산성 문제 방지. 

     

     

    Regularization 

    • 이상치를 조절.
    • weight를 조정하기 위해 규제를 한다.
    • 과적합을 제어하기 위해 사용 된다. 
    • L1: LASSO(라쏘)
    • L2: Lidge(릿지)

     

     

    Standardization

    • 값의 범위(scale)를 평균 0, 분산 1이 되도록 변환
    • 정규분포를 표준정규분포로 변환하는 것과 같음
    • scikit-learn에서 StandardScaler

     

     

    Normalization

    • 값의 범위(scale)를 0~1 사이의 값으로 바꾸는 것
    • 모델이 학습을 원활하게 할 수 있도록 모든 데이터를 균일한 정도의 중요도로 반영되도록 하는 방법이다.
    • scikit-learn에서 MinMaxScaler
    • scale이 큰 피처의 영향력을 제어
     

    [딥러닝] 정규화? 표준화? Normalization? Standardization? Regularization?

    딥러닝을 공부하다 보면 “정규화” 라는 용어를 참 자주 접하게 된다. 그런데 애석하게도 Normalization, Standardization, Regularization 이 세 용어가 모두 한국어로 정규화라고 번역된다. 이 세가지 용어

    realblack0.github.io

     

     

    SelectKBest를 사용하여 특성 선택

    가장 효과적인 특성을 k개 선택하기 위해 SelectKBest 사용한다.

    from sklearn.feature_selection import f_regression, SelectKBest
    
    ## selctor 정의합니다.
    selector = SelectKBest(score_func=f_regression, k=20)
    
    ## 학습데이터에 fit_transform 
    X_train_selected = selector.fit_transform(X_train, y_train)
    
    ## 테스트 데이터는 transform
    X_test_selected = selector.transform(X_test)
    
    
    X_train_selected.shape, X_test_selected.shape
    all_names = X_train.columns
    
    ## selector.get_support()
    selected_mask = selector.get_support()
    
    ## 선택된 특성들
    selected_names = all_names[selected_mask]
    
    print('Selected names: ', selected_names)

     

     

     

    Ridge Regression 모델 학습

    비용 함수는 학습 데이터의 잔차 오류 값을 최소로 하는 RSS 최소화 방법과 과적합을 방지하기 위해 회귀 계수 값이 커지지 않도록 하는 방법이 서로 균형을 이뤄야 한다. 

    "비용 함수 목표는 RSS + alpha*|w|2의 최소화 이다. 여기서 알파는 학습 데이터 적합 정도와 회귀 계수 값의 크기 제어를 수행하는 튜닝 파라미터이다. 비용 함수에 알파 값으로 패널티를 부여해 회귀 계수 값의 크기를 감소시켜 과적합을 개선하는 방식을 규제라 한다. 규제는 L1, L2 방식으로 나뉜다. 릿지 회귀는 W의 제곱에 대해 패널티를 부여하는 방식이다 (L2 규제).  알파 값을 증가시킬수록 회귀 계수 값은 작아진다. 릿지 회귀의 경우 회귀 계수를 0으로 만들지 않는다. " [파이썬의 머신러닝 완벽가이드]

     

    가장 좋은 점수가 나온 alpha 값 찾기

    from sklearn.linear_model import RidgeCV
    import matplotlib.pyplot as plt
    from sklearn.linear_model import Ridge
    import warnings 
    
    warnings.filterwarnings(action='ignore')
    
    alphas = [0, 0.001, 0.01, 0.1, 1]
    
    ridge = RidgeCV(alphas=alphas, normalize=True, cv=5)
    ridge.fit(X_train_selected, y_train)
    print("alpha: ", ridge.alpha_)
    print("best score: ", ridge.best_score_)

    alpha: 0.001
    best score: 0.5510507608242425

     

    [코드스테이츠 렉처 노트를 바탕으로 작성되었습니다. ]

    댓글