もしお分かりになられる方がいらっしゃいましたら教えてください。
いま以下のようなコードを用いてElasticNet回帰を行っています。
ここでいま特徴量が23個あります。全てが「関係あるかもしれない?」と思われるものです。
ここで特徴量は重要なものからそうでないものに分け、その中で重要なものをいくつピックアップしたモデルにすると
当てはまりが良いか?というのを自動でできる方法を考えています。
また、本モデルでは従属変数が7個ありまして、それぞれに対する回帰をしていますので、
1.まずはそれぞれの変数yのそれぞれについて最も最適な組み合わせを戻り値として表示
2.上記の中でも最も平均二乗誤差が小さいものをベストモデルとして表示
という処理をしたいと思っています。
中々難しい処理かもしれませんが、こういう処理をできる方いらっしゃいませんでしょうか?
もしyが1つなら、何かしらこれを解決するパッケージがあるのでは?と考え少し検索したのですが、見つからずでした。
Python
1#ElasticNet回帰を。 2%matplotlib inline 3import matplotlib.pyplot as plt 4import numpy as np 5import pandas as pd 6from sklearn.linear_model import LinearRegression 7from sklearn.preprocessing import StandardScaler 8from sklearn.model_selection import train_test_split 9from sklearn.metrics import mean_squared_error 10from sklearn.preprocessing import PolynomialFeatures 11from sklearn.linear_model import Ridge 12from sklearn.linear_model import Lasso 13from sklearn.linear_model import ElasticNet 14from sklearn.linear_model import SGDRegressor 15 16data=pd.read_excel('元データ.xlsx') 17data=data.drop([0,1]).reset_index(drop=True) 18data['date']=pd.to_datetime(data['date'],format='%Y年%m月') 19data['POSIX']=data['date'].astype('int64').values//10**9 20data['year']=data['date'].dt.year 21data['month']=data['date'].dt.month 22 23#【注意】このコードでは従属変数を7個用意してそれぞれに対する回帰を行い平均二乗誤差を計算しています。 24#また、以下では一部行列の加工をしていますが、元データを整形しているだけです。特徴量は以下のとおり23個あります。 25 26x=data.iloc[0:38:1,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,32]] 27y0=data.iloc[:38,[23]] #0-43 28y1=data.iloc[:38,[24]]#0-42 29y2=data.iloc[:38,[25]]#0-41 30y3=data.iloc[:38,[26]]#0-40 31y4=data.iloc[:38,[27]]#0-39 32y5=data.iloc[:38,[28]]#0-38 33y6=data.iloc[:38,[29]]#0-37 34 35for y in [y0, y1, y2, y3, y4, y5, y6]: 36 37 x_pos=data['POSIX'].values 38 N=len(x) 39 N_train=round(len(x)*0.8) 40 N_test=N-N_train 41 42 x_pos_train,x_pos_test=x_pos[:N_train],x_pos[N_train:] 43 x_train,y_train=x[:N_train],y[:N_train] 44 x_test,y_test=x[N_train:],y[N_train:] 45 46 POLY=PolynomialFeatures(degree=2,include_bias=False) 47 x_train_pol=POLY.fit_transform(x_train) 48 x_test_pol=POLY.transform(x_test) 49 50 sc=StandardScaler()#特徴料の標準化を行う 51 x_train_std=sc.fit_transform(x_train_pol) 52 x_test_std=sc.transform(x_test_pol) 53 54 model4=ElasticNet(alpha=0.1,l1_ratio=0.6) 55 model4.fit(x_train_std,y_train) 56 y_train_pred4=model4.predict(x_train_std) 57 y_test_pred4=model4.predict(x_test_std) 58 59 print(mean_squared_error(y_train,y_train_pred4)) 60 print(mean_squared_error(y_test,y_test_pred4)) 61
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。