版本 1.5#
有关本次发布主要亮点简要描述,请参阅 scikit-learn 1.5 版本发布亮点 。
Legend for changelogs
Major Feature something big that you couldn’t do before.
Feature something that you couldn’t do before.
Efficiency an existing feature now may not require as much computation or memory.
Enhancement a miscellaneous minor improvement.
Fix something that previously didn’t work as documented – or according to reasonable expectations – should now work.
API Change you will need to change your code to have the same effect in the future; or a feature will be removed in the future.
版本 1.5.1#
2024年7月
影响多个模块的变更#
Fix 修复了所有估计器输入数据验证中的一个回归问题,当传递由只读缓冲区支持的DataFrame时,会引发意外错误。 #29018 由 Jérémie du Boisberranger 贡献。
Fix 修复了在某些设置下导入时导致死锁的一个回归问题。 #29235 由 Jérémie du Boisberranger 贡献。
变更日志#
sklearn.compose
#
Efficiency 修复了
compose.ColumnTransformer
中的性能回归问题,当n_jobs > 1
时,会为每个转换器复制完整输入数据。 #29330 由 Jérémie du Boisberranger 贡献。
sklearn.metrics
#
Fix 修复了
metrics.r2_score
中的一个回归问题。传递禁用数组API分派的torch CPU张量时,会抱怨非CPU设备,而不是隐式地将这些输入转换为常规NumPy数组。 #29119 由 @Olivier Grisel 贡献。Fix 修复了
metrics.accuracy_score
和metrics.zero_one_loss
中的一个回归问题,导致多标签输入的数组API分派时出错。 #29269 由 Yaroslav Korobko 和 #29336 由 Edoardo Abati 贡献。
sklearn.model_selection
#
Fix 修复了
model_selection.GridSearchCV
中的一个回归问题,对于具有异构参数值的参数网格。 #29078 由 Loïc Estève 贡献。Fix 修复了
model_selection.GridSearchCV
中参数网格包含估计器作为参数值时的回归问题。 #29179 由 Marco Gorelli 提交。Fix 修复了
model_selection.GridSearchCV
中参数网格包含不同大小数组作为参数值时的回归问题。 #29314 由 Marco Gorelli 提交。
sklearn.tree
#
Fix 修复了
tree.export_graphviz
和tree.plot_tree
在32位操作系统上可能导致异常或错误结果的问题。 #29327 由 Loïc Estève 提交。
sklearn.utils
#
API Change
utils.validation.check_array
新增了一个参数force_writeable
,用于控制输出数组的可写性。如果设置为True
,输出数组将被保证为可写的,如果输入数组是只读的,则会进行复制。如果设置为False
,则不对输出数组的可写性做出保证。 #29018 由 Jérémie du Boisberranger 提交。
版本 1.5.0#
2024年5月
安全性#
Fix
feature_extraction.text.CountVectorizer
和feature_extraction.text.TfidfVectorizer
不再在其stop_words_
属性中存储训练集中丢弃的标记。该属性会包含过于频繁(超过max_df
)但同时也过于稀有(低于min_df
)的标记。这修复了一个潜在的安全问题(数据泄露),如果丢弃的稀有标记包含训练集中的敏感信息,而模型开发者并不知情。注意:鼓励这些类的用户使用新版本的 scikit-learn 重新训练他们的管道,或者手动清除之前训练的这些转换器实例中的
stop_words_
属性。该属性仅设计用于模型检查目的,对转换器的行为没有影响。
#28823 由 Olivier Grisel 提交。
更改的模型#
Efficiency
preprocessing.QuantileTransformer
中的子采样现在对密集数组更有效,但拟合的分位数和transform
的结果可能与之前略有不同(保持相同的统计特性)。 #27344 由 Xuefeng Xu 提交。Enhancement
decomposition.PCA
、decomposition.SparsePCA
和decomposition.TruncatedSVD
现在根据组件值而不是使用转换后的数据作为参考来设置components_
属性的符号。这一更改是为了能够在所有PCA
求解器中提供一致的组件符号,包括在此版本中引入的新选项svd_solver="covariance_eigh"
。
影响许多模块的更改#
Fix 当传递一维稀疏数组给期望二维稀疏输入的方法时,抛出带有信息性错误消息的
ValueError
。 #28988 由 Olivier Grisel 提交。API Change 估计器
inverse_transform
方法的输入名称已标准化为X
。因此,Xt
已弃用,并将在版本 1.7 中移除,涉及以下估计器:cluster.FeatureAgglomeration
、decomposition.MiniBatchNMF
、decomposition.NMF
、model_selection.GridSearchCV
、model_selection.RandomizedSearchCV
、pipeline.Pipeline
和preprocessing.KBinsDiscretizer
。 #28756 由 Will Dean 提交。
对数组 API 的支持#
已更新额外的估计器和函数,以包括对所有 Array API 兼容输入的支持。
详情请参阅 数组 API 支持(实验性) 。
函数:
sklearn.metrics.r2_score
现在支持数组 API 兼容的输入。
#27904 由 Eric Lindgren , Franck Charras , Olivier Grisel 和 Tim Head 贡献。
类:
linear_model.Ridge
现在支持svd
求解器的数组 API。 更多详情请参见 数组 API 支持(实验性) 。 #27800 由 Franck Charras , Olivier Grisel 和 Tim Head 贡献。
使用 Meson 构建的支持#
从 scikit-learn 1.5 开始,Meson 是构建 scikit-learn 的主要支持方式, 更多详情请参见 从源代码构建 。
除非我们发现重大障碍,否则将在 scikit-learn 1.6 中放弃对 setuptools 的支持。 1.5.x 版本将支持使用 setuptools 构建 scikit-learn。
Meson 支持构建 scikit-learn 是在 #28040 中由 Loïc Estève 添加的。
元数据路由#
以下模型现在在其一个或多个方法中支持元数据路由。 更多详情请参见 元数据路由用户指南 。
Feature
impute.IterativeImputer
现在在其fit
方法中支持元数据路由。 #28187 由 Stefanie Senger 贡献。Feature
ensemble.BaggingClassifier
和ensemble.BaggingRegressor
现在支持元数据路由。fit
方法现在接受**fit_params
,这些参数通过其fit
方法传递给底层估计器。 #28432 由 Adam Li 和 Benjamin Bossan 贡献。Feature
linear_model.RidgeCV
和linear_model.RidgeClassifierCV
现在在其fit
方法中支持元数据路由, 并将元数据路由到底层的model_selection.GridSearchCV
对象或底层评分器。 #27560 由 Omar Salman 贡献。Feature
GraphicalLassoCV
现在在其方法中支持元数据路由。fit
方法并将元数据路由到 CV 分割器。 #27566 由 Omar Salman 提供。Feature
linear_model.RANSACRegressor
现在支持在其fit
、score
和predict
方法中进行元数据路由,并将元数据路由到其底层估计器的fit
、score
和predict
方法。 #28261 由 Stefanie Senger 提供。Feature
ensemble.VotingClassifier
和ensemble.VotingRegressor
现在支持元数据路由,并通过其fit
方法将**fit_params
传递给底层估计器。 #27584 由 Stefanie Senger 提供。Feature
pipeline.FeatureUnion
现在支持在其fit
和fit_transform
方法中进行元数据路由,并将元数据路由到底层转换器的fit
和fit_transform
。 #28205 由 Stefanie Senger 提供。Fix 修复了通过类属性设置的默认路由请求解析时的问题。 #28435 由 Adrin Jalali 提供。
Fix 修复了当
set_{method}_request
方法作为未绑定方法使用时的问题,这可能发生在尝试装饰它们时。 #28651 由 Adrin Jalali 提供。Fix 防止在具有默认
scoring
参数(None
)的估计器路由元数据时出现RecursionError
。 #28712 由 Stefanie Senger 提供。
变更日志#
sklearn.calibration
#
Fix 修复了
calibration.CalibratedClassifierCV
中的一个回归问题,该问题在字符串目标时错误地抛出了异常。 #28843 由 Jérémie du Boisberranger 贡献。
sklearn.cluster
#
Fix
cluster.MeanShift
类现在对于常数数据能够正确收敛。 #28951 由 Akihiro Kuno 贡献。Fix 在
OPTICS
的fit
方法中创建预计算稀疏矩阵的副本,以避免对稀疏矩阵的就地修改。 #28491 由 Thanh Lam Dang 贡献。Fix
cluster.HDBSCAN
现在支持当algorithm="brute"
或"auto"
时,由sklearn.metrics.pairwise_distances
支持的所有度量。 #28664 由 Manideep Yenugula 贡献。
sklearn.compose
#
Feature 已拟合的
compose.ColumnTransformer
现在实现了__getitem__
,可以通过名称返回已拟合的转换器。#27990 由 Thomas Fan 贡献。Enhancement
compose.TransformedTargetRegressor
现在在fit
中如果只提供了inverse_func
而没有显式设置func
(默认是恒等函数),则会抛出错误。 #28483 由 Stefanie Senger 贡献。Enhancement
compose.ColumnTransformer
现在可以在已拟合的transformers_
属性中以列名或布尔掩码的形式暴露“剩余”列,而不是列索引。 #27657 由 Jérôme Dockès 贡献。Fix 修复了
compose.ColumnTransformer
在n_jobs > 1
时的一个错误,其中中间选定的列作为只读数组传递给转换器。 #28822 由 Jérémie du Boisberranger 贡献。
sklearn.cross_decomposition
#
Fix
cross_decomposition.PLSRegression
的coef_
拟合属性
现在在 scale=True
时同时考虑了 X
和 Y
的尺度。请注意,先前预测的值并未受到此错误的影响。
#28612 由 Guillaume Lemaitre 提交。
API Change 在以下方法中弃用
Y
而改用y
:cross_decomposition.PLSRegression
,cross_decomposition.PLSCanonical
,cross_decomposition.CCA
, 以及cross_decomposition.PLSSVD
。Y
将在版本 1.7 中移除。 #28604 由 David Leon 提交。
sklearn.datasets
#
Enhancement 向以下函数添加了可选参数
n_retries
和delay
:datasets.fetch_20newsgroups
,datasets.fetch_20newsgroups_vectorized
,datasets.fetch_california_housing
,datasets.fetch_covtype
,datasets.fetch_kddcup99
,datasets.fetch_lfw_pairs
,datasets.fetch_lfw_people
,datasets.fetch_olivetti_faces
,datasets.fetch_rcv1
, 以及datasets.fetch_species_distributions
。 默认情况下,这些函数将在网络故障时重试最多 3 次。 #28160 由 Zhehao Liu 和 Filip Karlo Došilović 提交。
sklearn.decomposition
#
Efficiency 使用
svd_solver="full"
的decomposition.PCA
现在分配了一个连续的components_
属性,而不是非连续的奇异向量切片。当n_components << n_features
时,这可以节省一些内存,更重要的是,通过利用连续数组的 BLAS GEMM 缓存局部性,可以加快后续transform
方法的调用速度一个数量级以上。 #27491 由 Olivier Grisel 提交。Enhancement
PCA
现在在svd_solver="auto"
时自动选择 ARPACK 求解器以处理稀疏输入,而不是引发错误。 #28498 由 Thanh Lam Dang 贡献。Enhancement
decomposition.PCA
现在支持一个新的求解器选项svd_solver="covariance_eigh"
, 对于数据点数量多而特征数量少的(例如n_samples >> 1000 > n_features
)数据集, 该选项提供了数量级的速度提升和内存使用减少。svd_solver="auto"
选项已更新, 对于此类数据集会自动使用新求解器。此求解器还接受稀疏输入数据。 #27491 由 Olivier Grisel 贡献。Fix
decomposition.PCA
在svd_solver="arpack"
、whiten=True
且n_components
值大于训练集秩的情况下,对保留数据进行转换时不再返回无限值。 #27491 由 Olivier Grisel 贡献。
sklearn.dummy
#
Enhancement
dummy.DummyClassifier
和dummy.DummyRegressor
现在在fit
后 具有n_features_in_
和feature_names_in_
属性。 #27937 由 Marco vd Boom 贡献。
sklearn.ensemble
#
Efficiency 通过避免调用
predict_proba
,提高了ensemble.HistGradientBoostingClassifier
的predict
运行时效率。 #27844 由 Christian Lorentzen 贡献。Efficiency
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
现在通过在寻找分箱阈值之前预排序数据,速度略有提升。 #28102 由 Christian Lorentzen 贡献。Fix 修复了
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
在为非分类特征指定monotonic_cst
时的错误。 #28925 由 Xiao Yuan 贡献。
sklearn.feature_extraction
#
Efficiency
feature_extraction.text.TfidfTransformer
现在更快且更节省内存,通过使用 NumPy 向量而不是稀疏矩阵来存储逆文档频率。 #18843 由 Paolo Montesel 贡献。Enhancement
feature_extraction.text.TfidfTransformer
现在如果输入矩阵的数据类型是np.float64
或np.float32
,则保留其数据类型。 #28136 由 Guillaume Lemaitre 贡献。
sklearn.feature_selection
#
Enhancement
feature_selection.mutual_info_regression
和feature_selection.mutual_info_classif
现在支持n_jobs
参数。 #28085 由 Neto Menoci 和 Florin Andrei 贡献。Enhancement
feature_selection.RFECV
的cv_results_
属性新增了一个键n_features
,包含每个步骤中选择的特征数量的数组。 #28670 由 Miguel Silva 贡献。
sklearn.impute
#
Enhancement
impute.SimpleImputer
现在支持通过传递函数而不是策略名称来自定义策略。 #28053 由 Mark Elliot 贡献。
sklearn.inspection
#
Fix
inspection.DecisionBoundaryDisplay.from_estimator
在提供polars.DataFrame
时不再警告缺失特征名称。 #28718 由 Patrick Wang 贡献。
sklearn.linear_model
#
Enhancement
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中的求解器"newton-cg"
现在在verbose
设置为正值时发出信息。 #27526 由 Christian Lorentzen 贡献。Fix
linear_model.ElasticNet
、linear_model.ElasticNetCV
、linear_model.Lasso
和linear_model.LassoCV
现在明确不 接受大型稀疏数据格式。 #27576 由 Stefanie Senger 提供。Fix
linear_model.RidgeCV
和RidgeClassifierCV
在cv
为 None 时正确传递sample_weight
给底层评分器。 #27560 由 Omar Salman 提供。Fix
linear_model.OrthogonalMatchingPursuit
中的n_nonzero_coefs_
属性 在设置tol
时将始终为None
,因为在此情况下n_nonzero_coefs
被忽略。 #28557 由 Lucy Liu 提供。API Change
linear_model.RidgeCV
和linear_model.RidgeClassifierCV
现在允许在cv != None
时alpha=0
,这与linear_model.Ridge
和linear_model.RidgeClassifier
一致。 #28425 由 Lucy Liu 提供。API Change 在
linear_model.PassiveAggressiveClassifier
、linear_model.PassiveAggressiveRegressor
、linear_model.SGDClassifier
、linear_model.SGDRegressor
和linear_model.SGDOneClassSVM
中传递average=0
以禁用平均已弃用。请改用average=False
。 #28582 由 Jérémie du Boisberranger 提供。API Change
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中的参数multi_class
已弃用。multi_class
将在 1.7 版本中移除, 并且在内部,对于 3 个及以上的类别,它将始终使用多项式。 如果您仍想使用一对一方案,可以使用OneVsRestClassifier(LogisticRegression(..))
。 #28703 由 Christian Lorentzen 提供。API Change
store_cv_values
和cv_values_
在~linear_model.RidgeCV
和~linear_model.RidgeClassifierCV
中已弃用,取而代之的是store_cv_results
和cv_results_
。 #28915 由 Lucy Liu 提供。
sklearn.manifold
#
API Change 在
manifold.TSNE
中弃用n_iter
,取而代之的是max_iter
。
n_iter
将在版本 1.7 中移除。这使得manifold.TSNE
与其他估计器保持一致。#28471 由 Lucy Liu 提交。
sklearn.metrics
#
Feature
metrics.pairwise_distances
现在也接受计算非数值数组的成对距离。这仅通过自定义度量标准支持。#27456 由 Venkatachalam N 、Kshitij Mathur 和 Julian Libiseller-Egger 提交。Feature
sklearn.metrics.check_scoring
现在当scoring
为dict
、set
、tuple
或list
时返回多度量评分器。#28360 由 Thomas Fan 提交。Feature 新增了
metrics.d2_log_loss_score
,用于计算对数损失的 D^2 分数。#28351 由 Omar Salman 提交。Efficiency 提高了函数
brier_score_loss
、calibration_curve
、det_curve
、precision_recall_curve
、roc_curve
在指定pos_label
参数时的效率。同时提高了RocCurveDisplay
、PrecisionRecallDisplay
、DetCurveDisplay
、CalibrationDisplay
中方法from_estimator
和from_predictions
的效率。#28051 由 Pierre de Fréminville 提交。Fix
metrics.classification_report
现在仅显示准确度而非微平均值,当输入是标签的子集时。#28399 由 Vineet Joshi 提交。Fix 修复了在 Windows 上使用 OpenBLAS 0.3.26 时在成对距离计算中出现的死锁问题。这可能会影响基于邻居的算法。#28692 由 Loïc Estève 提交。
API Change
metrics.precision_recall_curve
弃用了关键字参数probas_pred
,改为使用y_score
。probas_pred
将在版本 1.7 中移除。#28092 由 Adam Li 提交。API Change
metrics.brier_score_loss
已弃用关键字参数y_prob
,改为使用y_proba
。y_prob
将在版本 1.7 中移除。 #28092 由 Adam Li 提交。API Change 对于分类器和分类指标,编码为字节的标签已弃用,并在 v1.7 中将引发错误。 #18555 由 Kaushik Amar Das 提交。
sklearn.mixture
#
Fix
mixture.GaussianMixture
和mixture.BayesianGaussianMixture
的converged_
属性现在反映了最佳拟合的收敛状态,而之前只要任何一个拟合收敛就为True
。 #26837 由 Krsto Proroković 提交。
sklearn.model_selection
#
Major Feature
model_selection.TunedThresholdClassifierCV
通过交叉验证找到最大化分类指标的二分类器的决策阈值。model_selection.FixedThresholdClassifier
是另一种选择,当希望使用固定决策阈值而不进行任何调优时。 #26120 由 Guillaume Lemaitre 提交。Enhancement 忽略组参数的 CV splitters 现在在传递组到 split 时会引发警告。#28210 由 Thomas Fan 提交。
Enhancement
GridSearchCV
、RandomizedSearchCV
、HalvingGridSearchCV
和HalvingRandomSearchCV
的 HTML 图表表示将在refit=True
时显示最佳估计器。#28722 由 Yao Xiao 和 Thomas Fan 提交。Fix
cv_results_
属性(属于model_selection.GridSearchCV
)现在返回适当 NumPy 数据类型的掩码数组,而不是总是返回数据类型object
。#28352 由 Marco Gorelli 提交。Fix
model_selection.train_test_split
现在可以处理 Array API 输入。 之前索引处理不正确,导致在使用严格实现的 Array API(如 CuPY)时出现异常。 #28407 由 Tim Head 贡献。
sklearn.multioutput
#
Enhancement 向
multioutput.ClassifierChain
添加了chain_method
参数。 #27700 由 Lucy Liu 贡献。
sklearn.neighbors
#
Fix 修复了
neighbors.NeighborhoodComponentsAnalysis
,使得get_feature_names_out
返回正确数量的特征名称。 #28306 由 Brendan Lu 贡献。
sklearn.pipeline
#
Feature
pipeline.FeatureUnion
现在可以使用verbose_feature_names_out
属性。如果为True
,get_feature_names_out
将在所有特征名称前加上生成该特征的转换器的名称。如果为False
,get_feature_names_out
将不会为任何特征名称添加前缀,并且在特征名称不唯一时会报错。 #25991 由 Jiawei Zhang 贡献。
sklearn.preprocessing
#
Enhancement
preprocessing.QuantileTransformer
和preprocessing.quantile_transform
现在支持显式禁用子采样。 #27636 由 Ralph Urlus 贡献。
sklearn.tree
#
Enhancement 通过
tree.plot_tree
在 matplotlib 中绘制树时,现在会显示 “True/False” 标签, 以指示样本在给定分割条件下遍历的方向。 #28552 由 Adam Li 贡献。
sklearn.utils
#
Fix
_safe_indexing
现在可以正确处理axis=0
时的 polars DataFrame, 并支持对 polars Series 进行索引。 #28521 由 Yao Xiao 贡献。API Change
utils.IS_PYPY
已被弃用,并将在版本 1.7 中移除。
#28768 由 Jérémie du Boisberranger 提交。
API Change
utils.tosequence
已弃用,并将在版本 1.7 中移除。 #28763 由 Jérémie du Boisberranger 提交。API Change
utils.parallel_backend
和utils.register_parallel_backend
已弃用,并将在版本 1.7 中移除。请改用joblib.parallel_backend
和joblib.register_parallel_backend
。 #28847 由 Jérémie du Boisberranger 提交。API Change 在
type_of_target
中当以字节表示时,引发信息性警告消息。对于分类器和分类指标,以字节编码的标签已弃用,并将在 v1.7 中引发错误。 #18555 由 Kaushik Amar Das 提交。API Change
utils.estimator_checks.check_estimator_sparse_data
被拆分为两个函数:utils.estimator_checks.check_estimator_sparse_matrix
和utils.estimator_checks.check_estimator_sparse_array
。 #27576 由 Stefanie Senger 提交。
代码和文档贡献者
感谢自版本 1.4 以来为项目的维护和改进做出贡献的每一个人,包括:
101AlexMartin, Abdulaziz Aloqeely, Adam J. Stewart, Adam Li, Adarsh Wase, Adrin Jalali, Advik Sinha, Akash Srivastava, Akihiro Kuno, Alan Guedes, Alexis IMBERT, Ana Paula Gomes, Anderson Nelson, Andrei Dzis, Arnaud Capitaine, Arturo Amor, Aswathavicky, Bharat Raghunathan, Brendan Lu, Bruno, Cemlyn, Christian Lorentzen, Christian Veenhuis, Cindy Liang, Claudio Salvatore Arcidiacono, Connor Boyle, Conrad Stevens, crispinlogan, davidleon123, DerWeh, Dipan Banik, Duarte São José, DUONG, Eddie Bergman, Edoardo Abati, Egehan Gunduz, Emad Izadifar, Erich Schubert, Filip Karlo Došilović, Franck Charras, Gael Varoquaux, Gönül Aycı, Guillaume Lemaitre, Gyeongjae Choi, Harmanan Kohli, Hong Xiang Yue, Ian Faust, itsaphel, Ivan Wiryadi, Jack Bowyer, Javier Marin Tur, Jérémie du Boisberranger, Jérôme Dockès, Jiawei Zhang, Joel Nothman, Johanna Bayer, John Cant, John Hopfensperger, jpcars, jpienaar-tuks, Julian Libiseller-Egger, Julien Jerphanion, KanchiMoe, Kaushik Amar Das, keyber, Koustav Ghosh, kraktus, Krsto Proroković, ldwy4, LeoGrin, lihaitao, Linus Sommer, Loic Esteve, Lucy Liu, Lukas Geiger, manasimj, Manuel Labbé, Manuel Morales, Marco Edward Gorelli, Maren Westermann, Marija Vlajic, Mark Elliot, Mateusz Sokół, Mavs, Michael Higgins, Michael Mayer, miguelcsilva, Miki Watanabe, Mohammed Hamdy, myenugula, Nathan Goldbaum, Naziya Mahimkar, Neto, Olivier Grisel, Omar Salman, Patrick Wang, Pierre de Fréminville, Priyash Shah, Puneeth K, Rahil Parikh, raisadz, Raj Pulapakura, Ralf Gommers, Ralph Urlus, Randolf Scholz, Reshama Shaikh, Richard Barnes, Rodrigo Romero, Saad Mahmood, Salim Dohri, Sandip Dutta, SarahRemus, scikit-learn-bot, Shaharyar Choudhry, Shubham, sperret6, Stefanie Senger, Suha Siddiqui, Thanh Lam DANG, thebabush, Thomas J. Fan, Thomas Lazarus, Thomas Li, Tialo, Tim Head, Tuhin Sharma, VarunChaduvula, Vineet Joshi, virchan, Waël Boukhobza, Weyb, Will Dean, Xavier Beltran, Xiao Yuan, Xuefeng Xu, Yao Xiao