2. 파이톤이 접미사된 다변수 해석 6-3.회귀 능선·라소 회귀(scikit-learn)[정규화 효과]

  • 능선 회귀·라소 회귀 각자의 정규화 효과에 대해 자세히 보고 싶습니다.
  • 정규화 매개 변수 $λ$50가지 다른 회귀 모델 생성λ$라고 재차 추정했다.
  • 이 과정에서 우리는 모든 변수가 추정하는 계수가 어떻게 변화하는지 관찰한다.
  • (1) 라이브러리 가져오기

    # データ加工・計算・分析ライブラリ
    import numpy as np
    import pandas as pd
    
    # グラフ描画ライブラリ
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    # 機械学習ライブラリ
    import sklearn
    from sklearn.linear_model import Ridge, Lasso # 回帰モデル生成のためのクラス
    
    # matplotlibを日本語表示に対応させるモジュール
    !pip install japanize-matplotlib
    import japanize_matplotlib
    

    (2) 데이터 획득 및 읽기

    # データを取得
    url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/ridge_lasso_50variables.csv'
    
    # 取得したデータをDataFrameオブジェクトとして読み込み
    df = pd.read_csv(url)
    
    print(df)
    
  • 이 위조 데이터 열의 0번째는 목표 변수 y이고 열의 첫 번째 이후의 설명 변수는 모두 50개이다.표본 수는 150이다.
  • 표준화되었고 각 변수는 평균 0, 표준 편차 1이다.
  • 또한 목적 변수 y는 의도적으로 만든 것이다.첫 번째 변수 x1의 정확한 계수를 '5' 로 설정한 다음 정적 분포에 따라 소음을 계산해 낸다.정답'5'를 추정할 수 있을지도 관심사다.
  • # 「y」列を削除して説明変数xを作成
    x = df.drop('y', axis=1)
    
    # 「y」列を抽出して目的変数yを作成
    y = df['y']
    

    (3) 정규화 매개 변수λ낳다

    # λ(alpha)を50通り生成
    num_alphas = 50
    alphas = np.logspace(-2, 0.7, num_alphas)
    
    print(alphas)
    
  • numpy.logspace()는 비뚤어진 함수로 밑부분이 10인 대수, 즉 등차수열을 취한다.
  • 매개 변수에 지정(開始値, 終了値, 生成する数)된 실제 대수는 다음과 같다.
  • np.log10(alphas)
    
  • 시작값-2, 끝값0.7, 총 50개의 등차수열.
  • 등차수열numpy.arange()도 가능하지만 앞으로 가시화할 때 대수각도를 사용해야 하기 때문에 이렇게 합니다.
  • 대수 눈금

  • 대수 눈금은 눈금치에 따라 배로 증가한다.x축이나 y축의 임의의 하나 또는 두 축을 사용하는 것을 대수 도표라고 한다.
  • 일반 눈금을 선형 눈금이라고 하는데 대수 눈금으로 전환하면...
  • 수직선에서 축의 각도를 단단히 압축하는 느낌이 들기 때문에 비트 차이가 큰 데이터 등을 직관적으로 비교할 수 있다.

  • 4. 척추 회귀 추정

    # 回帰係数を格納する変数
    ridge_coefs = []
    
    # alphaを入れ替えながらリッジ回帰の推定をくりかえす
    for a in alphas:
        ridge = Ridge(alpha = a, fit_intercept = False)
        ridge.fit(x, y)
        ridge_coefs.append(ridge.coef_)
    
  • 교환alpha하면서 회귀척추의 추측을 반복해 회귀계수를 ridge_coefs에 추가했다.
  • 생성모델모형Ridge()의 매개 변수fit_intercept = False는 슬라이드를 계산할지 여부를 지정하고False는 슬라이드를 계산하지 않는다. 즉, 슬라이드 0은 원점을 통과해야 한다.
  • # 集積された回帰係数をnumpyのarrayに変換
    ridge_coefs = np.array(ridge_coefs)
    
    print("配列の形状:", ridge_coefs.shape)
    print(ridge_coefs)
    
  • 50×50개의 수조 중, 매개 매개 변수는 50개의 계수의 집합이 있다.
  • 를 시각화합니다.x축에 파라미터를 설정하고 alphas 대수를 변환한 후 음수를 더한 log_alphas를 사용한다.
  • 그래프에 텍스트plt.text() 함수를 표시하기 위해 인자(x, y, "str")로 좌표와 문자열을 지정합니다.
  • # alphasを対数変換(-log10)
    log_alphas = -np.log10(alphas)
    
    # グラフ領域のサイズ指定
    plt.figure(figsize = (8,6))
    
    # x軸にλ、y軸に係数を置いた折れ線グラフ
    plt.plot(log_alphas, ridge_coefs)
    
    # 説明変数x_1を表示
    plt.text(max(log_alphas) + 0.1, np.array(ridge_coefs)[0,0], "x_1", fontsize=13)
    
    # x軸の範囲を指定
    plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
    
    # 軸ラベル
    plt.xlabel("正則化パラメータλ(-log10)", fontsize=13)
    plt.ylabel("回帰係数", fontsize=13)
    
    # 目盛線
    plt.grid()
    
  • x축은 ${10}달러 때문에 왼쪽으로 갈수록 정규화된 매개 변수 $$$λ$의 가치가 크면 처벌의 강도도 강해진다.
  • 설명 변수 x1에 따라 목적 변수 y를 생성하기 때문에 변수 x1만 독자적인 선형을 나타낸다.
  • 왼쪽으로 갈수록 계수의 절대치가 작고 오른쪽으로 갈수록 처벌의 속박이 느슨해져 절대치가 큰 계수를 추정하기 쉬운 경향을 엿볼 수 있다.
  • 라소 컴백 예상

  • 척추 회귀와 같은 정규화 파라미터(alphas)를 사용하여 50번의 로프 회귀 추측을 반복한다.
  • # 回帰係数を格納する変数
    lasso_coefs = []
    
    # alphaを入れ替えながらラッソ回帰の推定をくりかえす
    for a in alphas:
        lasso = Lasso(alpha = a, fit_intercept = False)
        lasso.fit(x, y)
        lasso_coefs.append(lasso.coef_)
    
    # 集積された回帰係数をnumpyのarrayに変換
    lasso_coefs = np.array(lasso_coefs)
    
    print("配列の形状:", lasso_coefs.shape)
    print(lasso_coefs)
    
  • 같은 x축은 $-log{10} 달러의 단일 대수 도표를 그립니다.
  • # グラフ領域のサイズ指定
    plt.figure(figsize = (8,6))
    
    # x軸にλ、y軸に係数を置いた折れ線グラフ
    plt.plot(log_alphas, lasso_coefs)
    
    # 説明変数x_1を表示
    plt.text(max(log_alphas) + 0.1, np.array(lasso_coefs)[0,0], "x_1", fontsize=13)
    
    # x軸の範囲を指定
    plt.xlim([min(log_alphas) - 0.1, max(log_alphas) + 0.3])
    
    # 軸ラベル
    plt.xlabel("正則化パラメータλ(-log10)", fontsize=13)
    plt.ylabel("回帰係数", fontsize=13)
    
    # 目盛線
    plt.grid()
    
  • 변수 x1을 제외하고는 계수가 거의 0이다.
  • 이외의 변수 중 가장 오른쪽 파라미터의 강도가 느슨할 때 0이 아닌 계수는 약간 보인다.
  • 총결산

  • 척추 회귀는 몇 개의 변수에 대해 전체 절대치가 작은 계수를 평가하는 경향이 있다.
  • 라소 회귀는 국부 소수 변수가 비0계수이고 나머지 계수는 모두 0이다.
  • 라소 회귀 중 계수의 대부분이 0이기 때문에 회귀 계수를 구하는 동시에 차원 삭감을 하는 것과 같다고 할 수 있다.
  • 좋은 웹페이지 즐겨찾기