如何兼容不同版本的 scikit-learn(sklearn)库,统一获取“均方根误差(RMSE)”的计算函数

文章目录

  • [1. 代码解析](#1. 代码解析)
  • [2. 版本兼容背景](#2. 版本兼容背景)

1. 代码解析

下面这段代码通过 try-except 异常捕获机制,适配 sklearn 新旧版本中 RMSE 函数的不同写法:

  • 新版 sklearn 直接提供 root_mean_squared_error 函数(专门计算 RMSE);
  • 旧版 sklearn 只有 mean_squared_error 函数(默认计算 MSE),需通过 squared=False 参数转为 RMSE;

最终无论 sklearn 版本是新是旧,代码中 mean_squared_error 变量都指向计算 RMSE 的函数

python 复制代码
from functools import partial  # 必须导入,否则会报NameError

try:
    # 尝试从sklearn.metrics导入新版的RMSE函数,并将其重命名为mean_squared_error
    from sklearn.metrics import root_mean_squared_error as mean_squared_error
except ImportError:
    # 如果导入失败(说明是旧版sklearn),执行以下逻辑
    # 1. 导入旧版的MSE函数
    from sklearn.metrics import mean_squared_error
    # 2. 使用partial固定参数squared=False,将MSE函数转为RMSE函数
    mean_squared_error = partial(mean_squared_error, squared=False)

关键细节解释

  • root_mean_squared_error :sklearn 1.0 及以上版本新增的函数,直接返回均方根误差(RMSE),公式为:
    R M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2} RMSE=n1i=1∑n(yi−y^i)2
  • mean_squared_error(旧版) :sklearn 1.0 之前的版本只有这个函数,默认 squared=True,返回均方误差(MSE);当 squared=False 时,返回 RMSE。
  • partial :Python functools 模块中的函数(代码中省略了 from functools import partial,需确保已导入),作用是"固定函数的部分参数",这里把 mean_squared_errorsquared 参数固定为 False,相当于创建了一个"默认计算 RMSE 的新函数",并重新赋值给 mean_squared_error 变量。

2. 版本兼容背景

sklearn 版本 计算 RMSE 的方式
≥1.0 root_mean_squared_error(y_true, y_pred)
<1.0 mean_squared_error(y_true, y_pred, squared=False)

如果直接写死其中一种方式,会导致:

  • 用新版 sklearn 运行旧版写法:虽然能运行(sklearn 1.0+ 仍兼容 squared=False),但不够优雅;
  • 用旧版 sklearn 运行新版写法:会报 ImportError(找不到 root_mean_squared_error),代码直接崩溃。
相关推荐
少云清4 小时前
【金融项目实战】7_接口测试 _代码实现接口测试(重点)
python·金融项目实战
深蓝电商API4 小时前
爬虫IP封禁后的自动切换与检测机制
爬虫·python
m0_550024634 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
B站_计算机毕业设计之家5 小时前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏5 小时前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity5 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道5 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH15455891315 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7655 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子5 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python