[TIL] Ridge Regression


実はRidgeRegressionは今日習ったのではありません水曜日に習いましたが、その日の整理を忘れてしまったので、残りの時間の今日に書きます.😅😅

Ridge Regression(ブリッジ回帰)


Ridge Regression(Ridge回帰)は、マルチ回帰モデルにおいてRamdaを用いて重み付けを行い、モデルの分散エラーを低減し、オフセットエラーを少し増やして一般化を導くのではなく、モデルの分散エラーを低減するモデルである.

上の図の赤い線が多重回帰モデルであれば、ブリッジ回帰は赤い線を重み付けし、赤い線を青い線にします.

One-Hot Encoding


残念ながらsklearningはカテゴリ変数を入力値として処理しません.したがって、One-Hot Encodeでカテゴリ変数を変更します.
1−ホットコーディングは、カテゴリ変数をTrue(1)およびFalse(0)に変換する技術である.1つのホットコーディングを使用すると、各カテゴリのすべての変数が次元に追加されます.したがって、カテゴリの変数が多すぎると、使用に適していません.そしてカテゴリのカテゴリ1.2.3をこのようにシーケンス符号化を行うと、カテゴリ値の間にサイズ関係が生じるので注意が必要です.
from category_encoders import OneHotEncoder

df = pd.DataFrame({'City': ['부산', '서울', '대구', '인천', '대구', '부산', '서울']})

encoder = OneHotEncoder(use_cat_names = True)
encoder_df = encoder.fit_transform(df)

# pd.get_dummies를 사용할 경우

dummies_df = pd.get_dummies(df, prefix = ['City'])

# sklearn.preprocessing.OneHotEncoder도 있지만 
# 이 모듈보다 category_encoders의 OneHotEncoder 모듈이 
# 사용하기 더 편리해서 category_encoders의 모듈을 사용하면 된다.
上記のコードを実行すると、次の結果が得られます.

また、現在の例では、最初の行を削除するのではなく、すべての行を直接出力しているが、最初の行には複数の共通計算の問題があるため、参照のために削除および使用する必要がある.
+)多重共産性とは?
独立変数間の強い相関は独立変数が独立しない現象をもたらす.
+)coapでfrom category encoders import OneHotEncoderを使用してホットコーディングを行うと、モジュールが見つからないというエラーが発生しました.
pip install --upgrade category_encoders
上のコードを実行しcategory codersをアップグレードすると、正常に動作します.

属性の選択


特性選択は,特性工学で課題に適した特性を生み出す過程である.すなわち、データの種類が多い場合には、重要な特徴データのみを選択し、特徴データの種類を減らす方法である.
良い特性を選択するためには,特性間の相関が小さいがターゲット特性との相関が大きい特性を選択すべきである.
これらの特性を選択するには、Sikittrunが提供するSelectKBestを使用して重要な特性を選択します.
from sklearn.feature_selection import chi2, SelectKBest

X, y = load_iris(return_X_y=True)
X.shape # (150, 4)

# target 데이터와 가장 관계된 특성 2개를 고른 뒤 학습 데이터에 fit_transform을 시켜줌
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
X_new.shape # (150, 2)

ブリッジ回帰モデルの作成


Ridge回帰は,上記の線形回帰モデルにおける重み付け値を用いて,複数の回帰線を訓練データにあまり適合させないモデルである.Ridge回帰はL 2 Regressionとも呼ばれる.
次はRidgeRegressionの方法です.ちなみに一言.λ\lambdaλAlpha,lambda,正規化パラメータ,罰則termはいずれも同義語であり,コードでは主にalphaという語が用いられるようである.その他λ\lambdaλの値が大きいほど、直線の傾きは0に近づきます.

sklearningは、内蔵のクロス検証アルゴリズムを使用するRidgeCVモジュールを提供します.もちろん、RidgeCVではなくRidgeモジュールも提供されています.
from sklearn.linear_model import RidgeCV

alphas = [0.001, 0.01, 0.1, 0, 1]

# alphas = 시도할 $\lambda$의 값의 배열. 넣은 값 중 최적의 값을 찾아서 해당 값으로 모델을 학습시킴. 
# cv (cross validation) = 교차 검증 분할 전략 결정
ridge = RidgeCV(alphas = alphas, cv = 3).fit(X_train_data, y_train_data)