首页 > 解决方案 > 'numpy.ndarray'对象在python中使用lstm预测值时没有属性'iterrows'

问题描述

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

标签: python-3.xpandasmachine-learninglstm

解决方案


显然,你的函数的data参数是一个Numpy数组,而不是一个DataFrameData,作为np.ndarray,也没有命名列。

将参数保留为np.ndarray的一种可能解决方案是:

  • 使用np.apply_along_axis()遍历该数组的行,
  • 通过索引(而不是名称)引用列。

另一种解决方案是从data创建一个DataFrame,设置正确的列名并迭代其行。

如何在没有 DataFrame 的情况下编写代码的一种可能解决方案

假设data是一个有 4 列的Numpy表,分别包含X1X2X3X4

[[ 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

出于演示目的,计算打印它。


推荐阅读