scikit-learn 1.1+ 版本起,sklearn.cross_validation 已彻底移除,须改用 sklearn.model_selection;sklearn.neighbors.dist_metrics 被删除,应改用 pairwise_distances 或 NearestNeighbors 的 metric 参数;load_svmlight_file 的 dtype 和 zero_based 行为更严格,需显式指定。

scikit-learn 1.1 版本起,多个旧模块和函数已正式弃用或移除,继续使用会触发 DeprecationWarning,部分在 1.2+ 中已彻底不可用。关键不是“有没有警告”,而是“哪些调用路径必须改”——否则代码会在升级后直接报错。
sklearn.cross_validation 已完全不可用
该模块在 0.18 版本弃用,1.0 版本起彻底删除。任何残留的 from sklearn.cross_validation import train_test_split 或 cross_val_score 都会抛出 ModuleNotFoundError。
- 必须改为从
sklearn.model_selection导入:train_test_split、cross_val_score、GridSearchCV、StratifiedKFold等全部在此模块下 - 参数行为基本一致,但注意
cross_val_score的scoring默认值在新版本中更严格(如对分类器默认用'accuracy',不再回退到旧逻辑) - 旧写法
from sklearn import cross_validation会立即失败,不能靠 try/except 混过去
sklearn.neighbors.dist_metrics 被移除
sklearn.neighbors.dist_metrics 在 0.22 弃用,1.0 版本中已删除。如果你手动导入并调用 DistanceMetric.get_metric 或直接构造距离类(如 dist_metrics.MinkowskiDistance),会触发 ImportError。
- 替代方案是统一使用
sklearn.metrics.pairwise_distances或sklearn.neighbors.NearestNeighbors(metric=...)的metric参数传字符串(如'euclidean'、'manhattan') - 自定义距离函数仍可用,但必须是可调用对象,不能依赖
dist_metrics内部类 - 注意:某些第三方库(如老版本
umap-learn)若硬编码引用该模块,需同步升级它们
load_svmlight_file 等数据加载器的 dtype 行为变更
load_svmlight_file 和 load_svmlight_files 仍在,但 1.1+ 对 dtype 参数更严格:传入 float 或 np.float64 可以,但传 np.float(别名)或非整数类型字面量会触发 DeprecationWarning,未来将报错。
立即学习“Python免费学习笔记(深入)”;
- 显式指定
dtype=np.float64或dtype="float64",避免用dtype=float -
zero_based参数默认值已从None改为True,若原始数据含 1-based 索引,必须显式设zero_based=False - 返回的
X矩阵默认是 CSR 稀疏格式,不再自动转稠密;如需数组,得手动调用.toarray()
最容易被忽略的是隐式依赖:比如某段封装好的工具函数里悄悄 import 了 cross_validation,或者 notebook 里 copy-paste 的旧示例没更新。这类问题不会在 import 时报错,而是在运行时崩——尤其在 CI 环境升级 sklearn 后突然失败。建议用 python -W error::DeprecationWarning your_script.py 主动暴露所有弃用路径。


















