読者の本日は、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に関連するこのような記事のために、私たちと一緒にご期待ください。