有关此版本主要亮点简短描述,请参阅scikit-learn 1.4 发布亮点

更新日志图例

主要新功能 以前无法实现的大功能。

  • 新功能 以前无法实现的功能。

  • 效率 现有功能现在可能不需要那么多计算或内存。

  • 改进 一项杂项的小改进。

  • 修复 以前未按文档或合理预期工作的功能现在应能正常工作。

  • API 变更 未来您需要更改代码才能达到相同的效果;或者未来某个功能将被移除。

  • 版本 1.4.2#

2024 年 4 月

此版本仅包含对 numpy 2 的支持。

版本 1.4.1#

2024 年 2 月

模型变更#

API 变更 tree.DecisionTreeClassifiertree.DecisionTreeRegressortree.ExtraTreeClassifiertree.ExtraTreeRegressor 中的 tree_.value 属性已从样本数量的加权绝对计数更改为总样本数量的加权分数。 #27639Samuel Ronsin 完成。

  • 元数据路由#

修复 修复了 ColumnTransformer 在另一个元估计器内部使用时的路由问题。 #28188Adrin Jalali 完成。

改进 修复 Pandas 和 Polars dataframe 无需进行鸭子类型检查即可直接验证。 #28195Thomas Fan 完成。

  • 影响多个模块的变更#

效率 修复 部分恢复了 #28191,以避免依赖稀疏矩阵欧几里得成对计算的估计器出现性能回归。受影响的估计器有

sklearn.calibration#

修复 calibration.CalibratedClassifierCV 支持内部估计器输出 float32 类型的 predict_proba#28247Thomas Fan 完成。

修复 cluster.AffinityPropagation 现在避免为相等点分配多个不同簇。 #28121Pietro PeterlongoYao Xiao 完成。

修复verbose_feature_names_out=True 且转换器内部多次使用相同列时,compose.ColumnTransformer 现在能转换为 Polars 数据框。以前,这会因重复的列名而引发错误。 #28262Guillaume Lemaitre 完成。

修复 HistGradientBoostingClassifierHistGradientBoostingRegressor 在使用带扩展数据类型(例如 pd.Int64Dtype)的 pandas DataFrame 进行拟合时的问题。 #28385Loïc Estève 完成。

修复 : impute.SimpleImputer 现在在 .fit.transform 中,如果 fill_value 无法使用 casting='same_kind' 转换为输入值 dtype,则会引发错误。 #28365Leo Grinsztajn 完成。

修复 inspection.permutation_importance 现在能正确处理 sample_weight 和子采样(即 max_features < 1.0)的情况。 #28184Michael Mayer 完成。

修复 linear_model.ARDRegression 现在能处理 predict(X, return_std=True) 的 pandas 输入类型。 #28377Eddie Bergman 完成。

修复 使 preprocessing.FunctionTransformer 更宽松,并在以下情况下用 get_feature_names_out 覆盖输出列名:(i) 输入和输出列名保持不变(在使用 NumPy ufunc 时发生);(ii) 输入列名为数字;(iii) 输出将设置为 Pandas 或 Polars 数据框。 #28241Guillaume Lemaitre 完成。

修复 tree.DecisionTreeClassifiertree.DecisionTreeRegressor 现在能正确处理缺失值。当数据中没有缺失值时,内部准则未初始化,可能导致准则值错误。 #28295Guillaume Lemaitre#28327Adam Li 完成。

改进 修复 utils.metaestimators.available_if 现在将 check 函数的错误作为 AttributeError 的原因重新引发。 #28198Thomas Fan 完成。

2024 年 1 月

模型变更#

以下估计器和函数在使用相同数据和参数进行拟合时,可能会产生与之前版本不同的模型。这通常是由于建模逻辑(错误修复或改进)或随机抽样程序的变化而发生。

效率 linear_model.LogisticRegressionlinear_model.LogisticRegressionCV 现在对于求解器 "lbfgs""newton-cg" 具有更好的收敛性。根据指定的 tol,这两种求解器现在都可以达到更高的系数精度。此外,lbfgs 可以更好地利用 tol,即更快停止或达到更高精度。注意:lbfgs 是默认求解器,因此此更改可能会影响许多模型。此更改还意味着,使用此新版本的 scikit-learn,您的模型的最终系数 coef_intercept_ 将针对这两个求解器发生变化(当再次在相同数据上拟合时)。变化量取决于指定的 tol,对于小值,您将获得更精确的结果。 #26721Christian Lorentzen 完成。

  • 修复 修复了 PyPy 中使用 Cython 损失函数的估计器出现的内存泄漏问题。 #27670Guillaume Lemaitre 完成。

  • 影响所有模块的变更#

主要新功能 转换器现在支持使用 set_output(transform="polars") 进行 Polars 输出。 #27315Thomas Fan 完成。

  • 改进 所有估计器现在都能够识别遵循 DataFrame 交换协议的任何数据框中的列名。通过 np.asarray(df) 返回正确表示形式的数据框有望与我们的估计器和函数一起工作。 #26464Thomas Fan 完成。

  • 改进 估计器的 HTML 表示现在包含指向文档的链接,并按颜色编码以指示估计器是否已拟合(未拟合的估计器为橙色,已拟合的估计器为蓝色)。 #26616Riccardo CappuzzoInes IbnukhseinGael VaroquauxJoel NothmanLilian Boulard 完成。

  • 修复 修复了大多数估计器和函数中的一个错误,该错误会在将参数设置为大整数时导致 TypeError#26648Naoise Holohan 完成。

  • 元数据路由#

以下模型现在在其一个或多个方法中支持元数据路由。有关更多详细信息,请参阅元数据路由用户指南

新功能 LarsCVLassoLarsCV 现在在其 fit 方法中支持元数据路由,并将元数据路由到 CV 分割器。 #27538Omar Salman 完成。

一些估计器现在支持 SciPy 稀疏数组。以下函数和类受到影响:

函数

cluster.compute_optics_graph#27104Maren Westermann 完成,以及 #27250Yao Xiao 完成;

cluster.HDBSCAN#27250Yao Xiao 完成;

一些估计器和函数支持 Array API。这些更改使得估计器和函数可以与其他库(如 JAX、CuPy 和 PyTorch)一起使用。因此,这能够实现一些 GPU 加速计算。

有关更多详细信息,请参阅Array API 支持(实验性)

sklearn.metrics.accuracy_scoresklearn.metrics.zero_one_loss#27137Edoardo Abati 完成;

cluster.compute_optics_graph#27104Maren Westermann 完成,以及 #27250Yao Xiao 完成;

cluster.HDBSCAN#27250Yao Xiao 完成;

修复 二项式对数损失的梯度计算对于绝对值非常大的输入(原始预测)现在在数值上更稳定。在此之前,它可能导致 np.nan。受益于此更改的模型包括 ensemble.GradientBoostingClassifierensemble.HistGradientBoostingClassifierlinear_model.LogisticRegression#28048Christian Lorentzen 完成。

  • 更新日志#

sklearn.base#

改进 base.ClusterMixin.fit_predictbase.OutlierMixin.fit_predict 现在接受 **kwargs,这些参数将传递给估计器的 fit 方法。 #26506Adrin Jalali 完成。

改进 calibration.CalibratedClassifierCVsigmoid 方法的内部目标和梯度已由私有损失模块替换。 #27185Omar Salman 完成。

修复 cluster.SpectralClustering 构造函数中的 degree 参数现在接受实数值而非仅整数值,这与 sklearn.metrics.pairwise.polynomial_kerneldegree 参数一致。 #27668Nolan McMahon 完成。

主要新功能 通过 DataFrame 交换协议,为 compose.ColumnTransformer 添加了 polars 输入支持。Polars 的最低支持版本为 0.19.12#26683Thomas Fan 完成。

  • 修复 cluster.spectral_clusteringcluster.SpectralClustering 现在会引发明确的错误消息,指示不支持带 np.int64 索引的稀疏矩阵和数组。 #27240Yao Xiao 完成。

  • API 变更ColumnTransformer 中,使用 pandas 扩展数据类型并包含 pd.NA 的输出现在会引发 FutureWarning,并将在 1.6 版本中导致 ValueError,除非输出容器已通过 set_output(transform="pandas") 配置为“pandas”。之前,此类输出会导致 dtype 为 object 的 numpy 数组包含 pd.NA,这无法转换为 numpy 浮点数,并在传递给其他 scikit-learn 估计器时引发错误。 #27734Jérôme Dockès 完成。

  • sklearn.covariance#

改进 允许 covariance.shrunk_covariance 通过处理 nd-数组一次性处理多个协方差矩阵。 #25275Quentin Barthélemy 完成。

改进 datasets.make_sparse_spd_matrix 现在使用更节省内存的稀疏布局。它还接受一个新的关键字 sparse_format,允许指定稀疏矩阵的输出格式。默认情况下,sparse_format=None,这会像以前一样返回一个密集 numpy ndarray。 #27438Yao Xiao 完成。

sklearn.decomposition#

sklearn.ensemble#

sklearn.feature_extraction#

sklearn.feature_selection#

sklearn.inspection#

sklearn.kernel_ridge#

sklearn.linear_model#

sklearn.metrics#

sklearn.model_selection#

sklearn.multioutput#

sklearn.neighbors#

sklearn.preprocessing#

sklearn.tree#

sklearn.utils#

  • 改进 sklearn.utils.estimator_html_repr根据浏览器的prefers-color-scheme动态调整图表颜色,提高了对暗模式环境的适应性。#26862Andrew Goh YishengThomas FanAdrin Jalali贡献。

  • 改进 MetadataRequestMetadataRouter现在有一个consumes方法,可用于检查给定的一组参数是否会被消费。#26831Adrin Jalali贡献。

  • 改进 使得sklearn.utils.check_array在从 DIA 数组转换时,如果非零条目数量足够小,则尝试输出int32索引的 CSR 和 COO 数组。这确保了用 Cython 实现且不接受int64索引稀疏数据结构的估计器,现在能够一致地接受 SciPy 稀疏矩阵和数组的相同稀疏输入格式。#27372Guillaume Lemaitre贡献。

  • 修复 sklearn.utils.check_array应该接受稀疏 SciPy 模块中的矩阵和数组。先前的实现在copy=True时会因调用特定 NumPy 函数np.may_share_memory而失败,该函数不适用于 SciPy 稀疏数组,也无法为 SciPy 稀疏矩阵返回正确结果。#27336Guillaume Lemaitre贡献。

  • 修复 check_estimators_picklereadonly_memmap=True时,现在依赖 joblib 自身在加载序列化估计器时分配对齐内存映射数组的能力,而不是调用一个在 OpenBLAS 错误检测 CPU 架构时会崩溃的专用私有函数。#27614Olivier Grisel贡献。

  • 修复 当传递稀疏矩阵但accept_sparseFalse时,check_array中的错误消息现在建议使用.toarray()而不是X.toarray()#27757Lucy Liu贡献。

  • 修复 修复check_array函数,使其在输入为 Series 而不是 DataFrame 时输出正确的错误消息。#28090Stan FurrerYao Xiao贡献。

  • API 变更 sklearn.extmath.log_logistic已弃用,并将在 1.6 版本中移除。请改用-np.logaddexp(0, -x)#27544Christian Lorentzen贡献。

代码和文档贡献者

感谢自 1.3 版本以来为项目维护和改进做出贡献的所有人,包括

101AlexMartin, Abhishek Singh Kushwah, Adam Li, Adarsh Wase, Adrin Jalali, Advik Sinha, Alex, Alexander Al-Feghali, 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, Hleb 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