我有一个包含三个输入的数据集,并尝试通过先前输入值的组合来预测X1的下一个值。
我的三个输入是X1,X2,X3,X4。
所以在这里,我试图预测X1的下一个未来价值。为了预测下一个X1,这四个输入组合将影响:
X1 + X2 - X3 -X4
我在课堂上写了这段代码。然后,我编写了运行lstm的代码。之后,我编写了预测价值的代码。然后它给了我这个错误。谁能帮我解决这个问题?
我的代码:
def model_predict(data):
pred=[]
for index, row in data.iterrows():
val = row['X1']
if np.isnan(val):
data.iloc[index]['X1'] = pred[-1]
row['X1'] = pred[-1]
f = row['X1','X2','X3','X4']
s = row['X1'] - row['X2'] + row['X3'] -row['X4']
val = model.predict(s)
pred.append(val)
return np.array(pred)
在lstm代码之后,然后我编写了用于预测值的代码:
pred = model_predict(x_test_n)
给我这个错误:
` ---> 5 pred = model_predict(x_test_n)
def model_predict(data):
pred=[]
-->for index, row in data.iterrows():
val = row['X1']
if np.isnan(val):`
AttributeError: 'numpy.ndarray' object has no attribute 'iterrows'
最佳答案
显然,函数的数据参数是一个Numpy数组,而不是DataFrame。
数据作为np.ndarray,也没有命名列。
将参数保持为np.ndarray的可能解决方案之一是:
使用np.apply_along_axis()遍历此数组的行,
通过索引(而不是名称)引用列。
另一个解决方案是从数据创建DataFrame,设置适当
列名并在其行上进行迭代。
如何在不使用DataFrame的情况下编写代码的可能解决方案之一
假设数据是一个包含4列的Numpy表,
分别包含X1,X2,X3和X4:
[[ 1 2 3 4]
[10 8 1 3]
[20 6 2 5]
[31 3 3 1]]
然后您的函数可以是:
def model_predict(data):
s = np.apply_along_axis(lambda row: row[0] + row[1] - row[2] - row[3],
axis=1, arr=data)
return model.predict(s)
注意:
s-模型的所有输入值-可以一次计算
指令,为每一行调用apply_along_axis(axis = 1),
预测也可以“一次全部”计算,并通过Numpy
向量-只是s。
出于演示目的,请计算并打印。
关于python-3.x - 'numpy.ndarray'对象在使用python中的lstm预测值时没有属性'iterrows',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57235451/