Elastic netを使った演習

  • 説明変数Xと目的変数yに対して、αを変えながら、Elastic Netで回帰分析して、決定係数と平均二乗誤差を求めてください。
  • データは、トレーニングデータとテストデータに分けてください。
  • αを[0.5, 0.8, 1]としたときに、決定係数のリストを変数r2_listに、平均二乗誤差のリストを変数mse_listに入れてください。
  • ElasticNetl1_ratioオプションは0.5にしてください。
  • random_stateオプションを指定できる場合、0にしてください。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet
from sklearn.metrics import r2_score, mean_squared_error

df = pd.read_csv("input/boston.csv")  # ボストン市の住宅価格データ一式
X, y = df.iloc[:, :-1], df.iloc[:, -1]
r2_list, mse_list = [], [] 数字を入れる空ボックス
X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=0)  # データの分割
for alpha in [0.5, 0.8, 1]:
    # ElasticNetモデルの作成 →αは指定しないでforを使って指定
    enet = ElasticNet(alpha, l1_ratio=0.5, random_state=0)
    # トレーニングデータで学習
    y_pred = enet.fit(X_train, y_train).predict(X_test)
    # 決定係数を、r2_listに追加
    r2_list.append(r2_score(y_test, y_pred))
    # 平均二乗誤差を、mse_listに追加
    mse_list.append(mean_squared_error(y_test, y_pred))
# 各αごとの、決定係数と平均二乗誤差を確認
r2_list, mse_list
([0.5819963763002163, 0.5683206116664227, 0.5603163143661134],
 [34.15048450580148, 35.26778101174466, 35.921724220453214])

このように書くときれいに入力することが出来る。

  • トレーニングデータとテストデータへ分割
  • 各αについて、以下繰り返し
    • ElasticNetモデルの作成
    • トレーニングデータで学習
    • 決定係数を、r2_listに追加
    • 平均二乗誤差を、mse_listに追加
  • 各αごとの、決定係数と平均二乗誤差を確認

αが0.5のときに、決定係数も平均二乗誤差も良いことがわかります。

コメント

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