Pythonによるラッソ回帰(Lasso回帰)の実装を分かりやすく解説する

スポンサーリンク

読者の前回は、Pythonプログラミングにおけるリッジ回帰について詳しく説明しました。

今回は、PythonのLasso回帰についてです。

それでは、始めましょう。

スポンサーリンク

まず、Lasso Regression とは何でしょうか?

データサイエンスや機械学習の領域では、データ値の種類に応じた様々なアルゴリズムによって現実の問題を予測することを主な目標としています。

線形回帰はそのようなアルゴリズムの1つです。

このアルゴリズムでは、モデルに最適な直線を定義し、データセットの変数間の相関を理解することができます

これは、従属変数とデータセットの独立変数の間の関係を把握し、予測のための推定モデルを構築するのに役立ちます。

線形回帰の問題点

  • 私たちが知っているように、線形回帰は、モデルのすべての変数の係数を計算します。データの複雑さが増すと、係数の値は、順番にモデルがそれに供給されるさらなる入力に敏感になり、より高い値であることが判明した。
  • これは、今度はモデルを少し不安定にさせます!

解決策 – ラッソ回帰

では、解決策を紹介しましょう。

Lasso 回帰、別名「L1 回帰」は、この目的を十分に満たします。

Lasso回帰では、係数の値に対してモデルにペナルティを課す傾向があります。

つまり、係数の値が大きいモデルの変数に余分なコストを含めることで、損失関数を操作するのです。

絶対的な係数の値に対してモデルにペナルティを課す。

これによって、(予測変数に寄与しない)係数の値をゼロにします。

さらに、それらの入力特徴をモデルから削除します。

従って、次のように言える。

Lasso = loss + (lambda * l1_penalty)

ここで、lambdaはペナルティ値の重み付けをチェックするハイパーパラメータです。

ラッソ回帰 – 実践的アプローチ

この例では、Bike Rental Count Prediction データセットを使用しました。

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

さらに、train_test_split()関数を用いて、データセットをtrainとtestの2つに分割しています。

今回の例では、ラッソ回帰ペナルティモデルを評価するためのエラーメトリックとしてMAPEを設定しました。

Pythonの sklearn.linear_model library は、データセットに対してモデルを構築するための lasso() 関数を提供しています。

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

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']
 
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 Lasso
lasso_model = Lasso(alpha=1.0)
lasso=lasso_model.fit(X_train , Y_train)
lasso_predict = lasso.predict(X_test)
Lasso_MAPE = MAPE(Y_test,lasso_predict)
print("MAPE value: ",Lasso_MAPE)
Accuracy = 100 - Lasso_MAPE
print('Accuracy of Lasso Regression: {:0.2f}%.'.format(Accuracy))

結果は以下の通りです。

MAPE value:  16.55305612241603
Accuracy of Lasso Regression: 83.45%.

まとめ

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

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

また、他のデータセットでラッソ回帰を試してみて、その結果をコメント欄で教えてください。

Pythonに関連するこのような記事のために、ご期待ください、そして、それまでは、幸せな学習!!。

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