前提・実現したいこと
以下の①~③を実現したいのですが、②、③が上手くいきません…。
自分で調べてもどうしてもわからなかったので、こちらに質問させて頂きました。
どなたかアドバイスを頂けますととても助かります。
①テストデータをfor文で少しずつずらしながら読み込み&テストを行い、それぞれの予測値を空リストに入れる
②リストをデータフレームに変換する
③データフレームの内容をcsvファイルに落とし込む
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-80-8f68d0ddf9c8> in <module>() ----> 1 pred_test_df = pd.DataFrame(y_pred) 2 print(pred_test_df) 2 frames /usr/local/lib/python3.6/dist-packages/pandas/core/internals/construction.py in prep_ndarray(values, copy) 293 values = values.reshape((values.shape[0], 1)) 294 elif values.ndim != 2: --> 295 raise ValueError("Must pass 2-d input") 296 297 return values ValueError: Must pass 2-d input
該当のソースコード
Python
1import pandas as pd 2import numpy as np 3# データの読み込み 4df = pd.read_csv("data.csv") 5print(df.head) 6#<bound method NDFrame.head of Day ... Province No.17 7#0 1 ... 0 8#1 2 ... 0 9 10#.. ... ... ... 11#99 100 ... 0 12#100 101 ... 0 13 14# データを特徴量と目的変数に分ける 15df_x = df.copy() 16df_y = df[['Province No.1','Province No.2','Province No.3','Province No.4','Province No.5','Province No.6','Province No.7','Province No.8','Province No.9','Province No.10','Province No.11','Province No.12','Province No.13','Province No.14','Province No.15','Province No.16','Province No.17']] 17print(df_x.head()) 18print(df_y.head()) 19# Day ... Province No.17 20#0 1 ... 0 21#1 2 ... 0 22#2 3 ... 0 23#3 4 ... 0 24#4 5 ... 0 25 26#[5 rows x 205 columns] 27# Province No.1 Province No.2 ... Province No.16 Province No.17 28#0 0 0 ... 0 0 29#1 0 0 ... 0 0 30#2 0 0 ... 0 0 31#3 0 0 ... 1 0 32#4 0 0 ... 0 0 33 34#[5 rows x 17 columns] 35 36import xgboost as xgb 37from sklearn.metrics import mean_squared_error 38from sklearn.externals import joblib 39from sklearn.multioutput import MultiOutputRegressor 40 41# xgboostモデルの作成 42reg = MultiOutputRegressor(xgb.XGBRegressor()) 43 44for n in range(5): 45 train_x = df_x[n:n+24] 46 train_y = df_y[n+24:n+48] 47 print('現在 train %1d の検証中です' %n) 48 49 reg = MultiOutputRegressor(xgb.XGBRegressor()) 50 reg.fit(train_x, train_y) 51 52# モデルを保存 53filename = 'model.sav' 54joblib.dump(reg, filename) 55 56# 学習モデルの評価 57train_x_pred = df_x[5:29]#Day6-29 58train_y_pred = df_y[29:53]#Day30-53 59pred_train = reg.predict(train_x_pred) 60 61print('RMSE for pred_train:', np.sqrt(mean_squared_error(train_y_pred, pred_train))) 62 63#テスト 64y_pred = [] 65y_true = [] 66 67for i in range(23): 68 test_x = df_x[i+29:i+53] 69 test_y = df_y[i+53:i+77] 70 print('現在 test %1d の検証中です' %i) 71 pred_test = reg.predict(test_x) 72 y_pred.append(pred_test) 73 y_true.append(test_y) 74 print('RMSE for pred_test:', np.sqrt(mean_squared_error(test_y, pred_test))) 75 76print(y_pred) 77#[array([[ 1.77417302e+00, 2.42700934e-01, 1.64597619e+00, 78 # 1.63864481e+00, 5.76995015e-01, 1.87968910e-02, 79 # -3.94308567e-03, 6.21627092e+00, 1.58334465e+01, 80 # 1.14232481e+00, 9.58841085e-01, 6.83230162e-03, 81 # 8.71272802e-01, -2.20537186e-04, 6.96563625e+00, 82 # 1.78707886e+01, -6.04650378e-02], 83 #[ 1.98073311e+01, -9.53328609e-03, 1.59746265e+00, 84 # ... 85 86#NumPy配列をDataFrameに変換 87pred_test_df = pd.DataFrame(y_pred) 88print(pred_test_df) 89
試したこと
pd.DataFrameで上手くいかなかったので、pd.Seriesで変換を試みたところエラーが発生しなかったのですが、変換したものをcsvファイルに落とし込んでみたところ、[[1.77417302e+00, 2.42700934e-01,...]]のままの形になっていました。
###補足情報
y_pred[0]を以下のようにデータフレームに変換できたらと思っていますが、可能でしょうか?
1 2 ... 16 17 0 0 0 ... 0 0 1 0 0 ... 0 0 2 0 0 ... 0 0 ... 22 0 0 ... 1 0 23 0 0 ... 0 0 #[24 rows x 17 columns]
回答1件
あなたの回答
tips
プレビュー