python-3.x - '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'
解决方案
显然,你的函数的data参数是一个Numpy数组,而不是一个DataFrame。 Data,作为np.ndarray,也没有命名列。
将参数保留为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。
出于演示目的,计算并打印它。
推荐阅读
- python - 在 Pandas Dataframe 中没有出现索引错误
- dataframe - (pyspark)如何制作相互没有相同user_id的数据帧
- javascript - 如何使用 node.js 将这种 json 对象格式化为另一个对象?
- python - 在数据库烧瓶项目中通过 id 和 name 获取不同的选项值和名称
- python - 是否可以在 O(1) 时间内在 [0,n) 中创建一个包含 n 个整数的(n 个未初始化的)Python 列表?
- r - 获取列表中所有data.frames列的类
- c - 我正在学习 C 并且我制作了一个简单的程序。它不起作用,我需要一个答案
- c# - 如何在 LINQ 中使用 Projection 将实体转换为 DTO 类
- r - 如何在 R Shiny 应用程序中存储反应变量的先前状态?
- python - 如何通过 sympy 在 python 中计算对数方程的解