资讯动态

scikit-learn 1.2 版本技术解读:set_output 全面落地、交互约束直方图提升与 API 迁移路线图

发布时间:2026/9/19 0:34:25 来源:尧图企业网站定制
scikit-learn 1.2 版本技术解读set_output 全面落地、交互约束直方图提升与 API 迁移路线图【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn导读本文基于当前仓库的官方变更记录 doc/whats_new/v1.2.rst系统梳理 scikit-learn 1.2 版本含 1.2.0 / 1.2.1 / 1.2.2 三个补丁级别引入的核心新特性、跨模块性能重构、API 弃用与行为变更并结合仓库源码定位关键实现。读完本文你将掌握如何用set_output让所有 Transformer 统一输出 pandas DataFrame、如何通过interaction_cst为直方图梯度提升树施加交互约束、newton-cholesky求解器的适用场景以及 1.2 版本中一批影响 1.4 迁移的弃用清单base_estimator→estimator、OneHotEncoder.sparse→sparse_output、PCA.n_features_→n_features_in_等。版本总览1.2 三个补丁级别的发布节奏1.2 主版本发布于2022 年 12 月随后在 2023 年 1 月与 3 月分别发布 1.2.1 与 1.2.2 两个维护版本。官方变更记录按以下结构组织Changed models用相同数据与参数重新 fit 时模型结果可能与上一版本不同的估算器清单通常源于建模逻辑修正或随机采样流程变化Changes impacting all modules影响所有模块的全局性变更如set_outputAPI 落地、成对距离底层例程重构等Changelog按模块sklearn.base、sklearn.cluster、sklearn.ensemble……字母序排列的条目并带|MajorFeature|、|Feature|、|Efficiency|、|Enhancement|、|Fix|、|API|标签。三大跨模块变更本版本的主角1.set_outputAPI 被所有 Transformer 采用SLEP018这是 1.2 最重大的 API 事件所有 Transformer 都支持set_output(transformpandas)包括含 Transformer 的元估算器如Pipeline与ColumnTransformer从而统一了特征变换输出的数据容器摆脱此前各变换器输出类型不一致的问题。它由 SLEP018scikit-learn Enhancement Proposals规范支撑set_output的核心目标是让用户能以transform_output全局配置或单估算器局部配置两种方式控制输出类型。实践上你可以用两种方式启用# 方式一单估算器局部启用 from sklearn.preprocessing import StandardScaler scaler StandardScaler().set_output(transformpandas) X_out scaler.fit_transform(X) # 返回 pandas DataFrame保留列名 # 方式二全局配置sklearn.get_config/set_config import sklearn sklearn.set_config(transform_outputpandas)该能力在 1.2.2 中继续打磨当set_output(transformpandas)且transform的输出本身已是 DataFrame 时TransformerMixin会保留原有索引见 sklearn/base.py 中TransformerMixin的实现ColumnTransformer也修复了在 pandas 输出模式下空列选择的问题。1.2.1 还修复了TransformerMixin仅在类自身定义transform时才包装该方法的行为。2. 成对距离低层例程重构float32 稠密数据的性能飞跃1.2 重构了稠密 float32 数据集上成对距离归约的低层例程受益者包括KNeighborsClassifier/Regressor、RadiusNeighborsClassifier/Regressor、LocalOutlierFactor、NearestNeighbors、Isomap、TSNE、AffinityPropagation、Birch、MeanShift、OPTICS、SpectralClustering、LabelPropagation、LabelSpreading、mutual_info_regression、trustworthiness等一大批估算器与函数。官方记录给出的量化结果是NearestNeighbors.kneighbors与radius_neighbors在笔记本上分别可提速×20 与 ×5且这两种实现现在适合多核机器可处理百万级样本的数据集PR #23865。同时1.2 为所有距离度量与 float32/float64 数据集补充/优化了稠密-稀疏数据集混合组合的支持涉及pairwise_distances_argmin(_min)及上表大部分邻域/流形/聚类估算器PR #23604、#23585、#24556。3. 有限性检查NaN/Inf 检测提速所有估算器中的有限性检查NaN 与无穷值检测在 1.2 中通过两点获得显著加速其一对 float32 数据利用 NumPy 的 SIMD 优化原语PR #23446其二采用首遍命中即停stop-on-first second-pass的更高效算法PR #23197。这两项是纯粹的底层性能优化不影响模型行为但会整体降低数据校验开销。核心新特性逐个击破HistGradientBoosting 新增交互约束interaction_cstHistGradientBoostingClassifier与HistGradientBoostingRegressor在 1.2 中新增interaction_cst参数用于限制树分裂时允许的特征交互组合PR #21020并且施加约束的同时还能让 fit 更快PR #24856。从源码看该参数在 sklearn/ensemble/_hist_gradient_boosting/gradient_boosting.py 中由_check_interaction_cst校验与规范化None默认不限制任何交互no_interactions等价于每个特征单独成组[[i] for i in range(n_features)]禁止一切交互pairwise等价于itertools.combinations(range(n_features), 2)仅允许两两交互序列形式如interaction_cst[{0, 1}]表示特征 0 与 1 可交互其余特征2、3、4自成一组且不可交互——官方 docstring 明确指出缺失的特征会自动归入独立组。from sklearn.ensemble import HistGradientBoostingRegressor # 禁止任何特征交互的单调可加模型 hgb HistGradientBoostingRegressor(interaction_cstno_interactions) # 只允许两两交互 hgb HistGradientBoostingRegressor(interaction_cstpairwise) # 自定义分组特征 0 与 1 可交互其余特征互不交互 hgb HistGradientBoostingRegressor(interaction_cst[{0, 1}])此外 1.2 还增强了直方图提升相关的配套能力HistGradientBoostingClassifier新增class_weight参数PR #22014monotonic_cst除了数组形式新增字典形式键为特征名值为-1/0/1categorical_features现在可以直接传特征名修复了在负值编码类别上预测报错的问题视为 missing category 处理。GLM 与 Logistic 家族新增newton-cholesky二阶求解器LogisticRegression、LogisticRegressionCV、GammaRegressor、PoissonRegressor、TweedieRegressor在 1.2 中新增solvernewton-cholesky——一个利用Hessian 矩阵 Cholesky 分解的二阶牛顿优化例程PR #24637、#24767。在n_samples n_features样本远多于特征且特征含 one-hot 编码的稀疏类别级时官方记录观察它比lbfgs收敛更快且精度更高。从 sklearn/linear_model/_logistic.py 可见它已列入LogisticRegression的 solver 选项集合但注意该求解器只支持 L2 罚项l1_ratio0当前版本中不支持多分类多类别。同属 GLM 家族的改进GammaRegressor/PoissonRegressor/TweedieRegressor配合 lbfgs 求解器在tol极小值下可达更高精度且verbose现在能正确传递到 L-BFGS-BPR #23619。同时Ridge/RidgeClassifier/ridge_regression的tol默认值从1e-3改为1e-4PR #24465精度要求更严但可能带来略微不同的求解路径属于 Changed models 范畴。偏依赖图支持分类特征partial_dependence与PartialDependenceDisplay在 1.2 中扩展为原生支持分类特征PR #18298。此前分类特征需要自行数值编码才能绘制 PDP/ICE现在可以更直观地展示类别特征的偏依赖效应。1.2.2 进一步修复了混合类型类别如str类别与np.nan缺失值并存导致numpy.unique无法排序时抛出更明确错误信息的问题。评估指标与可视化新工具1.2 在sklearn.metrics中新增了一批实用工具class_likelihood_ratios基于二分类混淆矩阵计算阳性/阴性似然比PLR/NLR用于评估诊断测试的判别能力PR #22518实现在 sklearn/metrics/_classification.pyPredictionErrorDisplay可视化残差 vs 预测值与实际值 vs 预测值定性评估回归器行为可通过类方法from_estimator/from_predictions创建PR #18020实现在 sklearn/metrics/_plot/regression.pyConfusionMatrixDisplay.from_estimator/from_predictions/plot新增text_kw参数透传给 matplotlib 的text函数便于自定义混淆矩阵中的文字样式PR #24051roc_auc_score支持 One-vs-Rest 多分类场景下的averagemicro微平均PR #24338LearningCurveDisplaysklearn.model_selection便捷绘制learning_curve结果的展示类PR #24084。log_loss的行为也有调整eps新增auto选项默认值从1e-15改为auto即按y_pred的 dtype 取np.finfo(y_pred.dtype).eps同时eps0时边界预测0 或 1现在返回 0 或np.inf而非nan并接受整数输入PR #24354、#24365。朴素贝叶斯predict_joint_log_proba与force_alpha所有朴素贝叶斯分类器GaussianNB等新增predict_joint_log_proba方法返回每个样本的联合对数概率PR #23683。同时BernoulliNB、ComplementNB、CategoricalNB、MultinomialNB新增force_alpha参数PR #16747 等允许用户将平滑系数alpha设为 ≥0 的极小值而不被内部强制提升到1e-10。源码中 sklearn/naive_bayes.py 的逻辑是当计算出的最小可行 alpha 低于下界且force_alphaFalse时给出提示而force_alphaTrue本版本默认值则保留用户设置的 alpha。因此alpha0不做平滑在 1.2 中真正可用。fetch_openml新增parser参数fetch_openml新增parser参数PR #21938parserpandas使用 CPU 与内存高效的pandas.read_csv解析稠密 ARFF 文件parserliac-arff使用旧版 LIAC 解析器parserauto时稠密数据用 pandas、稀疏数据用 liac-arff。1.2 中默认仍为liac-arff计划在 1.4 改为auto。1.2.1 顺带修复了 pandas 解析器对引号/反斜杠转义字符处理以及分隔符后前导空格处理ARFF 规范要求忽略前导空格的问题。其他值得关注的新特性SparsePCA/MiniBatchSparsePCA新增inverse_transformFastICA新增whiten_solver参数svd/eigh当特征数大于样本数时eigh可能更快更省内存MDS新增normalize参数启用归一化压力normalized stressnormalized_stress参数新增auto选项metricFalse时启用KernelDensity带宽参数支持 Scott 与 Silverman 估计方法RBFSampler的gamma新增scale选项RBFSampler/SkewedChi2Sampler/Birch/Isomap/LocalOutlierFactor/LatentDirichletAllocation等保留 float32 dtypeFeatureUnion新增named_transformers属性按名称访问 transformer且get_feature_names_out支持含passthrough成员KMeans/MiniBatchKMeans的n_init新增auto选项当initk-means时只执行一次随机初始化以提升效率默认值计划在 1.4 改为autoKMeans(algorithmlloyd)更快且内存占用更少SimpleImputer/KNNImputer/IterativeImputer新增keep_empty_features参数防止全缺失列在变换时被移除CalibratedClassifierCV/Bagging*/AdaBoost*参数重命名见下文弃用清单SpectralClustering/SpectralEmbedding等新增/传播eigen_tol参数含auto选项1.3 起默认值由 0 改为auto。API 弃用与迁移路线图1.2 → 1.41.2 集中引入了一批将在 1.4 移除的弃用项提前规划迁移可避免升级冲击。按模块整理弃用内容替代方案移除版本CalibratedClassifierCV(base_estimator...)estimator...1.4BaggingClassifier/Regressor、AdaBoostClassifier/Regressor的base_estimatorestimator1.4base_estimator_属性Bagging、AdaBoost、RandomForest、ExtraTrees、RandomTreesEmbedding、IsolationForestestimator_1.4OneHotEncoder(sparse...)sparse_output1.4PCA.n_features_n_features_in_1.4LogisticRegression(penaltynone)字符串形式使用None1.4AgglomerativeClustering(affinity...)metric1.4metrics.pairwise.manhattan_distances(sum_over_features...)—1.4utils.extmath.density的额外关键字参数—1.4QuantileRegressor(solverinterior-point)默认值默认改为highs1.4MiniBatchSparsePCA(n_iter...)max_iter/tol/max_no_improvement1.3utils.fixes.delayed1.2.1 起utils.parallel.delayedutils.parallel.Parallel1.5需要说明的是base_estimator与base_estimator_虽然在 1.2 中已弃用但 1.2.1/1.2.2 修复版仍会在用户继续使用旧前缀时发出弃用警告CalibratedClassifierCV、AdaBoost*、Bagging*以平滑引导用户迁移。另外两个会影响结果一致性的变更列入 Changed modelsSparsePCA与FastICA的components_符号现在确定化此前不同运行可能符号翻转符号是 ICA/PCA 类方法的固有歧义1.2 起符号在给定数据下固定重跑结果可复现SGDClassifier/SGDRegressor的早停条件修正旧条件未区分训练集与验证集存在错误容忍度被过度放大的效应PR #23798GridSearchCV/RandomizedSearchCV中 NaN 得分的排名统一设为最大可能排名而非此前 scipy ≥1.10 下的np.iinfo(np.int32).minHalvingGridSearchCV/HalvingRandomSearchCV同理。1.2.1 与 1.2.2 的关键修复要点两个维护版本修复了大量影响日常使用的缺陷值得关注的包括pandas 兼容性TSNE在输出类型设为 pandas 时正常工作MLPClassifier/MLPRegressor在带特征名数据上 fit 不再告警FunctionTransformer.inverse_transform正确支持全数值 DataFramecheck_inverseTrue时IsotonicRegression.predict在全局配置transform_outputpandas时不再返回 DataFrame1.2.2支持 pandasInt64dtype 的y用于分类/回归1.2.1稀疏与只读数据RandomForest*、ExtraTrees*、DecisionTree*、ExtraTree*支持稀疏只读数据集DictionaryLearning尤其fit_algorithmcd配合 memory-mapped 大数据集更好支持只读 NumPy 数组任务并行配置传播修复n_jobs 1时 joblib 辅助线程读取空线程局部配置、导致全局配置被忽略的 bug并由此引出utils.parallel.Parallel/utils.parallel.delayed1.2.1 起替代utils.fixes.delayed回归修复SequentialFeatureSelector恢复接受负tol1.2.2决策树族恢复在min_samples_split1时抛错的行为1.2.2 修复了 1.2 引入的回归SGDClassifier/SGDRegressor修复verbose0时不可用的回归BaseEstimator.__getstate__修复 Python 3.11 下部分估算器无法 pickle 的问题编码器细节OneHotEncoder.drop_idx_在存在 infrequent categories 时正确引用categories_中被丢弃的类别OrdinalEncoder支持encoded_missing_value/unknown_value取类别基数训练数据含缺失时LabelEncoder.transform正确编码 NaNcross_validate多指标评分部分 scorer 失败时未失败的 scorer 返回正常得分而非error_scoreFeatureHasher对字符串列表输入抛出信息明确的错误。兼容性注意事项与升级建议升级后若发现模型结果与 1.1 不同优先对照上文 Changed models 清单——符号确定化SparsePCA/FastICA、早停条件SGD、tol默认值Ridge 族、eps默认值log_loss均属预期变化若在 1.1 中使用了base_estimator*参数前缀或sparse、n_iter等旧参数升级到 1.2 后应尽快改用新名称并预留 1.4 前的迁移窗口期望set_output(transformpandas)生效时确认目标估算器确实实现了set_output1.2 起全部 Transformer 及Pipeline/ColumnTransformer均已支持并留意 1.2.1/1.2.2 针对 DataFrame 索引保持、空列选择的修复追求大规模 float32 邻域计算性能的读者可重点测试 1.2 的成对距离重构带来的kneighbors/radius_neighbors提速并配合混合稠密-稀疏数据支持使用若需了解各变更的 PR 细节可查阅 doc/whats_new/v1.1.rst上一版本基线与 doc/whats_new/v1.3.rst下一版本衔接如n_initauto、eigen_tolauto默认化完整变更文档汇总见 doc/whats_new.rst。总结scikit-learn 1.2 是一次统一与提速并重的版本set_output让 pandas 输出成为一等公民成对距离例程重构与有限性检查优化带来全局性性能收益interaction_cst、newton-cholesky、class_likelihood_ratios、PredictionErrorDisplay、LearningCurveDisplay等新特性显著扩充了梯度提升、广义线性模型与模型评估的武器库而一批指向 1.4 的弃用项则为 API 长期演进划定了清晰路线。对升级用户而言重点关注本文 Changed models 与弃用清单两张表即可平稳完成迁移并充分享受 1.2 的能力提升。【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价