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

资讯详情

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

scikit-learn 1.1 版本发布说明深度解析:新特性、性能提升与迁移指南

scikit-learn 1.1 版本发布说明深度解析:新特性、性能提升与迁移指南 scikit-learn 1.1 版本发布说明深度解析新特性、性能提升与迁移指南【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn本文基于 scikit-learn 仓库的官方发布说明 doc/whats_new/v1.1.rst 整理撰写。scikit-learn 1.12022 年 5 月发布1.1.1/1.1.2/1.1.3 为后续补丁版本是一次重要的功能迭代引入了BisectingKMeans、MiniBatchNMF、分位数梯度提升回归等全新算法系统性重构了成对距离约简的性能底座统一了loss参数命名并将get_feature_names_out扩展到全部转换器。阅读本文后你将全面掌握 1.1 版本新增的 API、模型行为变化尤其是KMeans与随机森林默认参数的调整、性能收益的来源以及从 1.0 升级时需要注意的兼容性事项。版本总览与时间线scikit-learn 1.1 系列共包含四个版本官方发布说明按版本号依次记录版本发布时间性质1.1.02022 年 5 月主版本包含新特性、性能优化与 API 变更1.1.12022 年 5 月缺陷修复版本1.1.22022 年 8 月缺陷修复版本1.1.32022 年 10 月仅针对 SciPy 1.9.2 兼容性的修复版本最低依赖要求1.1.0根据发布说明1.1.0 的最低依赖为Python 3.8NumPy 1.17.3SciPy 1.3.2可选最低依赖matplotlib 3.1.2安装方式如下pip install --upgrade scikit-learn # 或 conda install -c conda-forge scikit-learn1.1.3 的兼容性说明重要1.1.3 是纯粹的兼容性修复版本主要为适配SciPy 1.9.2的发布。值得注意的两点由于最新版 SciPy wheel 移除了msvcp140.dllscikit-learn 的 wheel 中将其重新打包进来PR #24631由于 SciPy 1.9.2 放弃了对 32 位 Windows 的支持1.1.3 起 scikit-learn 也终止了对 32 位 Windows Python 的支持Windows 用户应改用 64 位 Python同时本版本为 Python 3.11 构建了 wheelPR #24446。全新算法与核心新特性1. 层次式聚类新成员BisectingKMeans1.1.0 在sklearn.cluster模块引入了 BisectingKMeansPR #20031这是 K-Means 的一个变体采用**分裂式层次聚类divisive hierarchical clustering**策略与一次性生成全部质心的普通 K-Means 不同它基于前一次聚类结果逐步挑选并二分簇每次把一个簇分裂成两个新簇重复此过程直到达到目标簇数因此聚类天然带有层次结构源码中以_BisectingTree树结构保存簇节点与索引。关键参数源码 docstring 确认参数默认值说明n_clusters8最终簇数 / 质心数initrandom每次二分内部 K-Means 的初始化方式支持k-means、random或可调用对象二分恒为 2-way split故可调用对象始终以n_clusters2被调用bisecting_strategybiggest_inertia决定下一个被二分的簇按样本数最大或按 inertia 最大详见源码get_cluster_to_bisectn_init1每次二分时内部 K-Means 以不同质心种子运行的次数取 inertia 最优结果random_stateNone控制内部 K-Means 质心初始化的随机性示例来自 examples/release_highlights/plot_release_highlights_1_1_0.pyfrom sklearn.cluster import BisectingKMeans, KMeans from sklearn.datasets import make_blobs X, _ make_blobs(n_samples1000, centers2, random_state0) km KMeans(n_clusters5, random_state0, n_initauto).fit(X) bisect_km BisectingKMeans(n_clusters5, random_state0).fit(X)2. 大规模数据友好的在线 NMFMiniBatchNMFsklearn.decomposition模块新增 MiniBatchNMFPR #16948是非负矩阵分解NMF的在线小批量版本将数据划分为 mini-batches通过循环遍历小批量以在线方式优化 NMF 模型速度更快但精度略低于标准 NMF更适合大规模数据集实现了partial_fit方法可用于数据无法一次性载入内存或数据流式到达的在线学习场景源码sklearn/decomposition/_nmf.py中MiniBatchNMF.partial_fit。import numpy as np from sklearn.decomposition import MiniBatchNMF rng np.random.RandomState(0) n_samples, n_features, n_components 10, 10, 5 true_W rng.uniform(size(n_samples, n_components)) true_H rng.uniform(size(n_components, n_features)) X true_W true_H nmf MiniBatchNMF(n_componentsn_components, random_state0) for _ in range(10): nmf.partial_fit(X) # 在线式更新 W nmf.transform(X) H nmf.components_ X_reconstructed W H print(relative reconstruction error:, f{np.sum((X - X_reconstructed) ** 2) / np.sum(X**2):.5f})3. HistGradientBoostingRegressor 支持分位数回归1.1.0 为 HistGradientBoostingRegressor 新增lossquantile选项PR #21800、#20567通过新的quantile参数指定要估计的分位数水平底层使用 Pinball 损失pinball loss源码sklearn/ensemble/_hist_gradient_boosting/gradient_boosting.py中可见quantile: PinballLoss的注册以及quantile参数在 0~1 闭区间内的校验Interval(Real, 0, 1, closedboth)。import numpy as np from sklearn.ensemble import HistGradientBoostingRegressor rng np.random.RandomState(42) X_1d np.linspace(0, 10, num2000) X X_1d.reshape(-1, 1) y X_1d * np.cos(X_1d) rng.normal(scaleX_1d / 3) quantiles [0.95, 0.5, 0.05] hist_quantiles { fquantile{q:.2f}: HistGradientBoostingRegressor( lossquantile, quantileq, max_bins32, max_iter50 ).fit(X, y) for q in quantiles } # 对每个分位数模型分别预测即可绘制分位数回归曲线4. OneHotEncoder 支持合并低频类别OneHotEncoder 新增对低频类别归并的支持PR #16018通过min_frequency或max_categories启用min_frequencyint绝对频数阈值或 float按min_frequency * n_samples计算低于阈值的类别视为低频max_categories每个特征最多保留的类别数包含归并后的其他类别那一列归并后的低频类别会统一编码为一列可通过infrequent_categories_属性查看每个特征被归并的类别源码sklearn/preprocessing/_encoders.pyL270 起的infrequent_categories_属性实现。import numpy as np import pandas as pd from sklearn.preprocessing import OneHotEncoder X np.array( [[dog] * 5 [cat] * 20 [rabbit] * 10 [snake] * 3], dtypeobject, ).T enc OneHotEncoder(min_frequency6, sparse_outputFalse).fit(X) print(enc.infrequent_categories_) # dog、snake 被归并为低频类别 encoded enc.transform(np.array([[dog], [snake], [cat], [rabbit]])) print(pd.DataFrame(encoded, columnsenc.get_feature_names_out()))5. 新可视化工具DecisionBoundaryDisplaysklearn.inspection新增 DecisionBoundaryDisplay通过DecisionBoundaryDisplay.from_estimator即可一行绘制分类器决策边界PR #16061将原先散落在示例中的绘图逻辑收敛为官方 API。6. 新的回归指标D² 评分sklearn.metrics新增两个评分函数PR #22118实现在 sklearn/metrics/_regression.pymetrics.d2_pinball_score基于 Pinball 损失计算的 D² 回归评分metrics.d2_absolute_error_score基于绝对误差的 D² 评分是d2_pinball_score在固定分位数alpha0.5时的特例便于使用与发现。D² 评分是r2_score的推广可解释为被解释偏差的占比fraction of deviance explained。此外r2_score与explained_variance_score新增force_finite参数设为False时在完美预测或y_true恒定的场景下返回真实的非有限值而非默认的有限近似值1.0/0.0。7. get_feature_names_out 全面落地1.1.0 将get_feature_names_out扩展到了几乎所有转换器Transformer完成了 SLEP007 提议的实现。这使Pipeline能为更复杂的流水线构造输出特征名进而直接把特征名映射到线性模型系数上。涉及模块包括sklearn.clusterBirch、FeatureAgglomeration、KMeans、MiniBatchKMeanssklearn.compose修复ColumnTransformer在slice指定列时get_feature_names_out失效的问题PR #22775、#22913sklearn.cross_decompositionCCA、PLSSVD、PLSRegression、PLSCanonicalsklearn.decompositionDictionaryLearning、FactorAnalysis、FastICA、IncrementalPCA、KernelPCA、LatentDirichletAllocation、MiniBatchDictionaryLearning、MiniBatchSparsePCA、NMF、PCA、SparsePCA、TruncatedSVDsklearn.imputeSimpleImputer、KNNImputer、IterativeImputer、MissingIndicatorsklearn.preprocessingNormalizer、KernelCenterer、OrdinalEncoder、Binarizer、FunctionTransformer新增feature_names_out参数支持one-to-one或可调用对象。官方亮点示例展示了典型用法——把特征名与逻辑回归系数对齐from sklearn.compose import ColumnTransformer from sklearn.datasets import fetch_openml from sklearn.feature_selection import SelectKBest from sklearn.impute import SimpleImputer from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.preprocessing import OneHotEncoder, StandardScaler X, y fetch_openml(titanic, version1, as_frameTrue, return_X_yTrue, parserpandas) numeric_features [age, fare] numeric_transformer make_pipeline(SimpleImputer(strategymedian), StandardScaler()) categorical_features [embarked, pclass] preprocessor ColumnTransformer( [ (num, numeric_transformer, numeric_features), (cat, OneHotEncoder(handle_unknownignore, sparse_outputFalse), categorical_features), ], verbose_feature_names_outFalse, ) log_reg make_pipeline(preprocessor, SelectKBest(k7), LogisticRegression()) log_reg.fit(X, y) log_reg_input_features log_reg[:-1].get_feature_names_out() print(log_reg_input_features) # 与 log_reg[-1].coef_ 一一对应模型行为变化Changed Models升级后需重新拟合发布说明明确列出以下估计器在相同数据与参数下可能产生与上一版本不同的模型源于建模逻辑修复或随机采样过程变化。KMeans 默认算法切换为 LloydKMeans默认algorithm由auto等价于elkan改为lloydPR #21735。当前源码sklearn/cluster/_kmeans.py中KMeans.__init__的默认值即algorithmlloydLloyd 算法与 Elkan 算法收敛到相同解数值舍入误差范围内但 Lloyd内存占用低得多且在多数数据集上更快auto与full已被弃用作为lloyd的别名将在 1.3 中移除。树模型平均提速 15%拟合DecisionTreeClassifier/Regressor、RandomForestClassifier/Regressor、GradientBoostingClassifier/Regressor平均比上一版本快15%PR #22868原因是采用了新的排序算法寻找最佳分裂点。注意新旧排序算法均为不稳定的排序对平局准则值的处理方式不同因此模型可能略有差异。随机森林 / 极端随机树 max_features 默认值更名RandomForestRegressor与ExtraTreesRegressor的max_features默认值改为1.0RandomForestClassifier与ExtraTreesClassifier的默认值改为sqrtPR #20803官方说明拟合结果与之前完全一致只是默认值表述更易理解旧默认值auto被弃用将在 1.3 中移除。ExtraTreeClassifier/ExtraTreeRegressor也有相同的默认值调整PR #22476。loss 参数统一为 log_loss为避免命名混乱loss参数二项/多项偏差统一改用log_loss作为首选值旧名称仍有效、产出相同模型但已弃用并将在 1.3 移除估计器弃用的旧名称新默认值GradientBoostingClassifierdeviancelog_lossHistGradientBoostingClassifierauto、binary_crossentropy、categorical_crossentropylog_lossSGDClassifierloglog_loss其他行为变化SpectralClustering/SpectralEmbedding使用amg或lobpcg求解器时特征向量初始化改为从高斯分布采样替代原先 [0,1] 上的均匀分布提升求解器数值稳定性但可能得到不同模型f_regression/r_regression默认返回有限分数而非某些边角情形下的np.nan/np.inf若需要旧行为可设force_finiteFalse该参数同样新增于metrics.r2_score/explained_variance_scoreKBinsDiscretizer与calibration_curve分箱边界处理方式略有调整相同数据可能得到不同编码/曲线LinearDiscriminantAnalysis修正了方差缩放系数可能产生不同模型PR #15984、#22696SelectFromModelfit/partial_fit支持prefitTrue此时estimators_为estimator的深拷贝PR #23271Pandas DataFrame所有列均为非字符串如 MultiIndex时不再触发警告但feature_names_in_仅在列名全部为字符串时才被定义PR #22410。性能提升成对距离约简的重构1.1.0 重构了稠密 float64 数据集成对距离约简pairwise distance reductions的底层例程PR #21987、#22064、#22065、#22288、#22320在硬件可扩展性与加速比上均有明显改善。受益的估计器/函数包括metrics.pairwise_distances_argmin、metrics.pairwise_distances_argmin_mincluster.AffinityPropagation、Birch、MeanShift、OPTICS、SpectralClusteringfeature_selection.mutual_info_regressionneighbors.KNeighborsClassifier/Regressor、RadiusNeighborsClassifier/Regressor、LocalOutlierFactor、NearestNeighborsmanifold.Isomap、LocallyLinearEmbedding、TSNE、manifold.trustworthinesssemi_supervised.LabelPropagation、LabelSpreading官方给出的实测数据笔记本环境NearestNeighbors.kneighbors最高提速×20NearestNeighbors.radius_neighbors最高提速×5两个算法的新实现适配多核机器可用于数百万样本规模的数据集。与此同时损失函数计算被 Cython 重构显著加速了LogisticRegressionlbfgs/newton-cg多分类场景下目标改为标签编码而非 one-hot内存消耗同步下降、GammaRegressor、PoissonRegressor、TweedieRegressor。其他性能改进还包括RandomForest系列在warm_start多进程场景下更快PR #22106、chi2布尔数组加速PR #22235、IsolationForest跳过重复输入检查PR #23149、make_blobs生成数据时不再复制内存PR #22412。错误消息与开发体验改进1.1.0 在可诊断性上投入了大量工作NaN / 无穷值错误消息所有模型在输入含意外 NaN 或无穷值时错误消息现在包含输入名称X、y、sample_weight若在X中发现意外 NaN还会提示潜在的解决思路PR #21219。底层支持来自utils.check_array与utils.multiclass.type_of_target新增的input_name参数set_params 错误消息设置非法超参数时的报错更详尽PR #21542Jupyter 可复现性HTML 表示中移除随机唯一标识符只要单元格执行顺序一致notebook 即可复现PR #23098rich HTML 表示现已在 Jupyter notebook 中默认启用可通过sklearn.set_config(displaytext)关闭PR #22856utils.estimator_html_repr对嵌套 meta-estimator 的可视化也做了改进PR #21310参数校验时机统一大量估计器把参数校验从__init__迁移到fit如FastICA、FactorAnalysis、KernelPCA、KernelDensity、LabelBinarizer、TheilSenRegressor、SVC/SVR/NuSVC/NuSVR/OneClassSVM、GridSearchCV、HalvingGridSearchCV、Pipeline、FeatureUnion等遵循构造时不校验、拟合时校验的 API 规范。其余模块新功能速览sklearn.calibrationcalibration_curve新增pos_label指定正类标签PR #21032CalibrationDisplay同样支持pos_labelCalibratedClassifierCV.fit支持fit_params路由到base_estimatorPR #18170normalize参数弃用推荐传入分类器predict_proba的正类概率PR #23095。sklearn.clusterSpectralClustering与spectral_clustering新增cluster_qr嵌入空间聚类方法PR #21148AffinityPropagation在未完全收敛时也返回簇中心与标签并附带新警告PR #22217KMeans的init参数支持数组输入与 NumPy 字符串标量PR #22154。sklearn.datasetsload_files支持基于扩展名的忽略/白名单PR #19747make_swiss_roll新增hole参数返回 swiss-hole 数据集PR #21482load_diabetes新增scaled参数加载未缩放数据PR #16605fetch_openml新增n_retries与delay参数网络失败默认重试 3 次PR #21901make_sparse_coded_signal新增data_transposed显式指定矩阵形状默认值将在 1.3 变更为False。sklearn.decompositionPCA新增n_oversamples、power_iteration_normalizer参数TruncatedSVD同样新增这两个参数且允许algorithmrandomized时n_components n_featuresPR #21109、#21705、#22181MiniBatchDictionaryLearning/dict_learning_online重构新增max_iter、tol、max_no_improvement停止准则n_iter、iter_offset等内部参数弃用PR #18975FastICA支持np.float32且不静默升精度SparsePCA、MiniBatchSparsePCA、DictionaryLearning等保持 float32 dtypePR #22002、#22111、#22806FastICA的whiten默认值将在 1.3 由True等价arbitrary-variance变更为unit-variancePR #19490。sklearn.ensembleStackingClassifier/StackingRegressor支持cvprefit使用预拟合模型PR #16748RandomForestClassifier/ExtraTreesClassifier与DecisionTreeClassifier/ExtraTreeClassifier新增criterionlog_loss等价于entropyPR #23047RandomTreesEmbedding的get_feature_names_out同时包含树索引与叶子索引PR #21762GradientBoosting系列修复validation_fraction只接受浮点数PR #21632loss_属性弃用PR #23079HistGradientBoosting修复容器 cgroups 配额下的 CPU 过订阅问题PR #22566。sklearn.feature_selectionSequentialFeatureSelector新增n_features_to_selectauto自动模式依据tol停止默认值由None改为warn将在 1.3 变为autoPR #20145SelectFromModel.max_features支持传入可调用对象新增推断属性max_features_PR #22356f_regression/r_regression新增force_finite参数PR #17819。sklearn.inspectionPartialDependenceDisplay.from_estimator的kind支持字符串列表可逐特征交互指定绘图类型PR #19438PDP / 个体条件期望ICE支持中心化centered参数的 cICE / 中心化 PDPPR #18310。sklearn.linear_modelElasticNet/ElasticNetCV/Lasso/LassoCV支持稀疏输入的sample_weightPR #22808Ridgesolverlsqr支持稀疏输入 fit_interceptTruePR #22950RANSACRegressor参数base_estimator更名为estimator旧名弃用PR #22062RidgeClassifier支持多标签分类PR #19689LassoLarsIC暴露noise_variance参数并修正 AIC/BIC 计算PR #21481LinearRegression/Ridgesparse_cg、lbfgs在稀疏输入 样本权重下的coef_/intercept_计算得到修复PR #22891、#22899。sklearn.manifoldIsomap支持基于半径的邻居搜索radius参数PR #19794TSNE新增metric_params向距离度量传递额外参数PR #21805trustworthiness在n_neighbours n_samples / 2时报错以确保函数支持范围正确PR #18832。sklearn.metricsroc_auc_score多分类multiclassovr时支持averageNone返回逐类别分数PR #19158ConfusionMatrixDisplay三个方法新增im_kw参数透传给matplotlib.pyplot.imshowPR #20753silhouette_score支持整数输入的预计算距离矩阵PR #22108precision_recall_curve修复全负样本情形并在 1.1.1 中修正为在 100% recall 处补全曲线终点对应始终预测正类的分类器行为PR #23214metrics.SCORERS弃用改用metrics.get_scorer_namesPR #22866DistanceMetric由sklearn.neighbors迁移至sklearn.metrics旧导入路径仍可用1.3 移除wminkowski度量弃用minkowski新增可选w权重参数PR #21873、#21177。sklearn.model_selection所有带scoring参数的模型选择工具支持scoringmatthews_corrcoefPR #22203交叉验证中所有分裂均拟合失败、或网格搜索中所有模型与分裂均拟合失败时现在会抛出错误而非静默PR #21026learning_curve支持带partial_fit的回归器PR #22982。sklearn.multiclass / neighbors / neural_network / pipeline / preprocessing / random_projection / svm / tree / utilsOneVsRestClassifier新增verbose参数OneVsOneClassifier.predict修复仅含predict_proba的分类器PR #22508、#22604KNeighborsRegressor.predict修复weights为可调用对象时的数组输入问题PR #22687MLPClassifier/MLPRegressor在优化器产生非有限权重时报错PR #22150FeatureUnion支持passthrough透传特征PR #20860并定义__sklearn_is_fitted__与check_is_fitted正确协作PR #22953OrdinalEncoder新增encoded_missing_value配置缺失值编码PR #21988KBinsDiscretizer新增subsample参数仅strategyquantile时可用PR #21445PowerTransformeryeo-johnson对显著非高斯数据搜索最优 lambda 更稳健PR #20653GaussianRandomProjection/SparseRandomProjection新增inverse_transform与compute_inverse_transform参数PR #21701SVC/SVR/NuSVC/NuSVR/OneClassSVM暴露n_iter_libsvm 优化迭代次数PR #21408utils.check_array对 pandas 混合 dtype DataFrame 的推断更智能PR #22237compute_class_weight只要求y中的类在class_weight中有权重PR #22595utils.metaestimators.if_delegate_has_method弃用改用available_ifPR #22830check_estimator的参数更名为estimatorPR #22188。补丁版本修复要点1.1.1 / 1.1.21.1.12022 年 5 月未导入 experimental flag 时使用HalvingGridSearchCV、HalvingRandomSearchCV、IterativeImputer的错误消息得到改进fetch_openml不再传入timeout参数以避免超时PR #23358IncrementalPCA在n_samples n_components时不再产生多余警告PR #23264PolynomialFeatures在degree0时include_biasFalse报错include_biasTrue输出单列常数数组PR #23370修复低基数特征下DecisionTree/RandomForest/GradientBoosting系列的性能回退PR #23410utils.class_weight.compute_sample_weight支持稀疏yPR #23115。1.1.22022 年 8 月TSNE在perplexity n_samples时抛出ValueError保证算法数学正确性PR #10805、#23471参数无效的 meta-estimator 默认显示 HTML 表示PR #24015为 1.1 中后端变更过的估计器/函数增加F-contiguousFortran 序数组支持PR #23990SimpleImputer在 dtype 为 object 时transform沿用fit中看到的 dtypePR #22063OrdinalEncoder.inverse_transform正确处理unknown_value/encoded_missing_value为nan的情形PR #24087修复DecisionTree拟合期间的非法内存访问 bugPR #23273wheel 支持 macOS 10.9 及以上PR #23833。从 1.0 升级到 1.1 的迁移检查清单综合模型行为变化与各模块的 API 变更升级时建议按如下顺序自查重新拟合并验证模型受 KMeans 默认算法、树分裂排序、谱聚类初始化、LDA 缩放系数、分箱边界等变化影响线上模型需在 1.1 下重新拟合并对照业务指标确认无回归替换弃用参数名lossdeviance/log/auto→losslog_lossRANSACRegressor(base_estimator...)→estimator...max_featuresauto→ 按分类/回归改用sqrt/1.0metrics.SCORERS→get_scorer_names()neighbors.DistanceMetric→metrics.DistanceMetricwminkowski→minkowskiwif_delegate_has_method→available_ifdict_learning_online的n_iter→max_iter关注默认值预告FastICA.whiten将在 1.3 变更为unit-variancemake_sparse_coded_signal的data_transposed默认值将在 1.3 变更为FalseSequentialFeatureSelector.n_features_to_select将在 1.3 变更为auto这些预告都建议尽早显式传参避免将来静默变化确认运行环境Python ≥ 3.8、NumPy ≥ 1.17.3、SciPy ≥ 1.3.2若使用 32 位 Windows Python需先迁移到 64 位。延伸阅读完整发布说明doc/whats_new/v1.1.rst版本亮点示例脚本examples/release_highlights/plot_release_highlights_1_1_0.py新估计器源码BisectingKMeans、MiniBatchNMFKMeans Lloyd 默认算法实现sklearn/cluster/_kmeans.py分位数回归实现与 Pinball 损失sklearn/ensemble/_hist_gradient_boosting/gradient_boosting.pyOneHotEncoder 低频类别归并sklearn/preprocessing/_encoders.py决策边界可视化sklearn/inspection/_plot/decision_boundary.pyD² 评分指标实现sklearn/metrics/_regression.py历史版本发布说明索引doc/whats_new/whats_new.rst【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表