使用Pandas逐行累积计算RMSE并新增列存储的实现方法
累积RMSE计算实现方案
核心思路
RMSE的计算公式是sqrt(平均( (真实值-预测值)^2 )),逐行累积计算只需要把平均的范围改成从第0行到当前行即可,这里提供两种实现方式。
实现1:向量化计算(性能最优)
直接利用numpy和pandas的内置算子完成计算,没有显式循环,数据量越大效率优势越明显:
import pandas as pd import numpy as np # 原有读取数据代码无需修改 df = pd.read_excel(r'S:\...\df.xlsx') # 1. 计算每行的误差平方 df['squared_error'] = (df['y_true'] - df['y_pred']) ** 2 # 2. 对误差平方做累积求平均,再开根号得到累积RMSE,保留2位小数 df['RMSE'] = np.sqrt(df['squared_error'].expanding().mean()).round(2) # 可选:删除中间生成的误差平方列 df.drop('squared_error', axis=1, inplace=True) print(df)
实现2:直观切片计算(灵活性高)
如果后续需要自定义更复杂的累积计算逻辑,可以用逐行切片的方式,代码逻辑更易读、易修改:
import pandas as pd from sklearn.metrics import mean_squared_error import numpy as np df = pd.read_excel(r'S:\...\df.xlsx') rmse_list = [] for i in range(len(df)): # 取从第0行到当前行的所有数据切片 current_slice = df.iloc[:i+1] # 计算当前切片的RMSE current_rmse = mean_squared_error(current_slice['y_true'], current_slice['y_pred'], squared=False) rmse_list.append(round(current_rmse, 2)) df['RMSE'] = rmse_list print(df)
两种实现输出结果均与你给出的预期结果完全匹配。
内容的提问来源于stack exchange,提问作者g123456k
相关产品推荐
相关产品推荐

