我有一个包含三个输入的数据集,并尝试通过先前输入值的组合来预测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/

10-16 01:05