時系列分析(ランダムフォレスト)で将来の来店人数を予測したいです。
手元のデータ集計期間が短いため、任意日を用いて前日、前々日の来店人数を予測したものを学習データ、実際の来店人数をテストデータとして予測を行うことを考えています。
頂いたヒントを元にコーディングを行っているのですが、syntax error:X_val is not difinedとなります。原因が分からず前に進みません。
解決法、このコーディング自体の間違いをご指摘頂けないでしょうか。
よろしくお願いいたします。
dataset['date_year'] = dataset['ds'].apply(dataset_str2year) dataset['date_month'] = dataset['ds'].apply(dataset_str2month) dataset.iloc[0:9][['date_year', 'date_month'] target_col = 'y' exclude_cols = ['y','ds','date_year'] feature_cols = [] for col in dataset.columns: if col not in exclude_cols: feature_cols.append(col) feature_cols y = dataset[target_col] X = dataset[feature_cols] # 学習データを70%(X_train[X_vars]_val, y_train[Y_vars]_val)、 テストデータを30%(X_test, y_test)に分割 X_train[X_vars]_val, X_test, y_train[Y_vars]_val, y_test = \ train_test_split(X, y, test_size=0.3, random_state=1234) # さらに分割した学習データを70%(X_train, y_train)と30%(X_val, y_val)に分割 X_train, X_val, y_train, y_val = \ train_test_split(X_train[X_vars], y_train[Y_vars], test_size=0.3, random_state=1234) # ランダムフォレスト rf = RandomForestRegressor() rf.fit(X_train[X_vars], y_train[Y_vars]) for fday in pred["date"]: idx = pred[pred["date"] == fday].index[0] pred_value = rf.predict(pred.loc[pred["date"]==fday, X_vars].values.reshape(1,-1)) for i in range(len(Y_vars)): prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) target_list = prefix[1] #Date_0 pred.loc[pred["date"]==fday, Y_vars[i]] = 0 # Date_-1 prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) target_var1 = target_list + "_1" pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var1] = pred_value[0][i] # Date_-2 target_var2 = target_list + "_2" pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var2] = pred.loc[pred["date"]==fday, target_var1].values[0] y_train = rf.predict(X_val) rf_mse = mean_squared_error(Y_val, y_train) print('Random Forest RMSE: ', np.sqrt(rf_mse)) --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-53-76f91fadb21b> in <module> 1 rf = RandomForestRegressor(random_state=1234) ----> 2 rf.fit(X_train[X_vars], y_train[Y_vars]) 3 4 for fday in pred["ds"]: 5 idx = pred[pred["ds"] == fday].index[0] NameError: name 'X_vars' is not defined
エラーメッセージは全文掲載しましょう。(ユーザー名等は隠してもらって構いません)
エラーメッセージには「rf.fit(X_train[X_vars], y_train[Y_vars])」とありますが、質問のコードでは「rf.fit(X=train[X_vars], y=train[Y_vars])」となっています。このエラーメッセージは本当に質問のコードを実行した結果ですか?
質問者様ご自身で修正されているところもあると思いますので、一度、ソースコードを貼り直していただいたほうがいいと思います。
失礼しました。再度確認しましたらコードの方が誤っておりました。
こちらで実行した結果のエラーとなります。
コードを確認しました。
しかし変数「X_vars」はrf.fit(X_train[X_vars], y_train[Y_vars])の前のコード中でも使用されています。(X_train, X_val, y_train, y_val = train_test_split(X_train[X_vars], y_train[Y_vars], test_size=0.3, random_state=1234))そこではエラーは出ていないのですよね?であればrf.fit(X_train[X_vars], y_train[Y_vars])でもエラーにはならないはずですが。
やはり同様の現象になっています。
別の方法等を試してみたいと思います。ありがとうございました。
回答1件
あなたの回答
tips
プレビュー