版本 1.4#
有关本次发布主要亮点内容的简要描述,请参阅 scikit-learn 1.4 版本发布亮点 。
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.4.2#
2024年4月
本次发布仅包括对 numpy 2 的支持。
版本 1.4.1#
2024年2月
更改的模型#
API Change
tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
中的tree_.value
属性 从样本数量的加权绝对计数更改为总样本数量的加权分数。 #27639 由 Samuel Ronsin 贡献。
元数据路由#
Fix 修复了在另一个元估计器内部使用时
ColumnTransformer
的路由问题。 #28188 由 Adrin Jalali 贡献。Fix 当传递给包含不支持元数据路由的子估计器的元估计器时,不再引发错误。 #28256 由 Adrin Jalali 贡献。
Fix 修复了
multioutput.MultiOutputRegressor
和multioutput.MultiOutputClassifier
,使其在启用元数据路由时能够与不消耗任何元数据的估计器一起工作。 #28240 由 Adrin Jalali 贡献。
DataFrame 支持#
Enhancement Fix 直接验证 Pandas 和 Polars 数据帧,无需鸭子类型检查。 #28195 由 Thomas Fan 贡献。
影响多个模块的更改#
Efficiency Fix 部分回退 #28191 ,以避免在使用稀疏矩阵进行欧几里得成对计算的估计器中出现性能回归。受影响的估计器包括:
#28235 by Julien Jerphanion .
Fix 修复了在使用
set_output
并设置transform
为pandas
或polars
时,所有 scikit-learn 转换器的一个错误。该错误可能导致返回数据框的列名错误。 #28262 by Guillaume Lemaitre .Fix 当用户尝试在
StackingClassifier
、StackingClassifier
、StackingClassifier
、SelectFromModel
、RFE
、SelfTrainingClassifier
、OneVsOneClassifier
、OutputCodeClassifier
或OneVsRestClassifier
中使用其子估计器未实现的方法时,AttributeError
现在会在追溯中重新抛出。 #28167 by Stefanie Senger .
变更日志#
sklearn.calibration
#
Fix
calibration.CalibratedClassifierCV
支持内部估计器的 float32 输出的 predict_proba 。#28247 by Thomas Fan .
sklearn.cluster
#
Fix
cluster.AffinityPropagation
现在避免为相等的点分配多个不同的聚类。 #28121 by Pietro Peterlongo 和
Yao Xiao .
Fix 当聚类数大于非重复样本数时,避免
cluster.KMeans
中的无限循环。 #28165 由 Jérémie du Boisberranger 贡献。
sklearn.compose
#
Fix
compose.ColumnTransformer
现在在verbose_feature_names_out=True
且转换器内部多次使用相同列时,会转换为 polars 数据帧。之前,由于重复的列名会引发错误。 #28262 由 Guillaume Lemaitre 贡献。
sklearn.ensemble
#
:mod:` sklearn.impute `#
Fix : :class:` impute.SimpleImputer
现在在
.fit和
.transform中如果
fill_value不能以
casting=’same_kind’转换为输入值的数据类型,则会引发错误。 :pr:
28365由 :user:
Leo Grinsztajn <LeoGrin> `贡献。
:mod:` sklearn.inspection `#
Fix :func:` inspection.permutation_importance
现在可以正确处理
sample_weight与子采样(即
max_features< 1.0)。 :pr:
28184由 :user:
Michael Mayer <mayer79> `贡献。
:mod:` sklearn.linear_model `#
Fix :class:` linear_model.ARDRegression
现在可以处理
predict(X, return_std=True)的 pandas 输入类型。 :pr:
28377由 :user:
Eddie Bergman <eddiebergman> `贡献。
:mod:` sklearn.preprocessing `#
Fix 使 :class:` preprocessing.FunctionTransformer `更加宽松并覆盖
在以下情况下使用` get_feature_names_out 输出列名:
(i) 输入和输出列名保持不变(在使用 NumPy
ufunc 时发生);
(ii) 输入列名为数字;
(iii) 输出将设置为 Pandas 或 Polars 数据框。
:pr:
28241 由 :user:
Guillaume Lemaitre <glemaitre> `提交。
Fix :class:` preprocessing.FunctionTransformer
现在还会在调用
set_output时发出警告, 当
transform=”polars”且
func未返回 Polars 数据框或未指定
feature_names_out ` 。 :pr:` 28263由 :user:
Guillaume Lemaitre <glemaitre> `提交。Fix :class:` preprocessing.TargetEncoder
在
target_type=”continuous”且输入为只读时不再失败。 特别是,现在在启用 pandas 的 copy-on-write 模式下也能正常工作。 :pr:
28233由 :user:
John Hopfensperger <s-banach> `提交。
:mod:` sklearn.tree `#
Fix :class:` tree.DecisionTreeClassifier
和 :class:
tree.DecisionTreeRegressor现在能正确处理缺失值。 当数据中没有缺失值时,内部标准未初始化,导致可能出现错误的标准值。 :pr:
28295由 :user:
Guillaume Lemaitre <glemaitre>提交, 以及 :pr:
28327由 :user:
Adam Li <adam2392> `提交。
:mod:` sklearn.utils `#
版本 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 <lorentzenchr> `贡献。Fix 修复了在 PyPy 中使用 Cython 损失函数的估计器中出现的内存泄漏问题。 :pr:` 27670
由 :user:
Guillaume Lemaitre <glemaitre> `贡献。
影响所有模块的变更#
Major Feature 转换器现在支持 polars 输出,使用` set_output(transform=”polars”) ` 。 :pr:` 27315
由
Thomas Fan `_ 贡献。Enhancement 所有估计器现在可以识别任何采用
- ` DataFrame 交换协议 <https://data-apis.org/dataframe-protocol/latest/purpose_and_scope.html>
__ 的数据框中的列名。预期通过
np.asarray(df) `返回正确表示的数据框可以与我们的估计器和函数一起工作。 :pr:` 26464
由
Thomas Fan `_ 贡献。
Enhancement 估计器的 HTML 表示现在包含指向文档的链接,并根据估计器是否拟合进行颜色编码(未拟合的估计器为橙色,已拟合的估计器为蓝色)。 :pr:` 26616
由 :user:
Riccardo Cappuzzo <rcap107> `贡献。
:user:` Ines Ibnukhsein <Ines1999> , :user:
Gael Varoquaux <GaelVaroquaux> ,
` Joel Nothman `_ 和 :user:
Lilian Boulard <LilianBoulard> `.
Fix 修复了大多数估计器和函数中的一个错误,当将参数设置为 一个较大的整数时会导致` TypeError ` 。 :pr:` 26648
由 :user:
Naoise Holohan <naoise-h> `提交。
元数据路由#
以下模型现在支持在其一个或多个方法中进行元数据路由。有关更多详细信息,请参阅 :ref:` Metadata Routing User Guide <metadata_routing> ` 。
Feature :class:` LarsCV
和 :class:
LassoLarsCV现在支持在其
fit方法中进行元数据 路由,并将元数据路由到 CV 分割器。 :pr:
27538由 :user:
Omar Salman <OmarManzoor> `提交。Feature :class:` multiclass.OneVsRestClassifier
, :class:
multiclass.OneVsOneClassifier和 :class:
multiclass.OutputCodeClassifier`现在支持在其fit
和partial_fit
方法中进行元数据路由, 并将元数据路由到底层估计器的fit
和partial_fit
。 #27308 由 Stefanie Senger 提交。Feature
pipeline.Pipeline
现在根据 metadata routing user guide 支持元数据路由。 #26789 由 Adrin Jalali 提交。Feature
cross_validate
,cross_val_score
, 和cross_val_predict
现在支持元数据路由。元数据被路由到估计器的fit
,评分器, 以及 CV 分割器的split
。元数据通过新的params
参数接受。fit_params
已弃用,将在版本 1.6 中移除。groups
参数在启用元数据路由时不作为单独参数接受,应通过params
参数传递。 #26896 由 Adrin Jalali 提交。Feature
GridSearchCV
,RandomizedSearchCV
,HalvingGridSearchCV
, 和
HalvingRandomSearchCV
现在支持在其 fit
和 score
方法中进行元数据路由,并将元数据路由到底层估计器的 fit
方法、CV 分割器和评分器。
#27058 由 Adrin Jalali 贡献。
Feature
ColumnTransformer
现在根据 元数据路由用户指南 支持元数据路由。 #27005 由 Adrin Jalali 贡献。Feature
linear_model.LogisticRegressionCV
现在支持元数据路由。linear_model.LogisticRegressionCV.fit
现在接受**params
,这些参数会被传递给底层的分割器和评分器。linear_model.LogisticRegressionCV.score
现在接受**score_params
,这些参数会被传递给底层的评分器。 #26525 由 Omar Salman 贡献。Feature
feature_selection.SelectFromModel
现在在fit
和partial_fit
方法中支持元数据路由。 #27490 由 Stefanie Senger 贡献。Feature
linear_model.OrthogonalMatchingPursuitCV
现在支持元数据路由。其fit
方法现在接受**fit_params
,这些参数会被传递给底层的分割器。 #27500 由 Stefanie Senger 贡献。Feature
ElasticNetCV
,LassoCV
,MultiTaskElasticNetCV
和MultiTaskLassoCV
现在支持元数据路由,并将元数据路由到 CV 分割器。 #27478 由 Omar Salman 贡献。Fix 所有尚未实现元数据路由的元估计器现在在
get_metadata_routing
和fit
方法中如果启用了元数据路由并传递了任何元数据,则会引发NotImplementedError
。 #27389 由 Adrin Jalali 贡献。
对 SciPy 稀疏数组的支持#
多个估计器现在支持 SciPy 稀疏数组。以下函数和类受到影响:
函数:
cluster.compute_optics_graph
在 #27104 中由 Maren Westermann 和在 #27250 中由 Yao Xiao 完成;decomposition.non_negative_factorization
在 #27100 中由 Isaac Virshup 完成;feature_selection.f_regression
在 #27239 中由 Yaroslav Korobko 完成;feature_selection.r_regression
在 #27239 中由 Yaroslav Korobko 完成;manifold.trustworthiness
在 #27250 中由 Yao Xiao 完成;manifold.spectral_embedding
在 #27240 中由 Yao Xiao 完成;metrics.pairwise_distances
在 #27250 中由 Yao Xiao 完成;
类:
cluster.HDBSCAN
在 #27250 中由 Yao Xiao 完成;cluster.KMeans
在 #27179 中由 Nurseit Kamchyev 完成;cluster.OPTICS
在 #27104 中由 Maren Westermann 完成,并在 #27250 中由 Yao Xiao 完成;cluster.SpectralClustering
在 #27161 中由 Bharat Raghunathan 完成;decomposition.NMF
在 #27100 中由 Isaac Virshup 完成;feature_extraction.text.TfidfTransformer
在 #27219 中由 Yao Xiao 完成;manifold.Isomap
在 #27250 中由 Yao Xiao 完成;manifold.SpectralEmbedding
在 #27240 中由 Yao Xiao 完成。manifold.TSNE
在 #27250 由 Yao Xiao 贡献;impute.SimpleImputer
在 #27277 由 Yao Xiao 贡献;impute.IterativeImputer
在 #27277 由 Yao Xiao 贡献;impute.KNNImputer
在 #27277 由 Yao Xiao 贡献;kernel_approximation.PolynomialCountSketch
在 #27301 由 Lohit SundaramahaLingam 贡献;random_projection.GaussianRandomProjection
在 #27314 由 Stefanie Senger 贡献;random_projection.SparseRandomProjection
在 #27314 由 Stefanie Senger 贡献.
对数组 API 的支持#
多个估计器和函数支持 数组 API 。这些更改使得可以使用 估计器和函数与其他库如 JAX、CuPy 和 PyTorch。因此,这使得一些 GPU 加速计算成为可能。
详情请参见 数组 API 支持(实验性) 。
函数:
sklearn.metrics.accuracy_score
和sklearn.metrics.zero_one_loss
在 #27137 由 Edoardo Abati 贡献;sklearn.model_selection.train_test_split
在 #26855 由 Tim Head 贡献;is_multilabel
在 #27601 由 Yaroslav Korobko 贡献.
类:
decomposition.PCA
对于full
和randomized
求解器(带 QR 幂迭代)在 #26315 , #27098 和 #27431 由 Mateusz Sokół , Olivier Grisel 和 Edoardo Abati 贡献;preprocessing.MinMaxScaler
在 #26243 由 Tim Head 贡献;
私有损失函数模块#
Fix 二项式对数损失的梯度计算现在对绝对值非常大的输入(原始预测)在数值上更加稳定。之前可能会导致
np.nan
。受益于此更改的模型包括ensemble.GradientBoostingClassifier
、ensemble.HistGradientBoostingClassifier
和linear_model.LogisticRegression
。#28048 由 Christian Lorentzen 贡献。
更新日志#
sklearn.base
#
Enhancement
base.ClusterMixin.fit_predict
和base.OutlierMixin.fit_predict
现在接受**kwargs
,这些参数会传递给估计器的fit
方法。#26506 由 Adrin Jalali 贡献。Enhancement
base.TransformerMixin.fit_transform
和base.OutlierMixin.fit_predict
现在会在transform
/predict
消耗元数据,但相应的类中未定义自定义fit_transform
/fit_predict
时发出警告。#26831 由 Adrin Jalali 贡献。Enhancement
base.clone
现在支持dict
作为输入并创建一个副本。
#26786 由 Adrin Jalali 提交。
API Change
process_routing
现在具有不同的签名。前两个参数(对象和方法)仅位置参数,所有元数据都作为关键字参数传递。 #26909 由 Adrin Jalali 提交。
sklearn.calibration
#
Enhancement
calibration.CalibratedClassifierCV
的sigmoid
方法的内部目标和梯度已被私有损失模块替换。 #27185 由 Omar Salman 提交。
sklearn.cluster
#
Fix
cluster.SpectralClustering
构造函数中的degree
参数现在接受实数值,而不仅仅是整数值,与sklearn.metrics.pairwise.polynomial_kernel
的degree
参数一致。 #27668 由 Nolan McMahon 提交。Fix 修复了
cluster.OPTICS
中的一个错误,该错误在基于前驱的聚类校正中使用了错误的索引。这将导致依赖于数据顺序的不一致结果。 #26459 由 Haoying Zhang 和 Guillaume Lemaitre 提交。Fix 改进了在
cluster.HDBSCAN
的fit
方法中检查连接组件数量时的错误消息。 #27678 由 Ganesh Tata 提交。Fix 在
cluster.DBSCAN
的fit
方法中创建预计算稀疏矩阵的副本,以避免对稀疏矩阵的就地修改。 #27651 由 Ganesh Tata 提交。Fix 当
metric="precomputed"
且通过store_centers
参数请求存储中心时,抛出适当的ValueError
。 #27898 由 Guillaume Lemaitre 提交。API Change
kdtree
和balltree
值已被弃用,并分别重命名为kd_tree
和ball_tree
,用于cluster.DBSCAN
的algorithm
参数。API Change 在
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
中,选项metric=None
在版本 1.4 中已被弃用,并将在版本 1.6 中移除。请改用默认值。 #27828 由 Guillaume Lemaitre 提交。
sklearn.compose
#
Major Feature 通过 DataFrame Interchange Protocol ,为
compose.ColumnTransformer
添加了对 polars 输入的支持。polars 的最低支持版本为0.19.12
。 #26683 由 Thomas Fan 提交。Fix
cluster.spectral_clustering
和cluster.SpectralClustering
现在会明确抛出一个错误消息,指示不支持稀疏矩阵和带有np.int64
索引的数组。 #27240 由 Yao Xiao 提交。API Change 在
ColumnTransformer
中,使用 pandas 扩展数据类型并包含pd.NA
的输出现在会导致一个FutureWarning
,并且在版本 1.6 中将导致ValueError
,除非输出容器已配置为 “pandas” 并使用set_output(transform="pandas")
。在此之前,此类输出会导致包含pd.NA
的 numpy 数组,其数据类型为object
,无法转换为 numpy 浮点数,并在传递给其他 scikit-learn 估计器时导致错误。 #27734 由 Jérôme Dockès 提交。
sklearn.covariance
#
Enhancement 允许
covariance.shrunk_covariance
通过处理多维数组一次处理多个协方差矩阵。 #25275 由 Quentin Barthélemy 提交。API Change Fix
ColumnTransformer
现在替换"passthrough"
在已拟合的transformers_
属性中,对应一个FunctionTransformer
。 #27204 由 Adrin Jalali 贡献。
sklearn.datasets
#
Enhancement
datasets.make_sparse_spd_matrix
现在使用更节省内存的稀疏布局。它还接受一个新的关键字sparse_format
,允许指定稀疏矩阵的输出格式。默认情况下sparse_format=None
,与之前一样返回一个密集的 numpy ndarray。 #27438 由 Yao Xiao 贡献。Fix
datasets.dump_svmlight_file
现在在X
为只读时(例如numpy.memmap
实例)不会引发ValueError
。 #28111 由 Yao Xiao 贡献。API Change
datasets.make_sparse_spd_matrix
弃用了关键字参数dim
,改为使用n_dim
。dim
将在版本 1.6 中移除。 #27718 由 Adam Li 贡献。
sklearn.decomposition
#
Feature
decomposition.PCA
现在支持在使用arpack
求解器时输入scipy.sparse.sparray
和scipy.sparse.spmatrix
。在处理像datasets.fetch_20newsgroups_vectorized
这样的稀疏数据时,这可以带来 100 倍的速度提升(单线程)和 70 倍的内存使用减少。基于 Alexander Tarashansky 在 scanpy 中的实现。 #18689 由 Isaac Virshup 和 Andrey Portnoy 贡献。Enhancement 在
decomposition.non_negative_factorization
、decomposition.NMF
和decomposition.MiniBatchNMF
的n_components
参数中添加了 “auto” 选项,以在使用自定义初始化时自动从 W 或 H 形状推断组件数量。该参数的默认值将在版本 1.6 中从None
更改为auto
。
#26634 由 Alexandre Landeau 和 Alexandre Vigny 贡献。
Fix
decomposition.dict_learning_online
不再忽略参数max_iter
。 #27834 由 Guillaume Lemaitre 贡献。Fix
decomposition.KernelPCA
构造函数中的degree
参数现在接受实数值,而不仅仅是整数值,以符合sklearn.metrics.pairwise.polynomial_kernel
中的degree
参数。 #27668 由 Nolan McMahon 贡献。API Change
decomposition.MiniBatchDictionaryLearning
、decomposition.MiniBatchSparsePCA
和decomposition.dict_learning_online
中的选项max_iter=None
已弃用,并将在版本 1.6 中移除。请改用默认值。 #27834 由 Guillaume Lemaitre 贡献。
sklearn.ensemble
#
Major Feature
ensemble.RandomForestClassifier
和ensemble.RandomForestRegressor
在标准为gini
、entropy
或log_loss
(分类)或squared_error
、friedman_mse
或poisson
(回归)时支持缺失值。 #26391 由 Thomas Fan 贡献。Major Feature
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
支持categorical_features="from_dtype"
,该选项将 Pandas 或 Polars 的 Categorical dtype 列视为算法中的类别。categorical_features="from_dtype"
将在 v1.6 中成为默认设置。分类特征不再需要用数字编码。当分类特征为数字时,最大值不再需要小于max_bins
;只有类别数量(唯一值)必须小于max_bins
。 #26411 由 Thomas Fan 贡献,#27835 由 Jérôme Dockès 贡献。Major Feature
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
新增了参数max_features
,用于指定每次分割时随机选择的特征比例。 #27139 由 Christian Lorentzen 贡献。Feature
ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
和ensemble.ExtraTreesRegressor
现在支持单调约束,这在特征对目标有正/负影响时非常有用。 训练数据中的缺失值和多输出目标尚不支持。 #13649 由 Samuel Ronsin 贡献, 由 Patrick O’Reilly 发起。Efficiency
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
现在通过在减法技巧中重用父节点的直方图作为子节点的直方图,速度有所提升。 实际上,需要分配和释放的内存减少了。 #27865 由 Christian Lorentzen 贡献。Efficiency
ensemble.GradientBoostingClassifier
速度更快, 特别是对于二分类和多分类问题,得益于私有损失函数模块。 #26278 和 #28095 由 Christian Lorentzen 贡献。Efficiency 改进了在稀疏数据上训练时
ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
的运行时和内存使用。 #26957 由 Thomas Fan 贡献。Efficiency
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
在scoring
是metrics.get_scorer_names
中列出的预定义指标且启用早停时,速度更快。 #26163 由 Thomas Fan 贡献。Enhancement 所有森林方法新增了一个拟合属性
estimators_samples_
,包括
ensemble.RandomForestClassifier
, ensemble.RandomForestRegressor
,
ensemble.ExtraTreesClassifier
和 ensemble.ExtraTreesRegressor
,
允许检索用于每个树估计器的训练样本索引。
#26736 由 Adam Li 提交。
Fix 修复了当输入为稀疏矩阵且
contamination
设置为浮点值时,ensemble.IsolationForest
的问题。 #27645 由 Guillaume Lemaitre 提交。Fix 在请求多输出模型的 OOB 分数时,对于所有目标都被四舍五入为整数的情况,
ensemble.RandomForestRegressor
和ensemble.ExtraTreesRegressor
会引发ValueError
。 这被识别为一个多类问题。 #27817 由 Daniele Ongari 提交。Fix 更改了估计器标签,以确认
ensemble.VotingClassifier
,ensemble.VotingRegressor
,ensemble.StackingClassifier
,ensemble.StackingRegressor
支持缺失值, 前提是所有estimators
都支持缺失值。 #27710 由 Guillaume Lemaitre 提交。Fix 支持加载在不同位数平台上生成的
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
的 pickle 文件。 一个典型的例子是在 64 位机器上训练并序列化模型,然后在 32 位机器上加载模型进行预测。 #28074 由 Christian Lorentzen 和 Loïc Estève 提交。API Change 在
ensemble.AdaBoostClassifier
中,algorithm
参数SAMME.R
已被弃用, 并将在 1.6 版本中移除。 #26830 由 Stefanie Senger 提交。
sklearn.feature_extraction
#
API Change 在未拟合的实例中,将错误类型从
AttributeError
更改为exceptions.NotFittedError
。
feature_extraction.DictVectorizer
用于以下方法:
feature_extraction.DictVectorizer.inverse_transform
,
feature_extraction.DictVectorizer.restrict
,
feature_extraction.DictVectorizer.transform
.
#24838 由 Lorenz Hertel 提交。
sklearn.feature_selection
#
Enhancement
feature_selection.SelectKBest
,feature_selection.SelectPercentile
, 和feature_selection.GenericUnivariateSelect
现在支持通过提供一个接受X
和y=None
的score_func
进行无监督特征选择。 #27721 由 Guillaume Lemaitre 提交。Enhancement
feature_selection.SelectKBest
和feature_selection.GenericUnivariateSelect
在mode='k_best'
模式下,当k
大于特征数量时会显示警告。 #27841 由 Thomas Fan 提交。Fix
feature_selection.RFE
和feature_selection.RFECV
在输入验证期间不再检查 nans。 #21807 由 Thomas Fan 提交。
sklearn.inspection
#
Enhancement
inspection.DecisionBoundaryDisplay
现在接受一个参数class_of_interest
,用于在绘制由response_method="predict_proba"
或response_method="decision_function"
提供的响应时选择感兴趣的类别。它允许绘制二分类和多分类器的决策边界。 #27291 由 Guillaume Lemaitre 提交。Fix
inspection.DecisionBoundaryDisplay.from_estimator
和inspection.PartialDependenceDisplay.from_estimator
现在返回子类的正确类型。 #27675 由 John Cant 提交。API Change
inspection.DecisionBoundaryDisplay
当估计器未实现请求的响应方法时,会引发AttributeError
而不是ValueError
。 #27291 由 Guillaume Lemaitre 提交。
sklearn.kernel_ridge
#
Fix
kernel_ridge.KernelRidge
构造函数中的degree
参数现在接受实数值,而不仅仅是整数值,以符合sklearn.metrics.pairwise.polynomial_kernel
中的degree
参数。 #27668 由 Nolan McMahon 贡献。
sklearn.linear_model
#
Efficiency
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
现在对于"lbfgs"
和"newton-cg"
求解器具有更好的收敛性。这两个求解器现在可以根据指定的tol
达到更高的系数精度。此外,lbfgs 可以更好地利用tol
,即更快停止或达到更高精度。这是通过更好地缩放目标函数实现的,即使用每个样本损失的平均值而不是总和。 #26721 由 Christian Lorentzen 贡献。Efficiency 使用
"newton-cg"
求解器的linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
在某些数据和参数设置下可以显著加快。这是通过更好地检查线搜索收敛,考虑梯度信息以忽略微小的损失改进实现的。 #26721 由 Christian Lorentzen 贡献。Efficiency
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中的"newton-cg"
求解器使用的内存略少。效果与系数数量(n_features * n_classes
)成正比。 #27417 由 Christian Lorentzen 贡献。Fix 确保
linear_model.ARDRegression
和linear_model.BayesianRidge
的sigma_
属性在float32
数据上拟合时始终具有float32
数据类型,即使在 NumPy 2 的类型提升规则下也是如此。 #27899 由 Olivier Grisel 提交。API Change
linear_model.SGDClassifier
和linear_model.SGDOneClassSVM
的属性loss_function_
已被弃用,并将在版本 1.6 中移除。 #27979 由 Christian Lorentzen 提交。
sklearn.metrics
#
Efficiency 通过
metrics.DistanceMetric
计算 CSR x CSR、Dense x CSR 和 CSR x Dense 数据集的成对距离现在快了 1.5 倍。 #26765 由 Meekail Zain 提交。Efficiency 通过
metrics.DistanceMetric
计算 CSR x CSR、Dense x CSR 和 CSR x Dense 的距离现在使用约 50% 更少的内存,并且输出的距离与提供的数据具有相同的 dtype。 #27006 由 Meekail Zain 提交。Enhancement 改进了使用
metrics.PrecisionRecallDisplay
和metrics.RocCurveDisplay
类获得的图的渲染效果。x 轴和 y 轴的限制设置为 [0, 1],并且两个轴之间的纵横比设置为 1,以获得一个正方形图。 #26366 由 Mojdeh Rastgoo 提交。Enhancement 添加了
neg_root_mean_squared_log_error_scorer
作为评分器 #26734 由 Alejandro Martin Gil 提交。Enhancement
metrics.confusion_matrix
现在会在y_true
和y_pred
中只找到一个标签时发出警告。 #27650 由 Lucy Liu 提交。Fix 使用
metrics.pairwise.euclidean_distances
计算成对距离时,当X
作为float64
数组提供,而X_norm_squared
作为float32
数组提供时,不再引发异常。 #27624 由 Jérôme Dockès 提交。Fix
f1_score
现在在处理各种除以零的情况时提供正确的值,通过使用不依赖于精确度和召回值的公式。 #27577 由 Omar Salman 和 Guillaume Lemaitre 提交。Fix
metrics.make_scorer
现在在使用回归器于请求非阈值决策函数的评分器时会引发错误(来自decision_function
或predict_proba
)。此类评分器特定于分类。 #26840 由 Guillaume Lemaitre 贡献。Fix
metrics.DetCurveDisplay.from_predictions
,metrics.PrecisionRecallDisplay.from_predictions
,metrics.PredictionErrorDisplay.from_predictions
, 和metrics.RocCurveDisplay.from_predictions
现在为子类返回正确的类型。 #27675 由 John Cant 贡献。API Change 已弃用
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")
。 #26840 由 Guillaume Lemaitre 贡献。API Change
metrics.mean_squared_error
和metrics.mean_squared_log_error
中的squared
参数已弃用,并将在 1.6 版本中移除。请改用新的函数metrics.root_mean_squared_error
和metrics.root_mean_squared_log_error
。 #26734 由 Alejandro Martin Gil 贡献。
sklearn.model_selection
#
Enhancement
model_selection.learning_curve
在每次交叉验证折叠失败时引发警告。 #26299 由 Rahil Parikh 贡献。Fix
model_selection.GridSearchCV
,model_selection.RandomizedSearchCV
, 和model_selection.HalvingGridSearchCV
现在不会更改参数网格中给定的对象(如果它是一个估计器)。 #26786 由 Adrin Jalali 贡献。
sklearn.multioutput
#
Enhancement 为
multioutput.ClassifierChain
添加predict_log_proba
方法。 #27720 由 Guillaume Lemaitre 贡献。
sklearn.neighbors
#
Efficiency
sklearn.neighbors.KNeighborsRegressor.predict
和sklearn.neighbors.KNeighborsClassifier.predict_proba
现在高效支持 密集和稀疏数据集对。 #27018 由 Julien Jerphanion 贡献。Efficiency 当
radius
较大且algorithm="brute"
使用非欧几里得度量时,neighbors.RadiusNeighborsClassifier.predict
和neighbors.RadiusNeighborsClassifier.predict_proba
的性能已提升。 #26828 由 Omar Salman 贡献。Fix 改进了
neighbors.LocalOutlierFactor
在n_samples=n_neighbors
时 的错误消息。 #23317 由 Bharat Raghunathan 贡献。Fix
neighbors.KNeighborsClassifier.predict
和neighbors.KNeighborsClassifier.predict_proba
现在在某些样本的所有邻居权重为零时 引发错误。这可能发生在weights
是用户定义函数时。 #26410 由 Yao Xiao 贡献。API Change
neighbors.KNeighborsRegressor
现在通过metric
关键字参数直接接受metrics.DistanceMetric
对象,允许使用加速的第三方metrics.DistanceMetric
对象。 #26267 由 Meekail Zain 贡献。
sklearn.preprocessing
#
Efficiency
preprocessing.OrdinalEncoder
避免两次计算缺失索引以提高效率。 #27017 由 Xuefeng Xu 贡献。Efficiency 提高了
preprocessing.OneHotEncoder
和preprocessing.OrdinalEncoder
在检查nan
时的效率。 #27760 由 Xuefeng Xu 贡献。Enhancement 改进了
preprocessing.FunctionTransformer
中的警告,当func
返回一个 pandas DataFrame 且输出配置为 pandas 时。 #26944 由 Thomas Fan 提交。Enhancement
preprocessing.TargetEncoder
现在支持target_type
‘multiclass’。 #26674 由 Lucy Liu 提交。Fix
preprocessing.OneHotEncoder
和preprocessing.OrdinalEncoder
在nan
作为类别且不是用户提供的类别中的最后一个时引发异常。 #27309 由 Xuefeng Xu 提交。Fix
preprocessing.OneHotEncoder
和preprocessing.OrdinalEncoder
如果用户提供的类别包含重复项,则引发异常。 #27328 由 Xuefeng Xu 提交。Fix
preprocessing.FunctionTransformer
在transform
时引发错误,如果get_feature_names_out
的输出与输出容器的列名不一致(如果这些列名已定义)。 #27801 由 Guillaume Lemaitre 提交。Fix 在
preprocessing.OrdinalEncoder
中调用transform
而不调用fit
时引发NotFittedError
,因为categories
总是需要检查。 #27821 由 Guillaume Lemaitre 提交。
sklearn.tree
#
Feature
tree.DecisionTreeClassifier
,tree.DecisionTreeRegressor
,tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
现在支持单调约束,当特征应该对目标有正/负影响时很有用。训练数据中的缺失值和多输出目标不受支持。 #13649 由 Samuel Ronsin 提交,由 Patrick O’Reilly 发起。
sklearn.utils
#
Enhancement
sklearn.utils.estimator_html_repr
根据浏览器的prefers-color-scheme
动态调整图表颜色,提供更好的用户体验。 提高了对暗模式环境的适应性。 #26862 由 Andrew Goh Yisheng , Thomas Fan , Adrin Jalali 贡献。Enhancement
MetadataRequest
和MetadataRouter
现在有一个consumes
方法, 可以用来检查给定的一组参数是否会被消耗。 #26831 由 Adrin Jalali 贡献。Enhancement 使
sklearn.utils.check_array
在从 DIA 数组转换时尝试输出int32
索引的 CSR 和 COO 数组,如果非零条目的数量足够小。这确保了在 Cython 中实现的估计器, 并且不接受int64
索引的稀疏数据结构,现在一致地接受 SciPy 稀疏矩阵和数组的相同稀疏输入格式。 #27372 由 Guillaume Lemaitre 贡献。Fix
sklearn.utils.check_array
应该接受来自 SciPy 稀疏模块的矩阵和数组。 之前的实现会在copy=True
时失败,因为它调用了特定的 NumPynp.may_share_memory
, 该函数不适用于 SciPy 稀疏数组,并且对于 SciPy 稀疏矩阵不会返回正确的结果。 #27336 由 Guillaume Lemaitre 贡献。Fix 使用
readonly_memmap=True
的check_estimators_pickle
现在依赖于 joblib 自身的功能,在加载序列化估计器时分配对齐的内存映射数组,而不是调用一个专用的私有函数, 该函数会在 OpenBLAS 错误检测 CPU 架构时崩溃。 #27614 由 Olivier Grisel 贡献。Fix 当传递稀疏矩阵但
accept_sparse
为False
时,check_array
中的错误消息现在建议使用.toarray()
而不是X.toarray()
。 #27757 由 Lucy Liu 贡献。Fix 修复函数
check_array
,当输入是 Series 而不是 DataFrame 时输出正确的错误消息。
#28090 由 Stan Furrer 和 Yao Xiao 贡献。
API Change
sklearn.extmath.log_logistic
已弃用,并将在 1.6 版本中移除。 请改用-np.logaddexp(0, -x)
。 #27544 由 Christian Lorentzen 贡献。
代码和文档贡献者
感谢自 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