使用MLP模拟10×10表格时出现KeyError:1错误,求解决方案
问题:MLP模拟10×10表格时触发KeyError:1错误
我正在练习用MLP(多层感知器)模拟10×10表格,开发完成后运行代码时出现KeyError:1错误,无法定位修改点。
错误相关信息
- 错误触发在循环打印
y_test与预测值的环节,当循环到i=1时抛出KeyError - 检查
y_test和y_hat的数值后,发现y_test是带有非连续/非默认整数索引的pandas Series,而非普通数组或列表
出错代码段
y_pred = mlp.predict(X_test) for i in range(len(y_test)): print("y_test: {} y_prediction: {}".format(y_test[i], y_pred[i])) # 计算MSE mse = mean_squared_error(y_test, y_pred) print("MSE: {}".format(mse)) # 对预测值取两位小数得到y_hat,计算新MSE print("\n\nAfter Rounding off...") y_hat = np.around(y_pred, decimals=2) for i in range(len(y_test)): print("y_test: {} y_hat: {}".format(y_test[i], y_hat[i])) # 新MSE new_mse = mean_squared_error(y_test, y_hat) print("New MSE: {}".format(new_mse))
解决方法
错误原因
y_test是pandas Series类型,其索引并非从0开始的连续整数。用range(len(y_test))生成的索引值i去访问y_test[i]时,该索引值不存在于Series的索引集合中,因此触发KeyError。
三种修改方案
转换为numpy数组
将y_test转为数组后,可通过位置索引正常访问:# 提前转换 y_test = y_test.values # 或在打印时直接调用values print("y_test: {} y_prediction: {}".format(y_test.values[i], y_pred[i]))迭代元素而非索引
使用zip配对y_test和y_pred的元素,避免索引问题:for y_true, y_pred_val in zip(y_test, y_pred): print("y_test: {} y_prediction: {}".format(y_true, y_pred_val))重置Series索引
将y_test的索引重置为从0开始的连续整数:y_test = y_test.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Wandondi
相关产品推荐
相关产品推荐

