You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ridge与RandomForest模型MSE/RMSE/MAE指标完全相同问题排查

问题描述

做回归预测任务时发现,其余对比模型的MSE、RMSE、MAE三项评估指标结果均存在差异,唯独Ridge模型与RandomForest模型的三项指标得分完全一致,相关实现代码与结果如下:

def metrics(valid, pred):
  mse = mean_squared_error(valid, pred)
  rmse = np.sqrt(mean_squared_error(valid, pred))
  mae = mean_absolute_error(valid,pred)
  return mse, rmse, made

model = Ridge().fit(X_train, y_train)
y_pred = model.predict(X_test)

df_models_temp = pd.DataFrame(data=[['Ridge', *metrics(y_test, y_pred)]], columns=['Model Name', 'MSE', 'RMSE', 'MAE'])
df_models = df_models.append(df_models_temp, ignore_index=True)

clf = RandomForestRegressor().fit(X_train, y_train)
y_pred = model.predict(X_test)

df_models_temp = pd.DataFrame(data=[['Random Forest', *metrics(y_test, y_pred)]], columns=['Model Name', 'MSE', 'RMSE', 'MAE'])
df_models = df_models.append(df_models_temp, ignore_index=True)

结果截图

问题原因

代码存在两处错误,直接导致两个模型指标完全一致:

  • 训练完随机森林模型后,生成预测结果时错误调用了之前训练Ridge保存的model对象,没有使用刚训练完成的随机森林实例clf,两次评估用的是完全相同的Ridge预测结果,指标自然完全相等。对应错误代码行为y_pred = model.predict(X_test),此处需要改为调用clf的预测方法。
  • 自定义指标计算函数metrics存在拼写错误:定义的平均绝对误差变量名为mae,返回时错写为made,代码运行时会直接触发变量不存在的报错,属于笔误。
修正后代码
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error

def metrics(valid, pred):
  mse = mean_squared_error(valid, pred)
  rmse = np.sqrt(mse)
  mae = mean_absolute_error(valid, pred)
  return mse, rmse, mae

# Ridge模型训练评估
model = Ridge().fit(X_train, y_train)
y_pred = model.predict(X_test)
df_models_temp = pd.DataFrame(
    data=[['Ridge', *metrics(y_test, y_pred)]],
    columns=['Model Name', 'MSE', 'RMSE', 'MAE']
)
df_models = pd.concat([df_models, df_models_temp], ignore_index=True)

# 随机森林模型训练评估
clf = RandomForestRegressor().fit(X_train, y_train)
# 核心修正:调用随机森林实例生成预测结果,不要复用Ridge的model对象
y_pred = clf.predict(X_test)
df_models_temp = pd.DataFrame(
    data=[['Random Forest', *metrics(y_test, y_pred)]],
    columns=['Model Name', 'MSE', 'RMSE', 'MAE']
)
df_models = pd.concat([df_models, df_models_temp], ignore_index=True)

补充说明:Pandas 2.0及以上版本已经移除了DataFrame.append()方法,替换为pd.concat()做数据拼接,可以避免版本兼容问题。

内容的提问来源于stack exchange,提问作者Ruslan Pylypyuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:16:03