无法将我的输入序列和 window 大小转换为 RNN 模型的一组 input/output 对
Unable to transform my input series and window-size into a set of input/output pairs for the RNN model
我目前正在构建一个递归神经网络模型,当我将我的输入数据转换为 RNN 模型的 input/output 集时,我目前遇到了困难。
我尝试了 windoe_tranform_series 函数,该函数将序列 window_size 和步长作为输入,但我一直收到 KEYERROR。
将我们的时间序列分割成序列
下面的函数将输入序列和 window 大小转换为我们的 RNN 模型的一组 #of input/output 对。
def window_transform_series(series,window_size,step_size):
inputs = []
outputs = []
ctr = 0
for i in range(window_size, len(series), step_size):
inputs.append(series[ctr:i])
outputs.append(series[i])
ctr = ctr + step_size
return inputs,outputs
window_size = 7
step_size = 5
inputs, outputs = window_transform_series(carbon_persil,window_size,step_size)
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: 7
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-45-9810d786d8b5> in <module>
2 window_size = 7
3 step_size = 5
----> 4 inputs, outputs = window_transform_series(carbon_persil,window_size,step_size)
<ipython-input-41-82e8b484e9e9> in window_transform_series(series, window_size, step_size)
9 for i in range(window_size, len(series), step_size):
10 inputs.append(series[ctr:i])
---> 11 outputs.append(series[i])
12 ctr = ctr + step_size
13 return inputs,outputs
~\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: 7
您的 series
不够长。请参阅以下示例片段。
import numpy as np
import pandas as pd
data = np.array(['a','b','c','d'])
s = pd.Series(data) # create dummy series
现在,print (s[2])
将打印 'c'
作为输出。
但是如果您尝试打印超出范围的内容,它会给出 KeyError
.
所以,这里的print (s[5])
给出了KeyError: 5
。在你的例子中,你用 window_size=7
开始 for 循环,因为你的 series
的长度小于 7
,它在行 outputs.append(series[i])
上给出 KeyError: 7
。
有趣的是,当您尝试使用超出范围的索引对系列进行切片时,不会发生此错误。
例如如果您尝试在上面的示例中执行 print (s[1:5])
,它只会打印以下内容而不是 KeyError
.
1 b
2 c
3 d
因此,KeyError
在您的 inputs.append(series[ctr:i])
行中被绕过。
我目前正在构建一个递归神经网络模型,当我将我的输入数据转换为 RNN 模型的 input/output 集时,我目前遇到了困难。
我尝试了 windoe_tranform_series 函数,该函数将序列 window_size 和步长作为输入,但我一直收到 KEYERROR。
将我们的时间序列分割成序列
下面的函数将输入序列和 window 大小转换为我们的 RNN 模型的一组 #of input/output 对。
def window_transform_series(series,window_size,step_size):
inputs = []
outputs = []
ctr = 0
for i in range(window_size, len(series), step_size):
inputs.append(series[ctr:i])
outputs.append(series[i])
ctr = ctr + step_size
return inputs,outputs
window_size = 7 step_size = 5
inputs, outputs = window_transform_series(carbon_persil,window_size,step_size)
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: 7
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-45-9810d786d8b5> in <module>
2 window_size = 7
3 step_size = 5
----> 4 inputs, outputs = window_transform_series(carbon_persil,window_size,step_size)
<ipython-input-41-82e8b484e9e9> in window_transform_series(series, window_size, step_size)
9 for i in range(window_size, len(series), step_size):
10 inputs.append(series[ctr:i])
---> 11 outputs.append(series[i])
12 ctr = ctr + step_size
13 return inputs,outputs
~\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: 7
您的 series
不够长。请参阅以下示例片段。
import numpy as np
import pandas as pd
data = np.array(['a','b','c','d'])
s = pd.Series(data) # create dummy series
现在,print (s[2])
将打印 'c'
作为输出。
但是如果您尝试打印超出范围的内容,它会给出 KeyError
.
所以,这里的print (s[5])
给出了KeyError: 5
。在你的例子中,你用 window_size=7
开始 for 循环,因为你的 series
的长度小于 7
,它在行 outputs.append(series[i])
上给出 KeyError: 7
。
有趣的是,当您尝试使用超出范围的索引对系列进行切片时,不会发生此错误。
例如如果您尝试在上面的示例中执行 print (s[1:5])
,它只会打印以下内容而不是 KeyError
.
1 b
2 c
3 d
因此,KeyError
在您的 inputs.append(series[ctr:i])
行中被绕过。