我有一个包含三个输入的数据集,试图通过之前输入值的组合来预测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'
回答:
显然,你函数的data参数是一个Numpy数组,而不是一个DataFrame。作为np.ndarray的data也没有命名列。
一种可能的解决方案是保持参数为np.ndarray:
- 使用np.apply_along_axis()遍历该数组的行,
- 通过索引(而不是名称)引用列。
另一种解决方案是根据data创建一个DataFrame,设置正确的列名并遍历其行。
一种不使用DataFrame编写代码的可能解决方案
假设data是一个包含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。
为了演示目的,计算s并打印它。