2017-11-25 18 views
0

単純なRNNを実装して、整数シーケンスの次の整数を予測しようとしています。ValueErrorを取得しています:「マルチインデックスでタプルインデックスを作成できるだけ」

Id Sequence 
1 1,0,0,2,24,552,21280,103760,70299264,5792853248,587159944704 
2 1,1,5,11,35,93,269,747,2115,5933,16717,47003,132291,372157,1047181,2946251,8289731,23323853,65624397,184640891,519507267,1461688413,4112616845,11571284395,32557042499,91602704493,257733967693 
4 0,1,101,2,15,102,73,3,40,16,47,103,51,74,116,4,57,41,125,17,12,48,9,104,30,52,141,75,107,117,69,5,148,58,88,42,33,126,152,18,160,13,38,49,55,10,28,105,146,31,158 
5 1,4,14,23,42,33,35,34,63,66,87,116,84,101,126,164,128,102,135,143,149,155,203,224,186,204,210,237,261,218,219,286,257,266,361,355,336,302,374,339,371,398,340,409,348,388,494,436,407,406 
6 1,1,2,5,4,2,6,13,11,4,10,10,12,6,8,29,16,11,18,20,12,10,22,26,29,12,38,30,28,8,30,61,20,16,24,55,36,18,24,52,40,12,42,50,44,22,46,58,55,29,32,60,52,38,40,78,36,28,58,40,60,30,66,125,48,20,66,80,44,24 
9 0,31,59,90,120,151,181,212,243,273,304,334,365,396,424,455,485,516,546,577,608,638,669,699,730,761,789,820,850,881,911,942,973,1003,1034,1064,1095,1126,1155,1186,1216,1247,1277,1308,1339,1369,1400,1430 
10 1,1,2,5,13,36,111,347,1134,3832,13126,46281,165283,598401,2202404,8168642,30653724,116082962,442503542,1701654889,6580937039,25603715395,100223117080,394001755683,1556876401398,6178202068457,24608353860698,98421159688268,394901524823138,1589722790850089 
12 0,0,0,0,112,40286,5485032,534844548,45066853496,3538771308282,267882021563464,19861835713621616,1453175611052688600,105278656040052332838,7564280930105061931496 

私のコードは、これまでのところです:

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
import math 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import SimpleRNN 
from sklearn.preprocessing import MinMaxScaler 
from sklearn.metrics import mean_squared_error 
from keras.preprocessing.sequence import pad_sequences 

def stoarray(data = [], sep = ','): 
    return data.map(lambda x: np.array(x.split(sep), dtype=float)) 

def create_dataset(dataset, window_size=1): 
    dataX, dataY = [], [] 
    for i in range(len(dataset)-window_size-1): 
     a = dataset[i:(i+window_size), 0] 
     dataX.append(a) 
     dataY.append(dataset[i + window_size, 0]) #gives the ValueError : Can only tuple index with multi index 
    return np.array(dataX), np.array(dataY) 

# fix random seed for reproducibility 
np.random.seed(7) 

# loading data 
colna = ['id', 'seq'] 
train_data = pd.read_csv('G:/Python/integer_sequencing/testfile.csv', header=1) 
train_data.columns = colna 
dataset = train_data['seq'] 
#print(dataset) 
window_size = 1 
X_train, Y_train = create_dataset(dataset, window_size) 

print(X_train.head(5)) 
print(Y_train.head(5)) 

私は除いて完全なセットで構成され、入力としてX_trainとのそれぞれの配列を分割しようとしていますので、私は以下の通りであるデータセットを持っています最後のタームとY_trainは出力として扱われ、最後のタームのみで構成されます。 しかし、私がコードを実行すると、ValueErrorが得られます。マルチインデックスでのみタプルインデックスできます。 誰でも私のコードに関して何を意味するのか、それを解決するために何をしなければならないのかを説明することができます。

トレースバックコール: enter image description here

PS - 私はオーバーフローと深い学習を積み重ねるために新しいですので、あなたが示唆して私の質問の形式で私を助けることができる場合、私は非常に感謝されます。

+0

常に置く完全なエラーメッセージが問題になっている(トレースバック)がdataset[0]またはスライスのような単一の整数を使用することができます。どの行が問題になっているかを示します。 – furas

+0

'dataset [i:(i + window_size)、0]'でタプル 'i:(i + window_size)、0'を使ってデータを取得しますが、これは許されません。 'dataset [0]'やslice 'dataset [i:(i + window_size)]のような単一の整数だけを使うことができます。あなたのコードでは、 'dataset'はDataFrameから単一の列である' train_data ['seq'] 'を意味し、' Series'であり、一つの列を持つ 'DataFrame'ではありません。それを見るには 'print(type(dataset))'を使います。 – furas

+0

質問にエラーメッセージを追加しました。それが役に立つと願っています。 –

答えて

1

i:(i+window_size), 0に問題があります。dataset[i:(i+window_size), 0]です。 Series単一次元 - - あなたのコードdataset

は、単一の列であるtrain_data['seq']を意味していますが、二次元DataFrameのようi:(i+window_size), 0を使用しています。すなわち、他の有用なinforamtionがある -

あなたがdataset[i:(i+window_size)]