版本 1.7#
有关此版本主要亮点的简要说明,请参阅scikit-learn 1.7 的发布亮点。
更新日志图例
主要功能 以前无法实现的重大功能。
功能 以前无法实现的功能。
效率 现有功能现在可能不需要那么多计算或内存。
增强 杂项小改进。
修复 以前未按文档说明或合理预期工作的功能现在应该可以工作了。
API 变更 未来您需要更改代码以达到相同效果;或者某个功能将在未来移除。
版本 1.7.0#
2025 年 6 月
更改的模型#
修复 更改内部依赖
"lbfgs"
优化器的估计器的ConvergenceWarning
消息,使其更具信息性,并避免在迭代次数不可由用户设置或在达到最大迭代次数之前发生收敛问题时建议增加最大迭代次数。由 Olivier Grisel。 #31316
影响多个模块的更改#
稀疏更新:作为 SciPy 从 spmatrix 到 sparray 更改的一部分,所有内部稀疏使用现在都支持 sparray 和 spmatrix。所有稀疏对象的操作都应该适用于 spmatrix 或 sparray。这是向 sparray 迁移的第一步(参见 SciPy 迁移到 sparray)。由 Dan Schult #30858
Array API 支持#
其他估计器和函数已更新,以支持所有符合 Array API 的输入。
有关更多详细信息,请参阅Array API 支持(实验性)。
功能
sklearn.utils.check_consistent_length
现在支持 Array API 兼容输入。由 Stefanie Senger #29519功能
sklearn.metrics.explained_variance_score
和sklearn.metrics.mean_pinball_loss
现在支持 Array API 兼容输入。由 Virgil Chan #29978功能
sklearn.metrics.fbeta_score
、sklearn.metrics.precision_score
和sklearn.metrics.recall_score
现在支持 Array API 兼容输入。由 Omar Salman #30395功能
sklearn.utils.extmath.randomized_svd
现在支持 Array API 兼容输入。由 Connor Lane 和 Jérémie du Boisberranger。 #30819功能
sklearn.metrics.hamming_loss
现在支持 Array API 兼容输入。由 Thomas Li #30838功能
preprocessing.Binarizer
现在支持 Array API 兼容输入。由 Yaroslav Korobko、Olivier Grisel 和 Thomas Li。 #31190功能
sklearn.metrics.jaccard_score
现在支持 Array API 兼容输入。由 Omar Salman #31204array-api-compat 和 array-api-extra 现已作为供应商代码包含在 scikit-learn 源代码中。实验性 Array API 标准支持的用户不再需要在其环境中安装 array-api-compat。由 Lucas Colley #30340
元数据路由#
有关更多详细信息,请参阅元数据路由用户指南。
功能
ensemble.BaggingClassifier
和ensemble.BaggingRegressor
现在通过其predict
、predict_proba
、predict_log_proba
和decision_function
方法支持元数据路由,并将**params
传递给底层估计器。由 Stefanie Senger。 #30833
sklearn.base
#
增强
base.BaseEstimator
的估计器 HTML 表示现在增加了一个参数表,可以使用 jupyter 进行可视化。由 Guillaume Lemaitre 和 Dea María Léon #30763
sklearn.calibration
#
修复 当传入
cv="prefit
” 时,CalibratedClassifierCV
现在会引发FutureWarning
而不是UserWarning
。由 Olivier Grisel当传递
float64
类型sample_weight
以及输出float32
类型预测的基础估计器时,使用method="sigmoid"
的CalibratedClassifierCV
不再崩溃。由 Olivier Grisel #30873
sklearn.compose
#
API 变更
compose.ColumnTransformer
和compose.make_column_transformer
的force_int_remainder_cols
参数已弃用,并将在 1.9 版本中移除。它没有效果。由 Jérémie du Boisberranger #31167
sklearn.covariance
#
修复
sklearn.covariance.MinCovDet
中对n_samples == n_features
的支持已恢复。由 Antony Lee。 #30483
sklearn.datasets
#
增强
datasets.make_classification
中添加了新参数return_X_y
。该参数的默认值不会改变函数的行为。由 Success Moses 和 Adam Cooper #30196
sklearn.decomposition
#
功能
DictionaryLearning
、SparseCoder
和MiniBatchDictionaryLearning
现在具有inverse_transform
方法。由 Rémi Flamary #30443
sklearn.ensemble
#
功能
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
允许对用于提前停止的验证集进行更多控制。您现在可以通过参数X_val
、y_val
和sample_weight_val
将用于验证的数据直接传递给fit
。由 Christian Lorentzen。 #27124修复
ensemble.VotingClassifier
和ensemble.VotingRegressor
会验证estimators
,以确保它是一个元组列表。由 Thomas Fan。 #30649
sklearn.feature_selection
#
增强
feature_selection.RFECV
现在允许在特征选择的每次迭代和交叉验证步骤中访问排名和支持。由 Marie S. #30179修复 当估计器是
linear_model.ElasticNetCV
的实例且其l1_ratio
参数为类数组时,feature_selection.SelectFromModel
现在能正确工作。由 Vasco Pereira。 #31107
sklearn.gaussian_process
#
增强
gaussian_process.GaussianProcessClassifier
现在包含一个latent_mean_and_variance
方法,该方法公开了在拉普拉斯近似中使用的潜在函数 \(f\) 的均值和方差。由 Miguel González Duque #22227
sklearn.inspection
#
增强 在
inspection.partial_dependence
中添加custom_values
参数。它允许用户传入自定义的值网格来计算偏依赖。由 Freddy A. Boulton 和 Stephen Pardy #26202增强 当
response_method
为 ‘decision_function’、‘predict_proba’ 或 ‘auto’ 时,inspection.DecisionBoundaryDisplay
现在支持绘制多类别问题的所有类别。由 Lucy Liu #29797修复 当将空列表作为
categorical_features
参数传入时,inspection.partial_dependence
现在会引发一个有信息量的错误。应使用None
来指示不存在分类特征。由 Pedro Lopes。 #31146API 变更
inspection.partial_dependence
不再接受数值特征列的整数数据类型。现在,在调用此工具之前(最好甚至在拟合要检查的模型之前)需要显式转换为浮点值。由 Olivier Grisel #30409
sklearn.linear_model
#
增强 当
penalty
不为"elasticnet"
时,linear_model.SGDClassifier
和linear_model.SGDRegressor
现在接受l1_ratio=None
。由 Marc Bresson。 #30730增强 使用
fit_intercept=True
拟合linear_model.Lasso
和linear_model.ElasticNet
对于稀疏输入X
来说更快,因为避免了残差和不必要的重新计算。由 Christian Lorentzen #31387修复 当使用
class_weight="balanced"
进行拟合时,linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
现在正确地将样本权重传递给utils.class_weight.compute_class_weight
。由 Shruti Nath 和 Olivier Grisel #30057修复
linear_model.LinearRegression
中添加了一个新参数tol
,用于确定在稀疏数据上拟合时解coef_
的精度。由 Success Moses #30521修复
linear_model.BayesianRidge
中超参数的更新和初始化现在正确处理样本权重。由 Antoine Baker。 #30644修复 当
n_samples < n_features
时,linear_model.BayesianRidge
现在使用完整的 SVD 来正确估计后验协方差矩阵sigma_
。由 Antoine Baker #31094API 变更 参数
n_alphas
已在以下类中弃用:linear_model.ElasticNetCV
、linear_model.LassoCV
、linear_model.MultiTaskElasticNetCV
和linear_model.MultiTaskLassoCV
,并将在 1.9 版本中移除。参数alphas
现在支持整数和类数组,从而不再需要n_alphas
。从现在开始,只应设置alphas
,以指示要自动生成的 alphas 数量(整数)或提供一个 alphas 列表(类数组)以沿着正则化路径进行测试。由 Siddharth Bansal。 #30616API 变更 在
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中,将"liblinear"
求解器用于一对多(one-versus-rest)方案的多类别分类已弃用,并将在 1.8 版本中引发错误。请使用支持多项式损失的求解器,或将估计器封装在sklearn.multiclass.OneVsRestClassifier
中以继续应用一对多方案。由 Jérémie du Boisberranger。 #31241
sklearn.manifold
#
增强 从 1.9 版本开始,
manifold.MDS
将默认使用n_init=1
。由 Dmitry Kobak #31117修复
manifold.MDS
现在能正确处理非度量 MDS。此外,返回的应力值现在与返回的嵌入相对应,并且度量 MDS 现在允许归一化应力。由 Dmitry Kobak #30514修复
manifold.MDS
现在默认使用eps=1e-6
,并且收敛准则已调整,使其对度量和非度量 MDS 都合理,并遵循参考 R 实现。归一化应力的公式已调整,以遵循 Kruskal 的原始定义。由 Dmitry Kobak #31117
sklearn.metrics
#
功能
metrics.brier_score_loss
实现了多类别分类问题的布里尔分数,并添加了scale_by_half
参数。该指标对于评估概率分类器的锐度和校准都非常有用。有关更多详细信息,请参阅文档字符串。由 Varun Aggarwal、Olivier Grisel 和 Antoine Baker。 #22046功能 在
metrics.RocCurveDisplay
中添加了类方法from_cv_results
,该方法允许从model_selection.cross_validate
结果中轻松绘制多个 ROC 曲线。由 Lucy Liu #30399增强
metrics.det_curve
、metrics.DetCurveDisplay.from_estimator
和metrics.DetCurveDisplay.from_estimator
现在接受drop_intermediate
选项,用于删除真阳性 (tp) 不变的前后阈值。所有具有相同 tp 值的点在 DET 曲线中具有相同的fnr
,因此具有相同的 y 坐标。由 Arturo Amor #29151增强
class_likelihood_ratios
现在有一个replace_undefined_by
参数。当出现零除时,该指标未定义,将返回LR+
和LR-
的设定值。由 Stefanie Senger #29288修复 如果
labels
中缺少y_true
的值,metrics.log_loss
现在会引发ValueError
。由 Varun Aggarwal、Olivier Grisel 和 Antoine Baker。 #22046修复
metrics.det_curve
和metrics.DetCurveDisplay
现在返回一个额外的无穷大阈值,在此阈值下分类器总是预测负类别,即 tps = fps = 0。由 Arturo Amor #29151修复 当发生零除时,
class_likelihood_ratios
现在会引发UndefinedMetricWarning
而不是UserWarning
。由 Stefanie Senger #29288修复 当
line_kwargs
和chance_level_kw
中的label
为None
时,metrics.RocCurveDisplay
将不再设置图例。由 Arturo Amor #29727修复 已对
metrics.mean_absolute_error
、metrics.mean_pinball_loss
、metrics.mean_absolute_percentage_error
、metrics.mean_squared_error
、metrics.root_mean_squared_error
、metrics.mean_squared_log_error
、metrics.root_mean_squared_log_error
、metrics.explained_variance_score
、metrics.r2_score
、metrics.mean_tweedie_deviance
、metrics.mean_poisson_deviance
、metrics.mean_gamma_deviance
和metrics.d2_tweedie_score
添加了额外的sample_weight
检查。sample_weight
只能是一维的,长度与y_true
和y_pred
一致或为标量。由 Lucy Liu。 #30886修复
d2_log_loss_score
现在正确处理了当传入labels
且并非所有标签都存在于y_true
中的情况。由 Vassilis Margonis #30903修复 修复了当类别和样本数量较少时
metrics.adjusted_mutual_info_score
的数值问题。由 Hleb Levitski #31065API 变更
metrics.fowlkes_mallows_score
的sparse
参数已弃用,并将在 1.9 版本中移除。它没有效果。由 Luc Rocher。 #28981API 变更
metrics.class_likelihood_ratios
的raise_warning
参数已弃用,并将在 1.9 版本中移除。在发生零除的情况下,将始终引发UndefinedMetricWarning
。由 Stefanie Senger。 #29288API 变更 在
sklearn.metrics.RocCurveDisplay.from_predictions
中,参数y_pred
已重命名为y_score
,以更好地反映其用途。y_pred
将在 1.9 版本中移除。由 Bagus Tris Atmaja 在 #29865
sklearn.mixture
#
功能 在
mixture.BaseMixture
类中添加了属性lower_bounds_
,用于保存每次迭代的下界列表,从而提供了对混合模型(如mixture.GaussianMixture
)收敛行为的深入了解。由 Manideep Yenugula #28559效率 在
GaussianMixture
中使用covariance_type="spherical"
或covariance_type="diag"
估计协方差时,简化了冗余计算。由 Leonce Mekinda 和 Olivier Grisel #30414效率
GaussianMixture
现在在拟合float32
数据时,始终以float32
精度运行,以提高训练速度和内存效率。此前,部分计算会被隐式转换为float64
。由 Olivier Grisel 和 Omar Salman。 #30415
sklearn.model_selection
#
修复 超参数优化器(如
model_selection.GridSearchCV
)现在即使在未启用元数据路由的情况下也会将sample_weight
转发给评分器。由 Antoine Baker #30743
sklearn.multiclass
#
修复 当所有内部估计器从不预测其正类别时,
sklearn.multiclass.OneVsRestClassifier
的predict_proba
方法现在对所有类别返回零。由 Luis M. B. Varona、Marc Bresson 和 Jérémie du Boisberranger。 #31228
sklearn.multioutput
#
增强
multioutput.RegressorChain
和multioutput.ClassifierChain
的参数base_estimator
已弃用,并推荐使用estimator
。由 Success Moses 和 dikraMasrour #30152
sklearn.neural_network
#
功能 在
neural_network.MLPClassifier
和neural_network.MLPRegressor
中添加了对sample_weight
的支持。由 Zach Shu 和 Christian Lorentzen #30155功能 在
neural_network.MLPRegressor
中添加了loss
参数,选项包括"squared_error"
(默认)和"poisson"
(新增)。由 Christian Lorentzen #30712修复
neural_network.MLPRegressor
现在在设置了early_stopping
且计算得到的验证集过小时会引发一个信息性错误。作者:David Shumway。#24788
sklearn.pipeline
#
改进 在
pipeline.make_union
函数中暴露了verbose_feature_names_out
参数,允许用户控制pipeline.FeatureUnion
中特征名称的唯一性。作者:Abhijeetsingh Meena #30406
sklearn.preprocessing
#
改进 使用
strategy="uniform"
的preprocessing.KBinsDiscretizer
现在接受sample_weight
参数。此外,在使用strategy="quantile"
时,现在可以指定quantile_method
(未来quantile_method="averaged_inverted_cdf"
将成为默认值)。作者:Shruti Nath 和 Olivier Grisel #29907修复
preprocessing.KBinsDiscretizer
现在在给定样本权重并使用子采样时使用加权重采样。这可能会改变结果,即使在不使用样本权重的情况下也是如此,尽管是从绝对值而非统计属性方面。作者:Shruti Nath 和 Jérémie du Boisberranger #29907修复 现在使用
scipy.stats.yeojohnson
而非我们自己的 Yeo-Johnson 变换实现。修复了当 scipy 版本>= 1.12
时,PowerTransformer(method="yeo-johnson")
的 Yeo-Johnson 变换的数值稳定性问题(主要是溢出)。初始 PR 由 Xuefeng Xu 完成,并由 Mohamed Yaich、Oussama Er-rabie、Mohammed Yaslam Dlimi、Hamza Zaroual、Amine Hannoun 和 Sylvain Marié 完成。#31227
sklearn.svm
#
修复
svm.LinearSVC
现在在以class_weight="balanced"
拟合时,会正确地将样本权重传递给utils.class_weight.compute_class_weight
。作者:Shruti Nath #30057
sklearn.utils
#
改进 当唯一类别的数量大于样本数量的 50% 时,
utils.multiclass.type_of_target
会引发警告。此警告仅在y
具有超过 20 个样本时引发。作者:Rahil Parikh。#26335改进 :func:
resample
现在支持样本权重,从而允许加权重采样。作者:Shruti Nath 和 Olivier Grisel #29907改进
utils.class_weight.compute_class_weight
现在在使用“balanced”策略计算类别权重时,会正确地考虑样本权重。作者:Shruti Nath #30057改进 主进程中的警告过滤器会传播到 joblib 工作器。作者:Thomas Fan #30380
改进 私有辅助函数
utils._safe_indexing
现在正式支持 pyarrow 数据。例如,现在可以将 pyarrowTable
作为X
传递给compose.ColumnTransformer
。作者:Christian Lorentzen #31040修复 在
utils.estimator_checks
中,我们现在通过将最小值作为负类而不是第一个元素,来强制二元分类器使用二元y
,这使其对y
的洗牌具有鲁棒性。它防止了两个检查在二元分类器上错误失败。作者:Antoine Baker。#30775修复
utils.extmath.randomized_svd
和utils.extmath.randomized_range_finder
现在会验证其输入数组,以便在输入无效时提前抛出信息性错误消息。作者:Connor Lane。#30819
代码和文档贡献者
感谢自 1.6 版本以来为项目维护和改进做出贡献的所有人,包括
4hm3d, Aaron Schumacher, Abhijeetsingh Meena, Acciaro Gennaro Daniele, Achraf Tasfaout, Adrien Linares, Adrin Jalali, Agriya Khetarpal, Aiden Frank, Aitsaid Azzedine Idir, ajay-sentry, Akanksha Mhadolkar, Alfredo Saucedo, Anderson Chaves, Andres Guzman-Ballen, Aniruddha Saha, antoinebaker, Antony Lee, Arjun S, ArthurDbrn, Arturo, Arturo Amor, ash, Ashton Powell, ayoub.agouzoul, Bagus Tris Atmaja, Benjamin Danek, Boney Patel, Camille Troillard, Chems Ben, Christian Lorentzen, Christian Veenhuis, Christine P. Chai, claudio, Code_Blooded, Colas, Colin Coe, Connor Lane, Corey Farwell, Daniel Agyapong, Dan Schult, Dea María Léon, Deepak Saldanha, dependabot[bot], Dimitri Papadopoulos Orfanos, Dmitry Kobak, Domenico, Elham Babaei, emelia-hdz, EmilyXinyi, Emma Carballal, Eric Larson, fabianhenning, Gael Varoquaux, Gil Ramot, Gordon Grey, Goutam, G Sreeja, Guillaume Lemaitre, Haesun Park, Hanjun Kim, Helder Geovane Gomes de Lima, Henri Bonamy, Hleb Levitski, Hugo Boulenger, IlyaSolomatin, Irene, Jérémie du Boisberranger, Jérôme Dockès, JoaoRodriguesIST, Joel Nothman, Josh, Kevin Klein, Loic Esteve, Lucas Colley, Luc Rocher, Lucy Liu, Luis M. B. Varona, lunovian, Mamduh Zabidi, Marc Bresson, Marco Edward Gorelli, Marco Maggi, Maren Westermann, Marie Sacksick, Martin Jurča, Miguel González Duque, Mihir Waknis, Mohamed Ali SRIR, Mohamed DHIFALLAH, mohammed benyamna, Mohit Singh Thakur, Mounir Lbath, myenugula, Natalia Mokeeva, Olivier Grisel, omahs, Omar Salman, Pedro Lopes, Pedro Olivares, Preyas Shah, Radovenchyk, Rahil Parikh, Rémi Flamary, Reshama Shaikh, Rishab Saini, rolandrmgservices, SanchitD, Santiago Castro, Santiago Víquez, scikit-learn-bot, Scott Huberty, Shruti Nath, Siddharth Bansal, Simarjot Sidhu, Sortofamudkip, sotagg, Sourabh Kumar, Stefan, Stefanie Senger, Stefano Gaspari, Stephen Pardy, Success Moses, Sylvain Combettes, Tahar Allouche, Thomas J. Fan, Thomas Li, ThorbenMaa, Tim Head, Umberto Fasci, UV, Vasco Pereira, Vassilis Margonis, Velislav Babatchev, Victoria Shevchenko, viktor765, Vipsa Kamani, Virgil Chan, vpz, Xiao Yuan, Yaich Mohamed, Yair Shimony, Yao Xiao, Yaroslav Halchenko, Yulia Vilensky, Yuvi Panda