Pythonによるリッジ回帰の実装方法を解説していく

スポンサーリンク

読者の本日は、Regressionの概念の中で重要な点であるRidge Regression in Pythonに焦点を当て、詳しく説明したいと思います。

では、さっそく始めましょう

スポンサーリンク

リッジ回帰を理解する

線形回帰は、最適な直線を推定し、対象となる数値変数の値を予測することは周知のとおりです。

つまり、データセットの独立変数と従属変数の間の関係を予測するのです。

予測中に定義された手法により、モデルの係数を見つけます。

線形回帰の問題は、モデル変数の計算された係数が大きな値になることがあり、その結果、モデルが入力に対して敏感になることです。

したがって、これはモデルを非常に不安定にします。

これは、リッジ回帰が絵になるときです。

リッジ回帰は、「L2回帰」とも呼ばれ、既存のモデルにペナルティを追加します。

これは、損失関数にペナルティを加えることで、モデルの係数の値を小さくします。

つまり、モデル自体にあまり寄与しない変数の係数を小さくするのです。

二乗誤差の和(SSE)に基づいてモデルにペナルティを課します。

ペナルティをかけるといっても、係数の値を0に近づけることで、モデルから排除されることを防いでいるのです。

また、L2ペナルティにはラムダというハイパーパラメータが含まれ、ペナルティ値の重み付けをチェックすることができます

簡単に言うと、リッジ回帰は次のように構成されます。

Ridge = loss + (lambda * l2_penalty)

では、実際に実装してみましょう。

Python によるリッジ回帰 – 実践的アプローチ

この例では、Bike Rental Count データセットで作業します。

まず、read_csv()`関数を用いてデータセットをPython環境にロードします。

さらに、train_test∕split()関数を用いて、データを分割します。

次に、モデルのエラーメトリクスを定義します。

ここでは、エラーメトリクスとしてMAPEを使用しました。

最後に、Ridge()`関数を用いて、モデルにリッジ回帰を適用します。

例えば、以下の様になります。

import os
import pandas
 
#Changing the current working directory
os.chdir("D:/Ediwsor_Project - Bike_Rental_Count")
BIKE = pandas.read_csv("day.csv")
 
bike = BIKE.copy()
categorical_col_updated = ['season','yr','mnth','weathersit','holiday']
bike = pandas.get_dummies(bike, columns = categorical_col_updated)
#Separating the depenedent and independent data variables into two dataframes.
from sklearn.model_selection import train_test_split
X = bike.drop(['cnt'],axis=1)
Y = bike['cnt']
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.20, random_state=0)
 
import numpy as np
def MAPE(Y_actual,Y_Predicted):
    mape = np.mean(np.abs((Y_actual - Y_Predicted)/Y_actual))*100
    return mape
 
from sklearn.linear_model import Ridge
ridge_model = Ridge(alpha=1.0)
ridge=ridge_model.fit(X_train , Y_train)
ridge_predict = ridge.predict(X_test)
Ridge_MAPE = MAPE(Y_test,ridge_predict)
print("MAPE value: ",Ridge_MAPE)
Accuracy = 100 - Ridge_MAPE
print('Accuracy of Ridge Regression: {:0.2f}%.'.format(Accuracy))

結果は以下の通りです。

Ridge (L2) ペナルティを用いて、83.3%の精度を得ることができました。

MAPE value:  16.62171367018922
Accuracy of Ridge Regression: 83.38%.

まとめ

ここまでで、このトピックは終了です。

何か疑問があれば、お気軽にコメントください。

Pythonに関連するこのような記事のために、私たちと一緒にご期待ください。

タイトルとURLをコピーしました