時系列分析(ランダムフォレスト)で将来の人数を予測しています。
手元のデータ集計期間が短いため、ある特定日を用いて前日、前々日の人数を予測したものを学習データ、実際の人数をテストデータとして予測を行いたいです。
エラーの内容を調べても分かりませんでした。
解決法、実現したいことを達成するためのコードの間違いをご指摘頂けないでしょうか。
実現したいこと
① 学習用データの作成 4/1のデータから3/31,3/30の人数を予測
② ①を学習用データ、実際の人数をテストデータとして予測
③ ①②を用いてランダムフォレストでRMSEを算出
色々試行錯誤しているのですがどうしても最後までたどり着きません。
よろしくお願いいたします。
Python
1%matplotlib inline 2import matplotlib 3import matplotlib.pyplot as plt 4import numpy as np 5import pandas as pd 6from sklearn.linear_model import LinearRegression 7from sklearn.tree import DecisionTreeRegressor 8from sklearn.ensemble import RandomForestRegressor 9from sklearn.model_selection import GridSearchCV 10from sklearn.model_selection import train_test_split 11from sklearn.metrics import mean_squared_error 12 13dataset = pd.read_csv('file_0627.csv') 14dataset.head() 15 16target_col = 'patient' 17exclude_cols = ['date','patient','14day_exclusion_rate'] 18feature_cols = [] 19for col in dataset.columns: 20 if col not in exclude_cols: 21 feature_cols.append(col) 22 23X_train_val, X_test, y_train_val, y_test = \ 24 train_test_split(X, y, test_size=0.3, random_state=1234) #分割1 25 26X_train, X_val, y_train, y_val = \ 27 train_test_split(X_train_val, y_train_val, test_size=0.3, random_state=1234) #分割2 28 29y = dataset[target_col] 30X = dataset[feature_cols] 31 32rf = RandomForestRegressor(random_state=1234) 33rf.fit(X_train[X_vars], y_train[Y_vars]) 34 35for fday in pred["date"]: 36 idx = pred[pred["date"] == fday].index[0] 37 pred_value = rf.predict(pred.loc[pred["date"]==fday, X_vars].values.reshape(1,-1)) 38 39 for i in range(len(Y_vars)): 40 prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) 41 target_list = prefix[1] 42 43 # Date_-1 44 prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) 45 target_var1 = target_list + "_1" 46 pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var1] = pred_value[0][i] 47 48 # Date_-2 49 target_var2 = target_list + "_2" 50 pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var2] = pred.loc[pred["ds"]==fday, target_var1].values[0] 51 52y_train = rf.predict(X_val) 53rf_mse = mean_squared_error(Y_val, y_train) 54print('Random Forest RMSE: ', np.sqrt(rf_mse))
コード修正後のエラー(初回とはエラー内容が異なります) KeyError Traceback (most recent call last) ~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2656 try: -> 2657 return self._engine.get_loc(key) 2658 except KeyError: pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: 'patient' During handling of the above exception, another exception occurred: KeyError Traceback (most recent call last) <ipython-input-57-82605815cc01> in <module> 3 4 rf = RandomForestRegressor(random_state=1234) ----> 5 rf.fit(X_train[X_vars], y_train[Y_vars]) 6 7 for fday in pred["date"]: ~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) 2925 if self.columns.nlevels > 1: 2926 return self._getitem_multilevel(key) -> 2927 indexer = self.columns.get_loc(key) 2928 if is_integer(indexer): 2929 indexer = [indexer] ~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2657 return self._engine.get_loc(key) 2658 except KeyError: -> 2659 return self._engine.get_loc(self._maybe_cast_indexer(key)) 2660 indexer = self.get_indexer([key], method=method, tolerance=tolerance) 2661 if indexer.ndim > 1 or indexer.size > 1: pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: 'patient'
file_0627.csv
|date|patient|6day_exclusion_rate|14day_exclusion_rate
|2020/4/1|181|0.117179|0.130412
|2020/4/2|186|0.17748|0.129215
回答1件
あなたの回答
tips
プレビュー