如何将多回归器的R2、RMSE结果合并为单一表头的DataFrame表格
回归结果统一汇总表生成方案
你当前多次调用测试函数返回的都是独立的小DataFrame,存入列表后不会自动合并,只需用pandas的拼接功能即可得到单表头的统一表格。
解决方案1:直接拼接现有结果列表
你已经把每个回归器的结果存入了df_results列表,直接调用concat方法垂直拼接即可:
import pandas as pd # 拼接所有小DataFrame,自动合并列名,保留所有行 df_total = pd.concat(df_results, axis=0) # 如果需要把回归器名称从索引转为普通列,可以补充reset_index操作 df_total = df_total.reset_index(names="回归器名称")
运行后得到的df_total就是仅保留一组R2、RMSE列名的汇总表。
解决方案2:优化原有流程,更高效生成汇总表
你也可以调整测试逻辑,避免每次生成单独的小DataFrame,直接收集所有指标后一次性生成总表,代码示例如下:
import numpy as np import pandas as pd from sklearn.metrics import r2_score, mean_squared_error # 初始化存储所有指标的列表 r2_scores = [] rmse_scores = [] regressor_names = [] # 定义要测试的回归器列表 regressors = [ (LinearRegression(), "LinearRegression"), (RandomForestRegressor(), "RandomForestRegressor"), (SVR(), "SVR") ] # 遍历测试每个回归器 for reg, name in regressors: reg.fit(X_train_full_ss, y_train_full) y_pred = reg.predict(X_test_ss) # 计算指标存入列表 r2_scores.append(r2_score(y_test, y_pred)) rmse_scores.append(np.sqrt(mean_squared_error(y_test, y_pred))) regressor_names.append(name) # 一次性生成总表 df_total = pd.DataFrame({ "回归器名称": regressor_names, "R2": r2_scores, "RMSE": rmse_scores })
注意事项
- 你原有代码中的
apply_regressor_test函数存在语法错误,计算RMSE的行末尾缺少右括号,需要修改为r = np.sqrt(mean_squared_error(y_test, y_pred))才能正常运行。
内容的提问来源于stack exchange,提问作者Amal Nasir
相关产品推荐
相关产品推荐

