前提・実現したいこと
ここに質問の内容を詳しく書いてください。
初めまして。
Keras の LSTM で時系列の予測がしたい
上記サイトで公開されているコードを模倣して自分のパソコンでも動かしたいと思っています。
その際表示されているAttributeErrorの解決方法を教えていただきたいです。
発生している問題・エラーメッセージ
エラーメッセージ AttributeError Traceback (most recent call last) <ipython-input-19-5f5796358b25> in <module> 42 43 # データ準備 ---> 44 X_train, y_train = _load_data(data[['close']].iloc[0:900], length_of_sequences ) 45 X_test, y_test = _load_data(data[['close']].iloc[900:1000], length_of_sequences) 46 <ipython-input-19-5f5796358b25> in _load_data(data, n_prev) 13 docX, docY = [], [] 14 for i in range(len(data) - n_prev): ---> 15 docX.append(data.iloc[i:(i+n_prev)].as_matrix()) 16 docY.append(data.iloc[i+n_prev].as_matrix()) 17 alsX = numpy.array(docX) ~\anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name) 5272 if self._info_axis._can_hold_identifiers_and_holds_name(name): 5273 return self[name] -> 5274 return object.__getattribute__(self, name) 5275 5276 def __setattr__(self, name: str, value) -> None: AttributeError: 'DataFrame' object has no attribute 'as_matrix'
該当のソースコード
ソースコード # -*- coding: utf-8 -*- import numpy import pandas import matplotlib.pyplot as plt from sklearn import preprocessing from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.layers.recurrent import LSTM # 学習用データを抽出する関数 def _load_data(data, n_prev=10): docX, docY = [], [] for i in range(len(data) - n_prev): docX.append(data.iloc[i:(i+n_prev)].as_matrix()) docY.append(data.iloc[i+n_prev].as_matrix()) alsX = numpy.array(docX) alsY = numpy.array(docY) return alsX, alsY if __name__ == "__main__": # 株価データの読み込み data = None for year in range(2007, 2018): data_ = pandas.read_csv('Nikkeiclose.csv') data = data_ if (data is None) else pandas.concat([data, data_]) data.columns = ['date','middle','long','close'] data['date'] = pandas.to_datetime(data['date'], format='%Y-%m-%d') data['close'] = preprocessing.scale(data['close']) data = data.sort_values(by='date') data = data.reset_index(drop=True) data = data.loc[:, ['date', 'close']] data = data[1516:2515] # plt.plot(data['date'], data['close']) # plt.show() # 学習の設定 length_of_sequences = 10 in_out_neurons = 1 hidden_neurons = 300 # データ準備 X_train, y_train = _load_data(data[['close']].iloc[0:900], length_of_sequences ) X_test, y_test = _load_data(data[['close']].iloc[900:1000], length_of_sequences) # ニューラルネットの定義 model = Sequential() model.add(LSTM(hidden_neurons, \ batch_input_shape=(None, length_of_sequences, in_out_neurons), \ return_sequences=False)) model.add(Dense(in_out_neurons)) model.add(Activation("linear")) model.compile(loss="mean_squared_error", optimizer="rmsprop") # 学習 model.fit(X_train, y_train, batch_size=100, nb_epoch=100, validation_split=0.05) # テスト結果表示 predicted = model.predict(X_test) result = pandas.DataFrame(predicted) result.columns = ['predict'] result['actual'] = y_test result.plot() plt.show()
試したこと
AttributeErrorについて調べましたが、何が正しく参照できていないのか分かりません。
['close']が問題かと思いますが、データフレームにはcloseがあります。
15行目は、.as_matrix())を.baluesに変えるとSyntaxError: invalid syntax
が表示される状況です。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
データは、上記サイトと異なり自前のものを使用しており、
横列が左詰めでdate,middle,long,closeで、縦列が時系列データです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/28 03:19 編集
2020/04/28 03:11 編集
2020/04/28 03:27