.. include:: _contributors.rst .. currentmodule:: sklearn .. _release_notes_1_4: =========== 版本 1.4 =========== 有关本次发布主要亮点内容的简要描述,请参阅 :ref:`sphx_glr_auto_examples_release_highlights_plot_release_highlights_1_4_0.py` 。 .. include:: changelog_legend.inc .. _changes_1_4_2: 版本 1.4.2 ============= **2024年4月** 本次发布仅包括对 numpy 2 的支持。 .. _changes_1_4_1: 版本 1.4.1 ============= **2024年2月** 更改的模型 -------------- - |API| :class:`tree.DecisionTreeClassifier` 、:class:`tree.DecisionTreeRegressor` 、 :class:`tree.ExtraTreeClassifier` 和 :class:`tree.ExtraTreeRegressor` 中的 `tree_.value` 属性 从样本数量的加权绝对计数更改为总样本数量的加权分数。 :pr:`27639` 由 :user:`Samuel Ronsin ` 贡献。 元数据路由 ---------------- - |FIX| 修复了在另一个元估计器内部使用时 :class:`~compose.ColumnTransformer` 的路由问题。 :pr:`28188` 由 `Adrin Jalali`_ 贡献。 - |Fix| 当传递给包含不支持元数据路由的子估计器的元估计器时,不再引发错误。 :pr:`28256` 由 `Adrin Jalali`_ 贡献。 - |Fix| 修复了 :class:`multioutput.MultiOutputRegressor` 和 :class:`multioutput.MultiOutputClassifier` ,使其在启用元数据路由时能够与不消耗任何元数据的估计器一起工作。 :pr:`28240` 由 `Adrin Jalali`_ 贡献。 DataFrame 支持 ----------------- - |Enhancement| |Fix| 直接验证 Pandas 和 Polars 数据帧,无需鸭子类型检查。 :pr:`28195` 由 `Thomas Fan`_ 贡献。 影响多个模块的更改 ------------------------------ - |Efficiency| |Fix| 部分回退 :pr:`28191` ,以避免在使用稀疏矩阵进行欧几里得成对计算的估计器中出现性能回归。受影响的估计器包括: - :func:`sklearn.metrics.pairwise_distances_argmin` - :func:`sklearn.metrics.pairwise_distances_argmin_min` - :class:`sklearn.cluster.AffinityPropagation` - :class:`sklearn.cluster.Birch` - :class:`sklearn.cluster.SpectralClustering` - :class:`sklearn.neighbors.KNeighborsClassifier` - :class:`sklearn.neighbors.KNeighborsRegressor` - :class:`sklearn.neighbors.RadiusNeighborsClassifier` - :class:`sklearn.neighbors.RadiusNeighborsRegressor` - :class:`sklearn.neighbors.LocalOutlierFactor` - :class:`sklearn.neighbors.NearestNeighbors` - :class:`sklearn.manifold.Isomap` - :class:`sklearn.manifold.TSNE` - :func:`sklearn.manifold.trustworthiness` :pr:`28235` by :user:`Julien Jerphanion ` . - |Fix| 修复了在使用 `set_output` 并设置 `transform` 为 `pandas` 或 `polars` 时,所有 scikit-learn 转换器的一个错误。该错误可能导致返回数据框的列名错误。 :pr:`28262` by :user:`Guillaume Lemaitre ` . - |Fix| 当用户尝试在 :class:`~ensemble.StackingClassifier` 、:class:`~ensemble.StackingClassifier` 、:class:`~ensemble.StackingClassifier` 、:class:`~feature_selection.SelectFromModel` 、:class:`~feature_selection.RFE` 、:class:`~semi_supervised.SelfTrainingClassifier` 、:class:`~multiclass.OneVsOneClassifier` 、:class:`~multiclass.OutputCodeClassifier` 或 :class:`~multiclass.OneVsRestClassifier` 中使用其子估计器未实现的方法时, `AttributeError` 现在会在追溯中重新抛出。 :pr:`28167` by :user:`Stefanie Senger ` . 变更日志 --------- :mod:`sklearn.calibration` .......................... - |Fix| `calibration.CalibratedClassifierCV` 支持内部估计器的 float32 输出的 :term:`predict_proba` 。:pr:`28247` by `Thomas Fan`_ . :mod:`sklearn.cluster` ...................... - |Fix| :class:`cluster.AffinityPropagation` 现在避免为相等的点分配多个不同的聚类。 :pr:`28121` by :user:`Pietro Peterlongo ` 和 :user:`Yao Xiao ` . - |Fix| 当聚类数大于非重复样本数时,避免 :class:`cluster.KMeans` 中的无限循环。 :pr:`28165` 由 :user:`Jérémie du Boisberranger ` 贡献。 :mod:`sklearn.compose` ...................... - |Fix| :class:`compose.ColumnTransformer` 现在在 `verbose_feature_names_out=True` 且转换器内部多次使用相同列时,会转换为 polars 数据帧。之前,由于重复的列名会引发错误。 :pr:`28262` 由 :user:`Guillaume Lemaitre ` 贡献。 :mod:`sklearn.ensemble` ....................... - |Fix| :class:`HistGradientBoostingClassifier` 和 :class:`HistGradientBoostingRegressor` 在带有扩展数据类型(例如 `pd.Int64Dtype` )的`pandas``DataFrame `上拟合时。 :pr:` 28385 `由 :user:` Loïc Estève `贡献。 - |Fix| 修复了当目标为多标签或多类多输出格式时,:class:` ensemble.VotingClassifier `引发的错误消息。 :pr:` 27702 `由 :user:` Guillaume Lemaitre `贡献。 :mod:` sklearn.impute ` ..................... - |Fix|: :class:` impute.SimpleImputer `现在在` .fit `和` .transform `中如果` fill_value `不能以` casting='same_kind' `转换为输入值的数据类型,则会引发错误。 :pr:` 28365 `由 :user:` Leo Grinsztajn `贡献。 :mod:` sklearn.inspection ` ......................... - |Fix| :func:` inspection.permutation_importance `现在可以正确处理` sample_weight `与子采样(即` max_features `< 1.0)。 :pr:` 28184 `由 :user:` Michael Mayer `贡献。 :mod:` sklearn.linear_model ` ........................... - |Fix| :class:` linear_model.ARDRegression `现在可以处理` predict(X, return_std=True) `的 pandas 输入类型。 :pr:` 28377 `由 :user:` Eddie Bergman `贡献。 :mod:` sklearn.preprocessing ` ............................ - |Fix| 使 :class:` preprocessing.FunctionTransformer `更加宽松并覆盖 在以下情况下使用` get_feature_names_out `输出列名: (i) 输入和输出列名保持不变(在使用 NumPy` ufunc `时发生); (ii) 输入列名为数字; (iii) 输出将设置为 Pandas 或 Polars 数据框。 :pr:` 28241 `由 :user:` Guillaume Lemaitre `提交。 - |Fix| :class:` preprocessing.FunctionTransformer `现在还会在调用` set_output `时发出警告, 当` transform="polars" `且` func `未返回 Polars 数据框或未指定` feature_names_out ` 。 :pr:` 28263 `由 :user:` Guillaume Lemaitre `提交。 - |Fix| :class:` preprocessing.TargetEncoder `在` target_type="continuous" `且输入为只读时不再失败。 特别是,现在在启用 pandas 的 copy-on-write 模式下也能正常工作。 :pr:` 28233 `由 :user:` John Hopfensperger `提交。 :mod:` sklearn.tree ` ................... - |Fix| :class:` tree.DecisionTreeClassifier `和 :class:` tree.DecisionTreeRegressor `现在能正确处理缺失值。 当数据中没有缺失值时,内部标准未初始化,导致可能出现错误的标准值。 :pr:` 28295 `由 :user:` Guillaume Lemaitre `提交, 以及 :pr:` 28327 `由 :user:` Adam Li `提交。 :mod:` sklearn.utils ` .................... - |Enhancement| |Fix| :func:` utils.metaestimators.available_if `现在会将` check `函数的错误作为` AttributeError `的原因重新抛出。 :pr:` 28198 `由` Thomas Fan `_ 提交。 - |Fix| :func:` utils._safe_indexing `现在会在` X `为 Python 列表且` axis=1 `时引发` ValueError ` , 如文档字符串中所述。 :pr:` 28222 `由 :user:` Guillaume Lemaitre `提交。 .. _changes_1_4: 版本 1.4.0 ============= **2024年1月** 更改的模型 -------------- 以下估计器和函数,在相同数据和参数下拟合时,可能会产生与上一版本不同的模型。这通常 由于建模逻辑的变化(错误修复或增强),或随机抽样程序的变化,会发生这种情况。 - |Efficiency| :class:` linear_model.LogisticRegression `和 :class:` linear_model.LogisticRegressionCV `现在对于求解器` "lbfgs" `和` "newton-cg" `具有更好的收敛性。这两个求解器现在可以根据指定的` tol `达到更高的系数精度。此外,lbfgs 可以更好地利用` tol ` ,即更快停止或达到更高的精度。 注意:lbfgs 是默认求解器,因此这一变化可能会影响许多模型。这也意味着,使用这个新版本的 scikit-learn,对于这两个求解器(在相同数据上再次拟合时),模型的系数` coef_ `和截距` intercept_ `将会发生变化。变化的程度取决于指定的` tol ` ,对于较小的值,您将获得更精确的结果。 :pr:` 26721 `由 :user:` Christian Lorentzen `贡献。 - |Fix| 修复了在 PyPy 中使用 Cython 损失函数的估计器中出现的内存泄漏问题。 :pr:` 27670 `由 :user:` Guillaume Lemaitre `贡献。 影响所有模块的变更 -------------------- - |MajorFeature| 转换器现在支持 polars 输出,使用` set_output(transform="polars") ` 。 :pr:` 27315 `由` Thomas Fan `_ 贡献。 - |Enhancement| 所有估计器现在可以识别任何采用 ` DataFrame 交换协议 `__ 的数据框中的列名。预期通过` np.asarray(df) `返回正确表示的数据框可以与我们的估计器和函数一起工作。 :pr:` 26464 `由` Thomas Fan `_ 贡献。 - |Enhancement| 估计器的 HTML 表示现在包含指向文档的链接,并根据估计器是否拟合进行颜色编码(未拟合的估计器为橙色,已拟合的估计器为蓝色)。 :pr:` 26616 `由 :user:` Riccardo Cappuzzo `贡献。 :user:` Ines Ibnukhsein `, :user:` Gael Varoquaux `, ` Joel Nothman `_ 和 :user:` Lilian Boulard `. - |Fix| 修复了大多数估计器和函数中的一个错误,当将参数设置为 一个较大的整数时会导致` TypeError ` 。 :pr:` 26648 `由 :user:` Naoise Holohan `提交。 元数据路由 ---------------- 以下模型现在支持在其一个或多个方法中进行元数据路由。有关更多详细信息,请参阅 :ref:` Metadata Routing User Guide ` 。 - |Feature| :class:` LarsCV `和 :class:` LassoLarsCV `现在支持在其` fit `方法中进行元数据 路由,并将元数据路由到 CV 分割器。 :pr:` 27538 `由 :user:` Omar Salman `提交。 - |Feature| :class:` multiclass.OneVsRestClassifier `, :class:` multiclass.OneVsOneClassifier `和 :class:` multiclass.OutputCodeClassifier`现在支持在其 ``fit`` 和 ``partial_fit`` 方法中进行元数据路由, 并将元数据路由到底层估计器的 ``fit`` 和 ``partial_fit`` 。 :pr:`27308` 由 :user:`Stefanie Senger ` 提交。 - |Feature| :class:`pipeline.Pipeline` 现在根据 :ref:`metadata routing user guide ` 支持元数据路由。 :pr:`26789` 由 `Adrin Jalali`_ 提交。 - |Feature| :func:`~model_selection.cross_validate` , :func:`~model_selection.cross_val_score` , 和 :func:`~model_selection.cross_val_predict` 现在支持元数据路由。元数据被路由到估计器的 `fit` ,评分器, 以及 CV 分割器的 `split` 。元数据通过新的 `params` 参数接受。 `fit_params` 已弃用,将在版本 1.6 中移除。 `groups` 参数在启用元数据路由时不作为单独参数接受,应通过 `params` 参数传递。 :pr:`26896` 由 `Adrin Jalali`_ 提交。 - |Feature| :class:`~model_selection.GridSearchCV` , :class:`~model_selection.RandomizedSearchCV` , :class:`~model_selection.HalvingGridSearchCV` , 和 :class:`~model_selection.HalvingRandomSearchCV` 现在支持在其 ``fit`` 和 ``score`` 方法中进行元数据路由,并将元数据路由到底层估计器的 ``fit`` 方法、CV 分割器和评分器。 :pr:`27058` 由 `Adrin Jalali`_ 贡献。 - |Feature| :class:`~compose.ColumnTransformer` 现在根据 :ref:`元数据路由用户指南 ` 支持元数据路由。 :pr:`27005` 由 `Adrin Jalali`_ 贡献。 - |Feature| :class:`linear_model.LogisticRegressionCV` 现在支持元数据路由。:meth:`linear_model.LogisticRegressionCV.fit` 现在接受 ``**params`` ,这些参数会被传递给底层的分割器和评分器。:meth:`linear_model.LogisticRegressionCV.score` 现在接受 ``**score_params`` ,这些参数会被传递给底层的评分器。 :pr:`26525` 由 :user:`Omar Salman ` 贡献。 - |Feature| :class:`feature_selection.SelectFromModel` 现在在 `fit` 和 `partial_fit` 方法中支持元数据路由。 :pr:`27490` 由 :user:`Stefanie Senger ` 贡献。 - |Feature| :class:`linear_model.OrthogonalMatchingPursuitCV` 现在支持元数据路由。其 `fit` 方法现在接受 ``**fit_params`` ,这些参数会被传递给底层的分割器。 :pr:`27500` 由 :user:`Stefanie Senger ` 贡献。 - |Feature| :class:`ElasticNetCV` , :class:`LassoCV` , :class:`MultiTaskElasticNetCV` 和 :class:`MultiTaskLassoCV` 现在支持元数据路由,并将元数据路由到 CV 分割器。 :pr:`27478` 由 :user:`Omar Salman ` 贡献。 - |Fix| 所有尚未实现元数据路由的元估计器现在在 `get_metadata_routing` 和 `fit` 方法中如果启用了元数据路由并传递了任何元数据,则会引发 `NotImplementedError` 。 :pr:`27389` 由 `Adrin Jalali`_ 贡献。 对 SciPy 稀疏数组的支持 ----------------------- 多个估计器现在支持 SciPy 稀疏数组。以下函数和类受到影响: **函数:** - :func:`cluster.compute_optics_graph` 在 :pr:`27104` 中由 :user:`Maren Westermann ` 和在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :func:`cluster.kmeans_plusplus` 在 :pr:`27179` 中由 :user:`Nurseit Kamchyev ` 完成; - :func:`decomposition.non_negative_factorization` 在 :pr:`27100` 中由 :user:`Isaac Virshup ` 完成; - :func:`feature_selection.f_regression` 在 :pr:`27239` 中由 :user:`Yaroslav Korobko ` 完成; - :func:`feature_selection.r_regression` 在 :pr:`27239` 中由 :user:`Yaroslav Korobko ` 完成; - :func:`manifold.trustworthiness` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :func:`manifold.spectral_embedding` 在 :pr:`27240` 中由 :user:`Yao Xiao ` 完成; - :func:`metrics.pairwise_distances` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :func:`metrics.pairwise_distances_chunked` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :func:`metrics.pairwise.pairwise_kernels` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :func:`utils.multiclass.type_of_target` 在 :pr:`27274` 中由 :user:`Yao Xiao ` 完成。 **类:** - :class:`cluster.HDBSCAN` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :class:`cluster.KMeans` 在 :pr:`27179` 中由 :user:`Nurseit Kamchyev ` 完成; - :class:`cluster.MiniBatchKMeans` 在 :pr:`27179` 中由 :user:`Nurseit Kamchyev ` 完成; - :class:`cluster.OPTICS` 在 :pr:`27104` 中由 :user:`Maren Westermann ` 完成,并在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :class:`cluster.SpectralClustering` 在 :pr:`27161` 中由 :user:`Bharat Raghunathan ` 完成; - :class:`decomposition.MiniBatchNMF` 在 :pr:`27100` 中由 :user:`Isaac Virshup ` 完成; - :class:`decomposition.NMF` 在 :pr:`27100` 中由 :user:`Isaac Virshup ` 完成; - :class:`feature_extraction.text.TfidfTransformer` 在 :pr:`27219` 中由 :user:`Yao Xiao ` 完成; - :class:`manifold.Isomap` 在 :pr:`27250` 中由 :user:`Yao Xiao ` 完成; - :class:`manifold.SpectralEmbedding` 在 :pr:`27240` 中由 :user:`Yao Xiao ` 完成。 - :class:`manifold.TSNE` 在 :pr:`27250` 由 :user:`Yao Xiao ` 贡献; - :class:`impute.SimpleImputer` 在 :pr:`27277` 由 :user:`Yao Xiao ` 贡献; - :class:`impute.IterativeImputer` 在 :pr:`27277` 由 :user:`Yao Xiao ` 贡献; - :class:`impute.KNNImputer` 在 :pr:`27277` 由 :user:`Yao Xiao ` 贡献; - :class:`kernel_approximation.PolynomialCountSketch` 在 :pr:`27301` 由 :user:`Lohit SundaramahaLingam ` 贡献; - :class:`neural_network.BernoulliRBM` 在 :pr:`27252` 由 :user:`Yao Xiao ` 贡献; - :class:`preprocessing.PolynomialFeatures` 在 :pr:`27166` 由 :user:`Mohit Joshi ` 贡献; - :class:`random_projection.GaussianRandomProjection` 在 :pr:`27314` 由 :user:`Stefanie Senger ` 贡献; - :class:`random_projection.SparseRandomProjection` 在 :pr:`27314` 由 :user:`Stefanie Senger ` 贡献. 对数组 API 的支持 ------------------ 多个估计器和函数支持 `数组 API `_ 。这些更改使得可以使用 估计器和函数与其他库如 JAX、CuPy 和 PyTorch。因此,这使得一些 GPU 加速计算成为可能。 详情请参见 :ref:`array_api` 。 **函数:** - :func:`sklearn.metrics.accuracy_score` 和 :func:`sklearn.metrics.zero_one_loss` 在 :pr:`27137` 由 :user:`Edoardo Abati ` 贡献; - :func:`sklearn.model_selection.train_test_split` 在 :pr:`26855` 由 `Tim Head`_ 贡献; - :func:`~utils.multiclass.is_multilabel` 在 :pr:`27601` 由 :user:`Yaroslav Korobko ` 贡献. **类:** - :class:`decomposition.PCA` 对于 `full` 和 `randomized` 求解器(带 QR 幂迭代)在 :pr:`26315` , :pr:`27098` 和 :pr:`27431` 由 :user:`Mateusz Sokół ` , :user:`Olivier Grisel ` 和 :user:`Edoardo Abati ` 贡献; - :class:`preprocessing.KernelCenterer` 在 :pr:`27556` 由 :user:`Edoardo Abati ` 贡献; - :class:`preprocessing.MaxAbsScaler` 在 :pr:`27110` 由 :user:`Edoardo Abati ` 贡献; - :class:`preprocessing.MinMaxScaler` 在 :pr:`26243` 由 `Tim Head`_ 贡献; - :class:`preprocessing.Normalizer` 在 :pr:`27558` 由 :user:`Edoardo Abati ` 贡献. 私有损失函数模块 ---------------- - |FIX| 二项式对数损失的梯度计算现在对绝对值非常大的输入(原始预测)在数值上更加稳定。之前可能会导致 `np.nan` 。受益于此更改的模型包括 :class:`ensemble.GradientBoostingClassifier` 、:class:`ensemble.HistGradientBoostingClassifier` 和 :class:`linear_model.LogisticRegression` 。:pr:`28048` 由 :user:`Christian Lorentzen ` 贡献。 更新日志 -------- .. 条目应按模块(按字母顺序)分组,并以前缀标签之一开头:|MajorFeature|、|Feature|、|Efficiency|、|Enhancement|、|Fix| 或 |API|(参见 whats_new.rst 中的描述)。 条目应按这些标签排序(例如 |Fix| 在 |Efficiency| 之后)。 非特定于某个模块的更改应列在 *多个模块* 或 *杂项* 下。 条目应以: :pr:`123456` 由 :user:`Joe Bloggs ` 贡献。 结尾,其中 123456 是 *拉取请求* 编号,而不是问题编号。 :mod:`sklearn.base` ................... - |Enhancement| :meth:`base.ClusterMixin.fit_predict` 和 :meth:`base.OutlierMixin.fit_predict` 现在接受 ``**kwargs`` ,这些参数会传递给估计器的 ``fit`` 方法。:pr:`26506` 由 `Adrin Jalali`_ 贡献。 - |Enhancement| :meth:`base.TransformerMixin.fit_transform` 和 :meth:`base.OutlierMixin.fit_predict` 现在会在 ``transform`` / ``predict`` 消耗元数据,但相应的类中未定义自定义 ``fit_transform`` / ``fit_predict`` 时发出警告。:pr:`26831` 由 `Adrin Jalali`_ 贡献。 - |Enhancement| :func:`base.clone` 现在支持 `dict` 作为输入并创建一个副本。 :pr:`26786` 由 `Adrin Jalali`_ 提交。 - |API|:func:`~utils.metadata_routing.process_routing` 现在具有不同的签名。前两个参数(对象和方法)仅位置参数,所有元数据都作为关键字参数传递。 :pr:`26909` 由 `Adrin Jalali`_ 提交。 :mod:`sklearn.calibration` .......................... - |Enhancement| :class:`calibration.CalibratedClassifierCV` 的 `sigmoid` 方法的内部目标和梯度已被私有损失模块替换。 :pr:`27185` 由 :user:`Omar Salman ` 提交。 :mod:`sklearn.cluster` ...................... - |Fix| :class:`cluster.SpectralClustering` 构造函数中的 `degree` 参数现在接受实数值,而不仅仅是整数值,与 :class:`sklearn.metrics.pairwise.polynomial_kernel` 的 `degree` 参数一致。 :pr:`27668` 由 :user:`Nolan McMahon ` 提交。 - |Fix| 修复了 :class:`cluster.OPTICS` 中的一个错误,该错误在基于前驱的聚类校正中使用了错误的索引。这将导致依赖于数据顺序的不一致结果。 :pr:`26459` 由 :user:`Haoying Zhang ` 和 :user:`Guillaume Lemaitre ` 提交。 - |Fix| 改进了在 :class:`cluster.HDBSCAN` 的 `fit` 方法中检查连接组件数量时的错误消息。 :pr:`27678` 由 :user:`Ganesh Tata ` 提交。 - |Fix| 在 :class:`cluster.DBSCAN` 的 `fit` 方法中创建预计算稀疏矩阵的副本,以避免对稀疏矩阵的就地修改。 :pr:`27651` 由 :user:`Ganesh Tata ` 提交。 - |Fix| 当 `metric="precomputed"` 且通过 `store_centers` 参数请求存储中心时,抛出适当的 `ValueError` 。 :pr:`27898` 由 :user:`Guillaume Lemaitre ` 提交。 - |API| `kdtree` 和 `balltree` 值已被弃用,并分别重命名为 `kd_tree` 和 `ball_tree` ,用于 :class:`cluster.DBSCAN` 的 `algorithm` 参数。 - |API| 在 :class:`cluster.AgglomerativeClustering` 和 :class:`cluster.FeatureAgglomeration` 中,选项 `metric=None` 在版本 1.4 中已被弃用,并将在版本 1.6 中移除。请改用默认值。 :pr:`27828` 由 :user:`Guillaume Lemaitre ` 提交。 :mod:`sklearn.compose` ...................... - |MajorFeature| 通过 `DataFrame Interchange Protocol `__ ,为 :class:`compose.ColumnTransformer` 添加了对 `polars `__ 输入的支持。polars 的最低支持版本为 `0.19.12` 。 :pr:`26683` 由 `Thomas Fan`_ 提交。 - |Fix| :func:`cluster.spectral_clustering` 和 :class:`cluster.SpectralClustering` 现在会明确抛出一个错误消息,指示不支持稀疏矩阵和带有 `np.int64` 索引的数组。 :pr:`27240` 由 :user:`Yao Xiao ` 提交。 - |API| 在 :class:`~compose.ColumnTransformer` 中,使用 pandas 扩展数据类型并包含 `pd.NA` 的输出现在会导致一个 `FutureWarning` ,并且在版本 1.6 中将导致 `ValueError` ,除非输出容器已配置为 "pandas" 并使用 `set_output(transform="pandas")` 。在此之前,此类输出会导致包含 `pd.NA` 的 numpy 数组,其数据类型为 `object` ,无法转换为 numpy 浮点数,并在传递给其他 scikit-learn 估计器时导致错误。 :pr:`27734` 由 :user:`Jérôme Dockès ` 提交。 :mod:`sklearn.covariance` ......................... - |Enhancement| 允许 :func:`covariance.shrunk_covariance` 通过处理多维数组一次处理多个协方差矩阵。 :pr:`25275` 由 :user:`Quentin Barthélemy ` 提交。 - |API| |FIX| :class:`~compose.ColumnTransformer` 现在替换 `"passthrough"` 在已拟合的 ``transformers_`` 属性中,对应一个 :class:`~preprocessing.FunctionTransformer` 。 :pr:`27204` 由 `Adrin Jalali`_ 贡献。 :mod:`sklearn.datasets` ....................... - |Enhancement| :func:`datasets.make_sparse_spd_matrix` 现在使用更节省内存的稀疏布局。它还接受一个新的关键字 `sparse_format` ,允许指定稀疏矩阵的输出格式。默认情况下 `sparse_format=None` ,与之前一样返回一个密集的 numpy ndarray。 :pr:`27438` 由 :user:`Yao Xiao ` 贡献。 - |Fix| :func:`datasets.dump_svmlight_file` 现在在 `X` 为只读时(例如 `numpy.memmap` 实例)不会引发 `ValueError` 。 :pr:`28111` 由 :user:`Yao Xiao ` 贡献。 - |API| :func:`datasets.make_sparse_spd_matrix` 弃用了关键字参数 ``dim`` ,改为使用 ``n_dim`` 。 ``dim`` 将在版本 1.6 中移除。 :pr:`27718` 由 :user:`Adam Li ` 贡献。 :mod:`sklearn.decomposition` ............................ - |Feature| :class:`decomposition.PCA` 现在支持在使用 `arpack` 求解器时输入 :class:`scipy.sparse.sparray` 和 :class:`scipy.sparse.spmatrix` 。在处理像 :func:`datasets.fetch_20newsgroups_vectorized` 这样的稀疏数据时,这可以带来 100 倍的速度提升(单线程)和 70 倍的内存使用减少。基于 :user:`Alexander Tarashansky ` 在 `scanpy `_ 中的实现。 :pr:`18689` 由 :user:`Isaac Virshup ` 和 :user:`Andrey Portnoy ` 贡献。 - |Enhancement| 在 :func:`decomposition.non_negative_factorization` 、:class:`decomposition.NMF` 和 :class:`decomposition.MiniBatchNMF` 的 `n_components` 参数中添加了 "auto" 选项,以在使用自定义初始化时自动从 W 或 H 形状推断组件数量。该参数的默认值将在版本 1.6 中从 `None` 更改为 `auto` 。 :pr:`26634` 由 :user:`Alexandre Landeau ` 和 :user:`Alexandre Vigny ` 贡献。 - |Fix| :func:`decomposition.dict_learning_online` 不再忽略参数 `max_iter` 。 :pr:`27834` 由 :user:`Guillaume Lemaitre ` 贡献。 - |Fix| :class:`decomposition.KernelPCA` 构造函数中的 `degree` 参数现在接受实数值,而不仅仅是整数值,以符合 :class:`sklearn.metrics.pairwise.polynomial_kernel` 中的 `degree` 参数。 :pr:`27668` 由 :user:`Nolan McMahon ` 贡献。 - |API| :class:`decomposition.MiniBatchDictionaryLearning` 、:class:`decomposition.MiniBatchSparsePCA` 和 :func:`decomposition.dict_learning_online` 中的选项 `max_iter=None` 已弃用,并将在版本 1.6 中移除。请改用默认值。 :pr:`27834` 由 :user:`Guillaume Lemaitre ` 贡献。 :mod:`sklearn.ensemble` ....................... - |MajorFeature| :class:`ensemble.RandomForestClassifier` 和 :class:`ensemble.RandomForestRegressor` 在标准为 `gini` 、 `entropy` 或 `log_loss` (分类)或 `squared_error` 、 `friedman_mse` 或 `poisson` (回归)时支持缺失值。 :pr:`26391` 由 `Thomas Fan`_ 贡献。 - |MajorFeature| :class:`ensemble.HistGradientBoostingClassifier` 和 :class:`ensemble.HistGradientBoostingRegressor` 支持 `categorical_features="from_dtype"` ,该选项将 Pandas 或 Polars 的 Categorical dtype 列视为算法中的类别。 `categorical_features="from_dtype"` 将在 v1.6 中成为默认设置。分类特征不再需要用数字编码。当分类特征为数字时,最大值不再需要小于 `max_bins` ;只有类别数量(唯一值)必须小于 `max_bins` 。 :pr:`26411` 由 `Thomas Fan`_ 贡献,:pr:`27835` 由 :user:`Jérôme Dockès ` 贡献。 - |MajorFeature| :class:`ensemble.HistGradientBoostingClassifier` 和 - :class:`ensemble.HistGradientBoostingRegressor` 新增了参数 `max_features` ,用于指定每次分割时随机选择的特征比例。 :pr:`27139` 由 :user:`Christian Lorentzen ` 贡献。 - |Feature| :class:`ensemble.RandomForestClassifier` 、 :class:`ensemble.RandomForestRegressor` 、:class:`ensemble.ExtraTreesClassifier` 和 :class:`ensemble.ExtraTreesRegressor` 现在支持单调约束,这在特征对目标有正/负影响时非常有用。 训练数据中的缺失值和多输出目标尚不支持。 :pr:`13649` 由 :user:`Samuel Ronsin ` 贡献, 由 :user:`Patrick O'Reilly ` 发起。 - |Efficiency| :class:`ensemble.HistGradientBoostingClassifier` 和 :class:`ensemble.HistGradientBoostingRegressor` 现在通过在减法技巧中重用父节点的直方图作为子节点的直方图,速度有所提升。 实际上,需要分配和释放的内存减少了。 :pr:`27865` 由 :user:`Christian Lorentzen ` 贡献。 - |Efficiency| :class:`ensemble.GradientBoostingClassifier` 速度更快, 特别是对于二分类和多分类问题,得益于私有损失函数模块。 :pr:`26278` 和 :pr:`28095` 由 :user:`Christian Lorentzen ` 贡献。 - |Efficiency| 改进了在稀疏数据上训练时 :class:`ensemble.GradientBoostingClassifier` 和 :class:`ensemble.GradientBoostingRegressor` 的运行时和内存使用。 :pr:`26957` 由 `Thomas Fan`_ 贡献。 - |Efficiency| :class:`ensemble.HistGradientBoostingClassifier` 和 :class:`ensemble.HistGradientBoostingRegressor` 在 `scoring` 是 :func:`metrics.get_scorer_names` 中列出的预定义指标且启用早停时,速度更快。 :pr:`26163` 由 `Thomas Fan`_ 贡献。 - |Enhancement| 所有森林方法新增了一个拟合属性 ``estimators_samples_`` ,包括 :class:`ensemble.RandomForestClassifier` , :class:`ensemble.RandomForestRegressor` , :class:`ensemble.ExtraTreesClassifier` 和 :class:`ensemble.ExtraTreesRegressor` , 允许检索用于每个树估计器的训练样本索引。 :pr:`26736` 由 :user:`Adam Li ` 提交。 - |Fix| 修复了当输入为稀疏矩阵且 `contamination` 设置为浮点值时, :class:`ensemble.IsolationForest` 的问题。 :pr:`27645` 由 :user:`Guillaume Lemaitre ` 提交。 - |Fix| 在请求多输出模型的 OOB 分数时,对于所有目标都被四舍五入为整数的情况, :class:`ensemble.RandomForestRegressor` 和 :class:`ensemble.ExtraTreesRegressor` 会引发 `ValueError` 。 这被识别为一个多类问题。 :pr:`27817` 由 :user:`Daniele Ongari ` 提交。 - |Fix| 更改了估计器标签,以确认 :class:`ensemble.VotingClassifier` , :class:`ensemble.VotingRegressor` , :class:`ensemble.StackingClassifier` , :class:`ensemble.StackingRegressor` 支持缺失值, 前提是所有 `estimators` 都支持缺失值。 :pr:`27710` 由 :user:`Guillaume Lemaitre ` 提交。 - |Fix| 支持加载在不同位数平台上生成的 :class:`ensemble.HistGradientBoostingClassifier` 和 :class:`ensemble.HistGradientBoostingRegressor` 的 pickle 文件。 一个典型的例子是在 64 位机器上训练并序列化模型,然后在 32 位机器上加载模型进行预测。 :pr:`28074` 由 :user:`Christian Lorentzen ` 和 :user:`Loïc Estève ` 提交。 - |API| 在 :class:`ensemble.AdaBoostClassifier` 中, `algorithm` 参数 `SAMME.R` 已被弃用, 并将在 1.6 版本中移除。 :pr:`26830` 由 :user:`Stefanie Senger ` 提交。 :mod:`sklearn.feature_extraction` ................................. - |API| 在未拟合的实例中,将错误类型从 :class:`AttributeError` 更改为 :class:`exceptions.NotFittedError` 。 :class:`feature_extraction.DictVectorizer` 用于以下方法: :func:`feature_extraction.DictVectorizer.inverse_transform` , :func:`feature_extraction.DictVectorizer.restrict` , :func:`feature_extraction.DictVectorizer.transform` . :pr:`24838` 由 :user:`Lorenz Hertel ` 提交。 :mod:`sklearn.feature_selection` ................................ - |Enhancement| :class:`feature_selection.SelectKBest` , :class:`feature_selection.SelectPercentile` , 和 :class:`feature_selection.GenericUnivariateSelect` 现在支持通过提供一个接受 `X` 和 `y=None` 的 `score_func` 进行无监督特征选择。 :pr:`27721` 由 :user:`Guillaume Lemaitre ` 提交。 - |Enhancement| :class:`feature_selection.SelectKBest` 和 :class:`feature_selection.GenericUnivariateSelect` 在 `mode='k_best'` 模式下,当 `k` 大于特征数量时会显示警告。 :pr:`27841` 由 `Thomas Fan`_ 提交。 - |Fix| :class:`feature_selection.RFE` 和 :class:`feature_selection.RFECV` 在输入验证期间不再检查 nans。 :pr:`21807` 由 `Thomas Fan`_ 提交。 :mod:`sklearn.inspection` ......................... - |Enhancement| :class:`inspection.DecisionBoundaryDisplay` 现在接受一个参数 `class_of_interest` ,用于在绘制由 `response_method="predict_proba"` 或 `response_method="decision_function"` 提供的响应时选择感兴趣的类别。它允许绘制二分类和多分类器的决策边界。 :pr:`27291` 由 :user:`Guillaume Lemaitre ` 提交。 - |Fix| :meth:`inspection.DecisionBoundaryDisplay.from_estimator` 和 :class:`inspection.PartialDependenceDisplay.from_estimator` 现在返回子类的正确类型。 :pr:`27675` 由 :user:`John Cant ` 提交。 - |API| :class:`inspection.DecisionBoundaryDisplay` 当估计器未实现请求的响应方法时,会引发 `AttributeError` 而不是 `ValueError` 。 :pr:`27291` 由 :user:`Guillaume Lemaitre ` 提交。 :mod:`sklearn.kernel_ridge` ........................... - |Fix| :class:`kernel_ridge.KernelRidge` 构造函数中的 `degree` 参数现在接受实数值,而不仅仅是整数值,以符合 :class:`sklearn.metrics.pairwise.polynomial_kernel` 中的 `degree` 参数。 :pr:`27668` 由 :user:`Nolan McMahon ` 贡献。 :mod:`sklearn.linear_model` ........................... - |Efficiency| :class:`linear_model.LogisticRegression` 和 :class:`linear_model.LogisticRegressionCV` 现在对于 `"lbfgs"` 和 `"newton-cg"` 求解器具有更好的收敛性。这两个求解器现在可以根据指定的 `tol` 达到更高的系数精度。此外,lbfgs 可以更好地利用 `tol` ,即更快停止或达到更高精度。这是通过更好地缩放目标函数实现的,即使用每个样本损失的平均值而不是总和。 :pr:`26721` 由 :user:`Christian Lorentzen ` 贡献。 - |Efficiency| 使用 `"newton-cg"` 求解器的 :class:`linear_model.LogisticRegression` 和 :class:`linear_model.LogisticRegressionCV` 在某些数据和参数设置下可以显著加快。这是通过更好地检查线搜索收敛,考虑梯度信息以忽略微小的损失改进实现的。 :pr:`26721` 由 :user:`Christian Lorentzen ` 贡献。 - |Efficiency| :class:`linear_model.LogisticRegression` 和 :class:`linear_model.LogisticRegressionCV` 中的 `"newton-cg"` 求解器使用的内存略少。效果与系数数量( `n_features * n_classes` )成正比。 :pr:`27417` 由 :user:`Christian Lorentzen ` 贡献。 - |Fix| 确保 :class:`linear_model.ARDRegression` 和 :class:`linear_model.BayesianRidge` 的 `sigma_` 属性在 `float32` 数据上拟合时始终具有 `float32` 数据类型,即使在 NumPy 2 的类型提升规则下也是如此。 :pr:`27899` 由 :user:`Olivier Grisel ` 提交。 - |API| :class:`linear_model.SGDClassifier` 和 :class:`linear_model.SGDOneClassSVM` 的属性 `loss_function_` 已被弃用,并将在版本 1.6 中移除。 :pr:`27979` 由 :user:`Christian Lorentzen ` 提交。 :mod:`sklearn.metrics` ...................... - |Efficiency| 通过 :class:`metrics.DistanceMetric` 计算 CSR x CSR、Dense x CSR 和 CSR x Dense 数据集的成对距离现在快了 1.5 倍。 :pr:`26765` 由 :user:`Meekail Zain ` 提交。 - |Efficiency| 通过 :class:`metrics.DistanceMetric` 计算 CSR x CSR、Dense x CSR 和 CSR x Dense 的距离现在使用约 50% 更少的内存,并且输出的距离与提供的数据具有相同的 dtype。 :pr:`27006` 由 :user:`Meekail Zain ` 提交。 - |Enhancement| 改进了使用 :class:`metrics.PrecisionRecallDisplay` 和 :class:`metrics.RocCurveDisplay` 类获得的图的渲染效果。x 轴和 y 轴的限制设置为 [0, 1],并且两个轴之间的纵横比设置为 1,以获得一个正方形图。 :pr:`26366` 由 :user:`Mojdeh Rastgoo ` 提交。 - |Enhancement| 添加了 `neg_root_mean_squared_log_error_scorer` 作为评分器 :pr:`26734` 由 :user:`Alejandro Martin Gil <101AlexMartin>` 提交。 - |Enhancement| :func:`metrics.confusion_matrix` 现在会在 `y_true` 和 `y_pred` 中只找到一个标签时发出警告。 :pr:`27650` 由 :user:`Lucy Liu ` 提交。 - |Fix| 使用 :func:`metrics.pairwise.euclidean_distances` 计算成对距离时,当 `X` 作为 `float64` 数组提供,而 `X_norm_squared` 作为 `float32` 数组提供时,不再引发异常。 :pr:`27624` 由 :user:`Jérôme Dockès ` 提交。 - |Fix| :func:`f1_score` 现在在处理各种除以零的情况时提供正确的值,通过使用不依赖于精确度和召回值的公式。 :pr:`27577` 由 :user:`Omar Salman ` 和 :user:`Guillaume Lemaitre ` 提交。 - |Fix| :func:`metrics.make_scorer` 现在在使用回归器于请求非阈值决策函数的评分器时会引发错误(来自 `decision_function` 或 `predict_proba` )。此类评分器特定于分类。 :pr:`26840` 由 :user:`Guillaume Lemaitre ` 贡献。 - |Fix| :meth:`metrics.DetCurveDisplay.from_predictions` , :class:`metrics.PrecisionRecallDisplay.from_predictions` , :class:`metrics.PredictionErrorDisplay.from_predictions` , 和 :class:`metrics.RocCurveDisplay.from_predictions` 现在为子类返回正确的类型。 :pr:`27675` 由 :user:`John Cant ` 贡献。 - |API| 已弃用 :func:`metrics.make_scorer` 中的 `needs_threshold` 和 `needs_proba` 。这些参数将在版本 1.6 中移除。取而代之的是使用接受 `"predict"` 、 `"predict_proba"` 或 `"decision_function"` 或这些值列表的 `response_method` 。 `needs_proba=True` 等同于 `response_method="predict_proba"` ,而 `needs_threshold=True` 等同于 `response_method=("decision_function", "predict_proba")` 。 :pr:`26840` 由 :user:`Guillaume Lemaitre ` 贡献。 - |API| :func:`metrics.mean_squared_error` 和 :func:`metrics.mean_squared_log_error` 中的 `squared` 参数已弃用,并将在 1.6 版本中移除。请改用新的函数 :func:`metrics.root_mean_squared_error` 和 :func:`metrics.root_mean_squared_log_error` 。 :pr:`26734` 由 :user:`Alejandro Martin Gil <101AlexMartin>` 贡献。 :mod:`sklearn.model_selection` .............................. - |Enhancement| :func:`model_selection.learning_curve` 在每次交叉验证折叠失败时引发警告。 :pr:`26299` 由 :user:`Rahil Parikh ` 贡献。 - |Fix| :class:`model_selection.GridSearchCV` , :class:`model_selection.RandomizedSearchCV` , 和 :class:`model_selection.HalvingGridSearchCV` 现在不会更改参数网格中给定的对象(如果它是一个估计器)。 :pr:`26786` 由 `Adrin Jalali`_ 贡献。 :mod:`sklearn.multioutput` .......................... - |Enhancement| 为 :class:`multioutput.ClassifierChain` 添加 `predict_log_proba` 方法。 :pr:`27720` 由 :user:`Guillaume Lemaitre ` 贡献。 :mod:`sklearn.neighbors` ........................ - |Efficiency| :meth:`sklearn.neighbors.KNeighborsRegressor.predict` 和 :meth:`sklearn.neighbors.KNeighborsClassifier.predict_proba` 现在高效支持 密集和稀疏数据集对。 :pr:`27018` 由 :user:`Julien Jerphanion ` 贡献。 - |Efficiency| 当 `radius` 较大且 `algorithm="brute"` 使用非欧几里得度量时, :meth:`neighbors.RadiusNeighborsClassifier.predict` 和 :meth:`neighbors.RadiusNeighborsClassifier.predict_proba` 的性能已提升。 :pr:`26828` 由 :user:`Omar Salman ` 贡献。 - |Fix| 改进了 :class:`neighbors.LocalOutlierFactor` 在 `n_samples=n_neighbors` 时 的错误消息。 :pr:`23317` 由 :user:`Bharat Raghunathan ` 贡献。 - |Fix| :meth:`neighbors.KNeighborsClassifier.predict` 和 :meth:`neighbors.KNeighborsClassifier.predict_proba` 现在在某些样本的所有邻居权重为零时 引发错误。这可能发生在 `weights` 是用户定义函数时。 :pr:`26410` 由 :user:`Yao Xiao ` 贡献。 - |API| :class:`neighbors.KNeighborsRegressor` 现在通过 `metric` 关键字参数直接接受 :class:`metrics.DistanceMetric` 对象,允许使用加速的第三方 :class:`metrics.DistanceMetric` 对象。 :pr:`26267` 由 :user:`Meekail Zain ` 贡献。 :mod:`sklearn.preprocessing` ............................ - |Efficiency| :class:`preprocessing.OrdinalEncoder` 避免两次计算缺失索引以提高效率。 :pr:`27017` 由 :user:`Xuefeng Xu ` 贡献。 - |Efficiency| 提高了 :class:`preprocessing.OneHotEncoder` 和 :class:`preprocessing.OrdinalEncoder` 在检查 `nan` 时的效率。 :pr:`27760` 由 :user:`Xuefeng Xu ` 贡献。 - |Enhancement| 改进了 :class:`preprocessing.FunctionTransformer` 中的警告,当 `func` 返回一个 pandas DataFrame 且输出配置为 pandas 时。 :pr:`26944` 由 `Thomas Fan`_ 提交。 - |Enhancement| :class:`preprocessing.TargetEncoder` 现在支持 `target_type` 'multiclass'。 :pr:`26674` 由 :user:`Lucy Liu ` 提交。 - |Fix| :class:`preprocessing.OneHotEncoder` 和 :class:`preprocessing.OrdinalEncoder` 在 `nan` 作为类别且不是用户提供的类别中的最后一个时引发异常。 :pr:`27309` 由 :user:`Xuefeng Xu ` 提交。 - |Fix| :class:`preprocessing.OneHotEncoder` 和 :class:`preprocessing.OrdinalEncoder` 如果用户提供的类别包含重复项,则引发异常。 :pr:`27328` 由 :user:`Xuefeng Xu ` 提交。 - |Fix| :class:`preprocessing.FunctionTransformer` 在 `transform` 时引发错误,如果 `get_feature_names_out` 的输出与输出容器的列名不一致(如果这些列名已定义)。 :pr:`27801` 由 :user:`Guillaume Lemaitre ` 提交。 - |Fix| 在 :class:`preprocessing.OrdinalEncoder` 中调用 `transform` 而不调用 `fit` 时引发 `NotFittedError` ,因为 `categories` 总是需要检查。 :pr:`27821` 由 :user:`Guillaume Lemaitre ` 提交。 :mod:`sklearn.tree` ................... - |Feature| :class:`tree.DecisionTreeClassifier` , :class:`tree.DecisionTreeRegressor` , :class:`tree.ExtraTreeClassifier` 和 :class:`tree.ExtraTreeRegressor` 现在支持单调约束,当特征应该对目标有正/负影响时很有用。训练数据中的缺失值和多输出目标不受支持。 :pr:`13649` 由 :user:`Samuel Ronsin ` 提交,由 :user:`Patrick O'Reilly ` 发起。 :mod:`sklearn.utils` .................... - |Enhancement| :func:`sklearn.utils.estimator_html_repr` 根据浏览器的 `prefers-color-scheme` 动态调整图表颜色,提供更好的用户体验。 提高了对暗模式环境的适应性。 :pr:`26862` 由 :user:`Andrew Goh Yisheng <9y5>` , `Thomas Fan`_ , `Adrin Jalali`_ 贡献。 - |Enhancement| :class:`~utils.metadata_routing.MetadataRequest` 和 :class:`~utils.metadata_routing.MetadataRouter` 现在有一个 ``consumes`` 方法, 可以用来检查给定的一组参数是否会被消耗。 :pr:`26831` 由 `Adrin Jalali`_ 贡献。 - |Enhancement| 使 :func:`sklearn.utils.check_array` 在从 DIA 数组转换时尝试输出 `int32` 索引的 CSR 和 COO 数组,如果非零条目的数量足够小。这确保了在 Cython 中实现的估计器, 并且不接受 `int64` 索引的稀疏数据结构,现在一致地接受 SciPy 稀疏矩阵和数组的相同稀疏输入格式。 :pr:`27372` 由 :user:`Guillaume Lemaitre ` 贡献。 - |Fix| :func:`sklearn.utils.check_array` 应该接受来自 SciPy 稀疏模块的矩阵和数组。 之前的实现会在 `copy=True` 时失败,因为它调用了特定的 NumPy `np.may_share_memory` , 该函数不适用于 SciPy 稀疏数组,并且对于 SciPy 稀疏矩阵不会返回正确的结果。 :pr:`27336` 由 :user:`Guillaume Lemaitre ` 贡献。 - |Fix| 使用 `readonly_memmap=True` 的 :func:`~utils.estimator_checks.check_estimators_pickle` 现在依赖于 joblib 自身的功能,在加载序列化估计器时分配对齐的内存映射数组,而不是调用一个专用的私有函数, 该函数会在 OpenBLAS 错误检测 CPU 架构时崩溃。 :pr:`27614` 由 :user:`Olivier Grisel ` 贡献。 - |Fix| 当传递稀疏矩阵但 `accept_sparse` 为 `False` 时,:func:`~utils.check_array` 中的错误消息现在建议使用 `.toarray()` 而不是 `X.toarray()` 。 :pr:`27757` 由 :user:`Lucy Liu ` 贡献。 - |Fix| 修复函数 :func:`~utils.check_array` ,当输入是 Series 而不是 DataFrame 时输出正确的错误消息。 :pr:`28090` 由 :user:`Stan Furrer ` 和 :user:`Yao Xiao ` 贡献。 - |API| :func:`sklearn.extmath.log_logistic` 已弃用,并将在 1.6 版本中移除。 请改用 `-np.logaddexp(0, -x)` 。 :pr:`27544` 由 :user:`Christian Lorentzen ` 贡献。 .. rubric:: 代码和文档贡献者 感谢自 1.3 版本以来为项目的维护和改进做出贡献的每一个人,包括: 101AlexMartin, Abhishek Singh Kushwah, Adam Li, Adarsh Wase, Adrin Jalali, Advik Sinha, Alex, Alexander Al-Feghhali, Alexis IMBERT, AlexL, Alex Molas, Anam Fatima, Andrew Goh, andyscanzio, Aniket Patil, Artem Kislovskiy, Arturo Amor, ashah002, avm19, Ben Holmes, Ben Mares, Benoit Chevallier-Mames, Bharat Raghunathan, Binesh Bannerjee, Brendan Lu, Brevin Kunde, Camille Troillard, Carlo Lemos, Chad Parmet, Christian Clauss, Christian Lorentzen, Christian Veenhuis, Christos Aridas, Cindy Liang, Claudio Salvatore Arcidiacono, Connor Boyle, cynthias13w, DaminK, Daniele Ongari, Daniel Schmitz, Daniel Tinoco, David Brochart, Deborah L. Haar, DevanshKyada27, Dimitri Papadopoulos Orfanos, Dmitry Nesterov, DUONG, Edoardo Abati, Eitan Hemed, Elabonga Atuo, Elisabeth Günther, Emma Carballal, Emmanuel Ferdman, epimorphic, Erwan Le Floch, Fabian Egli, Filip Karlo Došilović, Florian Idelberger, Franck Charras, Gael Varoquaux, Ganesh Tata, Gleb Levitski, Guillaume Lemaitre, Haoying Zhang, Harmanan Kohli, Ily, ioangatop, IsaacTrost, Isaac Virshup, Iwona Zdzieblo, Jakub Kaczmarzyk, James McDermott, Jarrod Millman, JB Mountford, Jérémie du Boisberranger, Jérôme Dockès, Jiawei Zhang, Joel Nothman, John Cant, John Hopfensperger, Jona Sassenhagen, Jon Nordby, Julien Jerphanion, Kennedy Waweru, kevin moore, Kian Eliasi, Kishan Ved, Konstantinos Pitas, Koustav Ghosh, Kushan Sharma, ldwy4, Linus, Lohit SundaramahaLingam, Loic Esteve, Lorenz, Louis Fouquet, Lucy Liu, Luis Silvestrin, Lukáš Folwarczný, Lukas Geiger, Malte Londschien, Marcus Fraaß, Marek Hanuš, Maren Westermann, Mark Elliot, Martin Larralde, Mateusz Sokół, mathurinm, mecopur, Meekail Zain, Michael Higgins, Miki Watanabe, Milton Gomez, MN193, Mohammed Hamdy, Mohit Joshi, mrastgoo, Naman Dhingra, Naoise Holohan, Narendra Singh dangi, Noa Malem-Shinitski, Nolan, Nurseit Kamchyev, Oleksii Kachaiev, Olivier Grisel, Omar Salman, partev, Peter Hull, Peter Steinbach, Pierre de Fréminville, Pooja Subramaniam, Puneeth K, qmarcou, Quentin Barthélemy, Rahil Parikh, Rahul Mahajan, Raj Pulapakura, Raphael, Ricardo Peres, Riccardo Cappuzzo, Roman Lutz, Salim Dohri, Samuel O. Ronsin, Sandip Dutta, Sayed Qaiser Ali, scaja, scikit-learn-bot, Sebastian Berg, Shreesha Kumar Bhat, Shubhal Gupta, Søren Fuglede Jørgensen, Stefanie Senger, Tamara, Tanjina Afroj, THARAK HEGDE, thebabush, Thomas J. Fan, Thomas Roehr, Tialo, Tim Head, tongyu, Venkatachalam N, Vijeth Moudgalya, Vincent M, Vivek Reddy P, Vladimir Fokow, Xiao Yuan, Xuefeng Xu, Yang Tao, Yao Xiao, Yuchen Zhou, Yuusuke Hiramatsu