尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

scikit-learn 0.22 版本发布全解析:新特性、API 变更与迁移指南

scikit-learn 0.22 版本发布全解析:新特性、API 变更与迁移指南 scikit-learn 0.22 版本发布全解析新特性、API 变更与迁移指南【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn本文以 doc/whats_new/v0.22.rst 为核心主体系统梳理 scikit-learn 0.22.02019 年 12 月 3 日、0.22.12020 年 1 月 2 日与 0.22.2.post12020 年 3 月 3 日三个版本的技术变更逐一对照当前仓库源码验证新特性KNNImputer、CategoricalNB、Stacking 集成、permutation importance 等的实现细节并给出从 0.21 升级到 0.22 的完整迁移清单。读完本文你将掌握 0.22 引入的全部新 API、理解废弃机制与警告体系的变化并能据此规划升级路径、排查行为差异。一、版本背景与发布节奏0.22 系列是 scikit-learn 在 2019 年底到 2020 年初的稳定版本线共包含三个发布版本发布日期定位0.22.02019 年 12 月 3 日主版本新特性、API 清理、行为变更0.22.12020 年 1 月 2 日修复版解决 0.22.0 的打包问题并附带若干 bug 修复0.22.2.post12020 年 3 月 3 日打包修复仅修复源码发行包的打包问题包内容与 0.22.2 的 wheel 完全一致官方为 0.22.0 的亮点提供了配套的可执行示例 plot_release_highlights_0_22_0.py可一键复现该版本的核心新功能。二、0.22.0 顶层变更API 规范化与警告体系重构2.1 公共 API 的明确边界0.22 起scikit-learn 正式区分公共 API与私有 API公共 API在 API Reference 中有文档且导入路径不含前导下划线。例如sklearn.pipeline.make_pipeline是公共的而sklearn.pipeline._name_estimators是私有的私有 API不公开文档化不享受废弃周期deprecation cycle保障用户不应依赖其稳定性公共 API 的任何变更都需经过两个次要版本的废弃周期。在 0.22 之前部分本应私有的工具却以事实公共无前导下划线的形式存在。0.22 将它们正式收归私有并清理了公共 API 空间同时弃用了从子模块直接导入的做法。典型变化是birch.py被重命名为_birch.py应使用from sklearn.cluster import Birch而非from sklearn.cluster.birch import Birch。2.2 废弃警告从 DeprecationWarning 切换为 FutureWarning这是对使用者影响最深的一项变更旧行为废弃功能触发DeprecationWarning。由于 Python 默认不显示该类警告scikit-learn 曾不得不挂载自定义警告过滤器强制显示这经常与用户自定义的警告过滤器相互干扰新行为从 0.22 起废弃功能统一触发FutureWarning。FutureWarning在 Python 中默认总是显示因此 scikit-learn 移除了自定义过滤器不再干扰用户设置。升级后若你在代码中看到FutureWarning应立即将其视为未来版本将破坏性变更的信号并着手迁移。2.3 变更模型清单同一数据可能产出不同模型0.22 对以下估计器做了建模逻辑或随机采样流程的修正用相同数据与参数重新 fit 时其结果可能与 0.21 不同cluster.KMeansn_jobs1时decomposition.SparseCoder、DictionaryLearning、MiniBatchDictionaryLearningdecomposition.SparseCoder的algorithmlasso_larsdecomposition.SparsePCAnormalize_components因废弃不再生效ensemble.HistGradientBoostingClassifier/HistGradientBoostingRegressor修复 新特性 增强impute.IterativeImputer当X存在完全无缺失值的特征时linear_model.RidgeX为稀疏矩阵时model_selection.StratifiedKFold以及所有使用cvint的分类器交叉验证cross_decomposition.CCA当 scipy 1.3 时。2.4 其它全局性 API 变更base.BaseEstimator.get_params自 0.24 起对构造器中声明但未存为实例属性的参数将抛出AttributeError而非返回Noneduck array 处理策略scikit-learn 现在将任何实现 duck array 协议__array__的输入统一转换为 numpy 数组不再依赖__array_function__参见 NEP 18非拟合估计器的错误信息统一用check_is_fitted替换手工检查未 fit 就调用predict/transform时统一抛NotFittedError。三、新估计器与新函数MajorFeature 详解3.1 impute.KNNImputer基于 k 近邻的多变量缺失值填充0.22 引入了impute.KNNImputer用 k 近邻均值填充缺失值。其原理是每个样本的缺失值由其n_neighbors个近邻的对应特征均值填充样本间的距离仅基于双方都未缺失的特征计算即nan_euclidean距离。完整参数见 sklearn/impute/_knn.pymissing_values默认np.nan缺失值占位符所有该取值都会被填充n_neighbors默认 5用于填充的近邻样本数weights默认uniformuniform为等权distance按距离倒数加权也支持自定义 callablemetric默认nan_euclidean支持该内置度量或符合func_metric(x, y, *, missing_valuesnp.nan)签名的自定义 callablecopy默认True是否复制输入数据add_indicator默认False若为Truetransform 输出会拼接MissingIndicator的缺失指示特征。一个可直接运行的最小示例import numpy as np from sklearn.impute import KNNImputer X [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]] imputer KNNImputer(n_neighbors2) imputer.fit_transform(X)配套的metrics.pairwise.nan_euclidean_distances也在本版本加入见 sklearn/metrics/pairwise.py用于在存在缺失值的情况下计算欧氏距离是 KNNImputer 的底层距离基础。测试覆盖见 sklearn/impute/tests/test_knn.py。到 0.22.2.post1KNNImputer 又通过分块chunking计算两两距离降低了渐进内存占用。3.2 naive_bayes.CategoricalNB类别型朴素贝叶斯naive_bayes.CategoricalNB专为类别分布categorical distribution的离散特征设计。实现位于 sklearn/naive_bayes.py核心参数alpha默认 1.0加法Laplace/Lidstone平滑系数fit_prior默认True是否学习类先验False时使用均匀先验class_prior默认None手动指定类先验min_categories默认None每个特征的最小类别数可为整数或数组默认从训练数据自动推断。拟合后可通过category_count_每个特征在各类别下的样本计数、class_count_、class_log_prior_等属性观察学习结果。3.3 ensemble.StackingClassifier / StackingRegressor模型堆叠0.22 正式加入了堆叠集成Stacking——用最终分类器/回归器组合一组基预测器的输出。实现见 sklearn/ensemble/_stacking.py其中StackingClassifier第 422 行与StackingRegressor第 841 行共享_BaseStacking基类。使用要点基估计器与最终估计器必须全部是分类器或全部是回归器否则抛出统一格式的错误named_estimators_属性会正确反映被drop的估计器堆叠/投票类估计器现在默认通过check_estimator校验修复了predict时因底层估计器输出维度不一致而失败的问题。3.4 neighbors.KNeighborsTransformer / RadiusNeighborsTransformer邻域图变换器这两个变换器把输入数据集转换为稀疏邻域图提供对近邻计算的精细控制并方便在 Pipeline 中缓存多步近邻计算。0.22 同时让KNeighborsClassifier、KNeighborsRegressor、RadiusNeighborsClassifier、RadiusNeighborsRegressor、LocalOutlierFactor、SpectralClustering、Isomap、TSNE、SpectralEmbedding等接受预计算的稀疏邻域图作为输入。3.5 inspection.permutation_importance模型无关的置换重要性inspection.permutation_importance实现见 sklearn/inspection/_permutation_importance.py用于度量任意已训练模型中每个特征对给定评分函数的重要性。算法流程先在数据集上评估基线指标再逐列打乱特征重新评估重要性定义为基线指标与打乱后指标的差值。签名要点estimator必须为已 fit 的估计器X/y用于计算重要性的数据集与标签无监督可传Nonescoring支持字符串、callable、列表、元组或字典传多个评分时内部会复用预测结果比分别调用更高效n_repeats默认 5每个特征的打乱次数n_jobs、random_state、sample_weight、max_samples并行度、随机性与采样控制。到 0.22.1置换重要性在给定random_state时n_jobs1与n_jobs1含共享内存与进程隔离后端会返回一致结果并修复了大 DataFrame 上n_jobs1时的只读错误。四、可视化 APIplot_* 家族全面登场0.22 引入了一套新的可视化 API覆盖 ROC 曲线、PR 曲线与混淆矩阵metrics.plot_roc_curve绘制 ROC 曲线metrics.plot_precision_recall_curve绘制精确率-召回率曲线metrics.plot_confusion_matrix绘制混淆矩阵。配套的inspection.plot_partial_dependence也扩展支持了这套可视化 API。0.22.1 修复了其中若干问题plot_confusion_matrix在normalize非法时抛出错误此前静默不归一化、标签颜色自动选择高对比度、正确透传values_format0.22.2.post1 则修复了plot_roc_curve/plot_precision_recall_curve中估计器名称被误传给 Display 对象导致多次调用plot()时绘图不一致的 bug。五、新增参数与指标速查5.1 分类/回归指标新增zero_division参数precision_score、recall_score、f1_score、fbeta_score、precision_recall_fscore_support、classification_report均可指定未定义指标时的返回值新增排序指标metrics.dcg_score、metrics.ndcg_score折损累计增益及其归一化形式metrics.roc_auc_score支持多分类新增评分器roc_auc_ovr、roc_auc_ovo、roc_auc_ovr_weighted、roc_auc_ovo_weighted后两者可直接用作模型选择的scoring新增 Tweedie 偏差族metrics.mean_tweedie_deviance、mean_poisson_deviancepower1、mean_gamma_deviancepower2metrics.mean_squared_error新增squared参数传False返回 RMSEmetrics.fbeta_score的beta支持 0 与float(inf)metrics.confusion_matrix新增normalize参数可按列、行或整体归一化多标签指标支持列表的列表作为输入。5.2 估计器新参数model_selection.learning_curve新增return_times返回拟合/打分耗时以绘制可扩展性曲线model_selection.RandomizedSearchCV支持参数分布列表svm.SVC/svm.NuSVC新增break_ties参数在decision_function_shapeovr且类别数 2 时按决策函数置信度打破平局linear_model.BayesianRidge新增alpha_init、lambda_init设置最大化过程的初值neural_network.MLPRegressor/MLPClassifier新增max_fun控制最大函数评估次数manifold.TSNE暴露n_jobs参数多核计算邻域图对metricprecomputed或methodexact的欧氏距离无影响ensemble随机森林家族RandomForestClassifier、RandomForestRegressor、ExtraTreesClassifier、ExtraTreesRegressor新增max_samples可将 bootstrap 样本大小限制为小于数据集规模。5.3 缺失值处理相关impute.IterativeImputer新增skip_compute标志默认False为True时在 fit 阶段跳过无缺失值特征的计算并修复了单特征场景与imputation_order为ascending/descending时填充顺序颠倒的 bugdatasets.fetch_openmlas_frameTrue时支持 pandas 异构数据返回的 Bunch 中新增target_names。六、树模型与梯度提升ccp_alpha 与 HistGradientBoosting 增强6.1 最小代价复杂度剪枝ccp_alphaccp_alpha将最小代价复杂度剪枝Minimal Cost-Complexity Pruning引入DecisionTreeClassifier、DecisionTreeRegressor、ExtraTreeClassifier、ExtraTreeRegressor以及RandomForest、ExtraTrees、GradientBoosting系列估计器是控制树复杂度的新手段。6.2 HistGradientBoosting 系列的大幅增强原生支持缺失值密集数据中的缺失值与无穷值在训练和预测时均被原生支持warm_start参数支持热启动可继续上次训练partial_dependence的recursion快速方法inspection.partial_dependence与plot_partial_dependence对两类估计器均支持分类器在类别分层的子样本上监控训练损失/分数保持类别平衡HistGradientBoostingRegressor支持least_absolute_deviation损失LAD训练集与验证集分别分箱避免数据泄漏修复了字符串标签下早停失效、二分类任务传入categorical_crossentropy损失未报错的问题注意0.21 生成的 pickle 模型在 0.22 中无法加载。此外GradientBoostingClassifier/GradientBoostingRegressor/DecisionTreeClassifier/DecisionTreeRegressor的presort参数被废弃且不再生效官方建议改用 HistGradientBoosting 系列。七、0.22.1 与 0.22.2.post1 的修复清单7.1 0.22.12020-01-02关键修复cluster.KMeansalgorithmelkan与默认full使用相同的停止准则inspection.permutation_importancen_jobs1与n_jobs1结果一致见前文metrics.plot_confusion_matrix非法normalize报错、标签对比色修复、正确透传values_formatmetrics.classification_report不再忽略zero_divisionmodel_selection.GridSearchCV/RandomizedSearchCV重新接受fit_params中的标量值0.22 曾破坏向后兼容naive_bayes.BaseNB._check_X移除abstractmethod装饰器避免破坏继承该已废弃公共基类的下游项目preprocessing.QuantileTransformer保证quantiles_完全非递减排序semi_supervised.LabelPropagation/LabelSpreading允许 callable 核函数返回稀疏权重矩阵utils.check_array正确将含布尔列的 pandas DataFrame 转为浮点utils.check_is_fitted恢复显式attributes参数未提供时仅将以单下划线结尾且不以双下划线开头的属性作为已拟合标记all_or_any参数也不再废弃——即恢复到 0.21 的行为。7.2 0.22.2.post12020-03-03关键修复impute.KNNImputer分块计算两两距离降低渐进内存占用metrics.plot_roc_curve/plot_precision_recall_curve修复估计器名称误传给 Display 对象的问题neighbors.NearestNeighbors.radius_neighbors修复数组列表被转换成 2D object 数组而非含 NumPy 数组的 1D 数组的 bug。八、对开发者的影响估计器检查Estimator Checks收紧0.22 面向库开发者收紧了一系列约定参见 sklearn/utils/estimator_checks.py未 fit 就predict/transform必须抛NotFittedError此前AttributeError/ValueError亦可接受支持binary_onlyTrue标签的仅二分类估计器估计器应把X、y、sample_weights转为numpy.ndarray且不得对原始输入类型调用__array_function__requires_positive_X标签被check_estimator使用用于校验 X 含负值时抛出恰当错误新增 pairwise 估计器对非方阵输入报错的检查以及两个多输出估计器测试check_classifier_multioutput、check_regressor_multioutput估计器标签解析遵循常规 MRO。配套工具同步升级utils.estimator_checks.check_estimator支持generate_onlyTrue让所有检查独立运行并汇总失败项新增 pytest 装饰器utils.estimator_checks.parametrize_with_checks可对一组估计器参数化执行检查utils.fixes.loguniform实现对数均匀随机变量如loguniform(1, 100)中1、10、100等概率出现可直接用于RandomizedSearchCV。九、从 0.21 升级到 0.22 的迁移检查清单替换子模块导入from sklearn.cluster.birch import Birch→from sklearn.cluster import Birch其余_*.py私有模块同理关注FutureWarning所有废弃信号统一为FutureWarning出现即着手迁移重新训练并对比结果KMeans、Ridge稀疏、StratifiedKFold、CCA、SparseCoder/DictionaryLearning 等模型的输出可能与 0.21 不同见 2.3不要跨版本加载 pickle0.21 的 HistGradientBoosting pickle 在 0.22 不可用替换废弃参数树的presort已失效DummyClassifier的默认strategystratified将在 0.24 改为priorscoringbrier_score_loss改用neg_brier_scoreFeatureUnion中None变换器改用drop对照新检查约定如果你是估计器作者请按第八节更新实现并通过check_estimator/parametrize_with_checks验证。十、主要代码与文档入口版本发布说明doc/whats_new/v0.22.rst0.22 亮点示例plot_release_highlights_0_22_0.pyKNNImputer 实现与测试sklearn/impute/_knn.py、sklearn/impute/tests/test_knn.pyCategoricalNB 实现sklearn/naive_bayes.pyStacking 集成实现sklearn/ensemble/_stacking.py置换重要性实现sklearn/inspection/_permutation_importance.py估计器检查工具sklearn/utils/estimator_checks.py【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表