- 説明変数Xと目的変数yに対して、αを変えながら、Elastic Netで回帰分析して、決定係数と平均二乗誤差を求めてください。
- データは、トレーニングデータとテストデータに分けてください。
- αを
[0.5, 0.8, 1]
としたときに、決定係数のリストを変数r2_list
に、平均二乗誤差のリストを変数mse_list
に入れてください。
ElasticNet
のl1_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のときに、決定係数も平均二乗誤差も良いことがわかります。
コメント