質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1311閲覧

[python]ランダムフォレストで時系列分析がしたいです

mango55

総合スコア22

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/20 04:23

編集2020/06/22 14:12

時系列分析(ランダムフォレスト)で将来の来店人数を予測したいです。

手元のデータ集計期間が短いため、任意日を用いて前日、前々日の来店人数を予測したものを学習データ、実際の来店人数をテストデータとして予測を行うことを考えています。

頂いたヒントを元にコーディングを行っているのですが、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/06/20 10:29

エラーメッセージは全文掲載しましょう。(ユーザー名等は隠してもらって構いません)
meg_

2020/06/20 12:21

エラーメッセージには「rf.fit(X_train[X_vars], y_train[Y_vars])」とありますが、質問のコードでは「rf.fit(X=train[X_vars], y=train[Y_vars])」となっています。このエラーメッセージは本当に質問のコードを実行した結果ですか?
Penpen7

2020/06/20 12:35

質問者様ご自身で修正されているところもあると思いますので、一度、ソースコードを貼り直していただいたほうがいいと思います。
mango55

2020/06/20 12:43

失礼しました。再度確認しましたらコードの方が誤っておりました。 こちらで実行した結果のエラーとなります。
meg_

2020/06/20 23:19

コードを確認しました。 しかし変数「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])でもエラーにはならないはずですが。
mango55

2020/06/22 14:06

やはり同様の現象になっています。 別の方法等を試してみたいと思います。ありがとうございました。
guest

回答1

0

ベストアンサー

このコードは一部分を抜粋されたものだと思いますが、この部分だけですとX_valがちゃんと定義されているかわからないため、具体的には回答できません。
syntax error:X_val is not difinedというのは、X_valに値を代入する前に使用しているために出ているエラーです。X_valを代入してから使用しているか、あるいはタイピングを間違っていないか確認してください。

投稿2020/06/20 06:03

編集2020/06/20 07:22
Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mango55

2020/06/20 06:57 編集

お返事ありがとうございます。 失礼しました、上部のコードです。 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] 直前の部分は説明変数と特徴量の指定し、XとYに代入しているのみでX_valを定義しているところはありません。よろしくお願いいたします。
Penpen7

2020/06/20 07:18 編集

改めて見ると、コード中に定義はありますね。私の見落としです。失礼しました。 どの行にエラーが出ているか書いていただけると、助言できると思います。
Penpen7

2020/06/20 07:21

提示されたソースコードを見ても、X_valが書かれているのは二箇所のみで、syntax errorとなりそうな部分がないため不思議です。
mango55

2020/06/20 11:15

エラーを追記しました。エラーは一番最後に出ています。 よろしくお願いします。
Penpen7

2020/06/20 12:15

ご返信ありがとうございます。 追記されたエラーを見ますと、name 'X_vars' is not definedとあるので、X_valではなく、正しくはX_varsに関するエラーとなるでしょうか?
mango55

2020/06/20 13:48

こちらこそありがとうございます。はい、その認識でおります。
Penpen7

2020/06/22 17:25 編集

X_train[X_vars]_val, X_test, y_train[Y_vars]_val, y_test は、 X_train[X_vars], X_test, y_train[Y_vars], y_test の誤りではありませんか? X_varsとY_varsを添字として使う前に、代入しないといけません。 これらの変数はXとYにどのコラムを使うかというようなリストにあたるものでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問