版本 1.3#
有关此版本主要亮点的简短说明,请参阅 scikit-learn 1.3 的发行亮点。
变更日志图例
主要功能 以前无法实现的重要功能。
功能 以前无法实现的功能。
效率提升 现有功能现在可能不需要那么多计算或内存。
增强 各种各样的次要改进。
修复 以前未按文档说明工作或未达到合理预期的情况现在应该可以工作了。
API 变更 您需要更改代码才能在将来获得相同的效果;或者某个功能将在将来被移除。
版本 1.3.2#
2023 年 10 月
变更日志#
sklearn.datasets
#
修复 所有数据集获取器现在都接受
data_home
作为任何实现os.PathLike
接口的对象,例如pathlib.Path
。#27468 由 姚晓 完成。
sklearn.decomposition
#
修复 修复了
decomposition.KernelPCA
中的一个错误,通过强制内部preprocessing.KernelCenterer
的输出为默认数组。当使用arpack求解器时,它期望一个具有dtype
属性的数组。#27583 由 Guillaume Lemaitre 完成。
sklearn.metrics
#
修复 修复了使用
zero_division=np.nan
的指标(例如precision_score
)在并行循环(例如cross_val_score
)中的一个错误,其中np.nan
的单例在子进程中将不同。#27573 由 Guillaume Lemaitre 完成。
sklearn.tree
#
修复 不要在决策树 pickle 文件中通过未初始化的内存泄漏数据,并使这些文件的生成确定性。#27580 由 Loïc Estève 完成。
版本 1.3.1#
2023 年 9 月
已更改的模型#
以下估计器和函数,当使用相同的数据和参数拟合时,可能会产生与先前版本不同的模型。这通常是由于建模逻辑(错误修复或增强)或随机采样过程中的更改造成的。
修复 使用
solver='sparse_cg'
的 Ridge 模型在 scipy>=1.12 中的结果可能略有不同,这是由于 scipy 求解器底层更改造成的(有关更多详细信息,请参阅 scipy#18488)#26814 由 Loïc Estève 完成。
影响所有模块的更改#
修复
set_output
API 可正确处理列表输入。#27044 由 Thomas Fan 完成。
变更日志#
sklearn.calibration
#
修复
calibration.CalibratedClassifierCV
现在可以处理产生较大预测分数的模型。之前它在数值上是不稳定的。 #26913 由 Omar Salman 完成。
sklearn.cluster
#
修复
cluster.BisectingKMeans
在对与用于拟合模型的数据具有不同尺度的数据进行预测时可能会崩溃。 #27167 由 Olivier Grisel 完成。修复
cluster.BisectingKMeans
现在可以处理只有一个特征的数据。 #27243 由 Jérémie du Boisberranger 完成。
sklearn.cross_decomposition
#
修复
cross_decomposition.PLSRegression
现在如果使用一维y
拟合,则会自动展开predict
的输出。 #26602 由 肖瑶 (Yao Xiao) 完成。
sklearn.ensemble
#
修复 修复了
ensemble.AdaBoostClassifier
中使用algorithm="SAMME"
时的一个错误,其中每个弱学习器的决策函数应该是对称的(即,对于一个样本,分数之和应为零)。 #26521 由 Guillaume Lemaitre 完成。
sklearn.feature_selection
#
修复
feature_selection.mutual_info_regression
现在可以在X
为整数数据类型时正确计算结果。 #26748 由 肖瑶 (Yao Xiao) 完成。
sklearn.impute
#
修复
impute.KNNImputer
现在在add_indicator
设置为True
并且在fit
期间观察到缺失值时,会在transform
中正确添加缺失值指示列。 #26600 由 Shreesha Kumar Bhat 完成。
sklearn.metrics
#
修复 与
metrics.get_scorer
一起使用的评分器可以正确处理多标签指示矩阵。 #27002 由 Guillaume Lemaitre 完成。
sklearn.mixture
#
修复
mixture.GaussianMixture
从用户提供的precisions_init
初始化covariance_type
为full
或tied
时是不正确的,现已修复。 #26416 由 陶阳 (Yang Tao) 完成。
sklearn.neighbors
#
修复
neighbors.KNeighborsClassifier.predict
对于pandas.DataFrames
输入不再引发异常。 #26772 由 Jérémie du Boisberranger 完成。修复 将
sklearn.neighbors.BallTree.valid_metrics
和sklearn.neighbors.KDTree.valid_metrics
重新引入为公共类属性。 #26754 由 Julien Jerphanion 完成。修复
sklearn.model_selection.HalvingRandomSearchCV
不再在param_distributions
参数的输入为字典列表时抛出异常。 #26893 由 Stefanie Senger 完成。修复 基于邻域的估计器现在可以在
metric="minkowski"
且度量参数p
在范围0 < p < 1
内时正常工作,而不管X
的dtype
是什么。 #26760 由 Shreesha Kumar Bhat 完成。
sklearn.preprocessing
#
修复
preprocessing.LabelEncoder
正确地接受y
作为关键字参数。 #26940 由 Thomas Fan 完成。修复
preprocessing.OneHotEncoder
在sparse_output=True
且输出配置为pandas时,显示更具信息量的错误消息。 #26931 由 Thomas Fan 完成。
sklearn.tree
#
修复
tree.plot_tree
现在接受文档中记录的class_names=True
。 #26903 由 Thomas Roehr 完成。修复
tree.plot_tree
的feature_names
参数现在接受任何类型的类数组对象,而不仅仅是列表。 #27292 由 Rahil Parikh 完成。
版本 1.3.0#
2023年6月
模型变更#
以下估计器和函数,当使用相同的数据和参数拟合时,可能会产生与先前版本不同的模型。这通常是由于建模逻辑(错误修复或增强)或随机采样过程中的更改造成的。
增强
multiclass.OutputCodeClassifier.predict
现在使用更有效的成对距离约简。因此,去除非重复策略不同,预测的标签可能也不同。 #25196 由 Guillaume Lemaitre 完成。增强
decomposition.DictionaryLearning
的fit_transform
方法更高效,但在transform_algorithm
与fit_algorithm
不相同时且迭代次数较少时,可能会产生与以前版本不同的结果。 #24871 由 Omar Salman 完成。增强
cluster.KMeans
、cluster.BisectingKMeans
和cluster.MiniBatchKMeans
现在将在质心初始化中使用sample_weight
参数。此更改将破坏向后兼容性,因为使用相同随机种子生成的数字将不同。 #25752 由 Gleb Levitski、Jérémie du Boisberranger 和 Guillaume Lemaitre 完成。修复 在
decomposition.NMF
和decomposition.MiniBatchNMF
的fit
和transform
步骤中,更一致地处理W
和H
矩阵中的小值,这可能会产生与以前版本不同的结果。 #25438 由 Yotam Avidar-Constantini 完成。修复 如果
gamma
为None
,decomposition.KernelPCA
可能会通过inverse_transform
产生不同的结果。现在它将被正确地选择为其拟合数据的1/n_features
,而之前它可能被错误地选择为传递给inverse_transform
的数据的1/n_features
。提供了一个新的属性gamma_
用于显示每次调用内核时gamma
的实际值。 #26337 由 肖瑶 完成。
显示更改#
增强
model_selection.LearningCurveDisplay
默认显示训练曲线和测试曲线。您可以设置score_type="test"
以保持之前的行为。 #25120 由 Guillaume Lemaitre 完成。修复
model_selection.ValidationCurveDisplay
现在接受将列表传递给param_range
参数。 #27311 由 Arturo Amor 完成。
影响所有模块的更改#
增强 如果实例未拟合,以下类的
get_feature_names_out
方法现在将引发NotFittedError
。这确保了所有具有get_feature_names_out
方法的估计器的错误一致性。NotFittedError
显示一条信息丰富的消息,要求使用适当的参数拟合实例。#25294,#25308,#25291,#25367,#25402,由 John Pangas,Rahil Parikh 和 Alex Buzenet 完成。
增强 为计算一对数据集(包含稀疏 CSR 矩阵和密集 NumPy 数组)的平方欧几里得距离(有时后面跟着融合约简运算)添加了一个多线程 Cython 例程。
这可以提高以下函数和估计器的性能
例如,将稀疏 CSR 矩阵传递给依赖密集 NumPy 表示来存储其拟合参数(反之亦然)的估计器的
predict
或transform
方法时,通常会出现这种性能改进。例如,对于这种情况,在常用的笔记本电脑上,
sklearn.neighbors.NearestNeighbors.kneighbors
现在快了多达 2 倍。#25044 由 Julien Jerphanion 完成。
增强 所有内部依赖 OpenMP 多线程(通过 Cython)的估计器现在默认使用等于物理核心数(而不是逻辑核心数)的线程数。过去,我们观察到在 SMT 主机上使用与逻辑核心数一样多的线程有时会根据算法和数据的形状导致严重的性能问题。 请注意,仍然可以手动调整 OpenMP 使用的线程数,如 并行处理 中所述。
实验性/开发中#
主要功能 本版本包含了元数据路由的相关基础方法。此功能仅通过
enable_metadata_routing
特性标志可用,该标志可以使用sklearn.set_config
和sklearn.config_context
启用。目前,此功能主要对第三方开发者有用,以便他们为元数据路由准备代码库,我们强烈建议他们也将其隐藏在相同的特性标志之后,而不是默认启用它。#24027 由 Adrin Jalali、Benjamin Bossan和Omar Salman贡献。
变更日志#
sklearn
#
功能 为函数
sklearn.set_config
和上下文管理器sklearn.config_context
添加了一个新选项skip_parameter_validation
,允许跳过传递给估计器和公共函数的参数验证。这有助于加快代码速度,但应谨慎使用,因为它可能导致意外行为或在设置无效参数时引发难以理解的错误消息。#25815 由 Jérémie du Boisberranger贡献。
sklearn.base
#
功能 现在可以使用
__sklearn_clone__
协议来覆盖base.clone
的默认行为。#24568 由 Thomas Fan贡献。修复 如果
transform
返回一个命名元组,base.TransformerMixin
现在会保留命名元组的类。#26121 由 Thomas Fan贡献。
sklearn.calibration
#
修复
calibration.CalibratedClassifierCV
现在不再强制对fit_params
进行样本对齐。#25805 由 Adrin Jalali贡献。
sklearn.cluster
#
主要功能 添加了
cluster.HDBSCAN
,这是一种现代的基于层次密度聚类算法。与cluster.OPTICS
类似,它可以被看作是cluster.DBSCAN
的泛化,因为它允许层次聚类而不是扁平聚类,但是它的方法与cluster.OPTICS
有所不同。该算法对其超参数的值非常鲁棒,可以在各种数据上使用,几乎无需或无需任何调整。此实现改编自scikit-learn-contrib/hdbscan中HDBSCAN的原始实现,由Leland McInnes等人贡献。
#26385 由 Meekail Zain贡献
增强
cluster.KMeans
、cluster.BisectingKMeans
和cluster.MiniBatchKMeans
现在将在质心初始化中使用sample_weight
参数。此更改将破坏向后兼容性,因为使用相同随机种子生成的数字将不同。 #25752 由 Gleb Levitski、Jérémie du Boisberranger 和 Guillaume Lemaitre 完成。修复
cluster.KMeans
、cluster.MiniBatchKMeans
和cluster.k_means
现在可以正确处理n_init="auto"
和init
为类数组的组合,在这种情况下运行一次初始化。#26657 由 Binesh Bannerjee贡献。API变更
cluster.KMeans.predict
和cluster.MiniBatchKMeans.predict
中的sample_weight
参数已弃用,并将从 v1.5 版本中移除。 #25251 由 Gleb Levitski 完成。API变更
cluster.FeatureAgglomeration.inverse_transform
中的Xred
参数已重命名为Xt
,并将从 v1.5 版本中移除。 #26503 由 Adrin Jalali 完成。
sklearn.compose
#
修复 当
ColumnTransformer
的单个转换器输出的 pandas 数据框索引不一致,且输出配置为 pandas 时,compose.ColumnTransformer
会抛出一个包含信息的错误。 #26286 由 Thomas Fan 完成。修复 调用
set_output
时,compose.ColumnTransformer
正确设置剩余部分的输出。 #26323 由 Thomas Fan 完成。
sklearn.covariance
#
修复 允许在
covariance.GraphicalLasso
中使用alpha=0
,以与covariance.graphical_lasso
保持一致。 #26033 由 Genesis Valencia 完成。修复 当输入不合适时,
covariance.empirical_covariance
现在会给出包含信息的错误消息。 #26108 由 Quentin Barthélemy 完成。API变更 自 1.3 版本起弃用
covariance.graphical_lasso
中的cov_init
,因为该参数无效。它将在 1.5 版本中移除。 #26033 由 Genesis Valencia 完成。API变更 在
covariance.GraphicalLasso
和covariance.GraphicalLassoCV
中添加了拟合属性costs_
。 #26033 由 Genesis Valencia 完成。API变更 在
covariance.GraphicalLasso
中添加了covariance
参数。 #26033 由 Genesis Valencia 完成。API变更 在
covariance.GraphicalLasso
、covariance.graphical_lasso
和covariance.GraphicalLassoCV
中添加了eps
参数。 #26033 由 Genesis Valencia 完成。
sklearn.datasets
#
增强 使用 pandas 解析器时,允许使用
datasets.fetch_openml
中的read_csv_kwargs
参数覆盖用于打开 ARFF 文件的参数。 #26433 由 Guillaume Lemaitre 完成。修复 当
as_frame=True
且parser="liac-arff"
时,datasets.fetch_openml
返回改进的数据类型。 #26386 由 Thomas Fan 完成。修复 遵循 ARFF 规范,现在只有标记符
"?"
在使用 pandas 解析器打开通过datasets.fetch_openml
获取的 ARFF 文件时被视为缺失值。参数read_csv_kwargs
允许覆盖此行为。 #26551 由 Guillaume Lemaitre 完成。修复
datasets.fetch_openml
将始终使用np.nan
作为缺失值标记符,适用于"pandas"
和"liac-arff"
两种解析器。 #26579 由 Guillaume Lemaitre 完成。API 变更
datasets.make_sparse_coded_signal
的data_transposed
参数已弃用,并将从 v1.5 版本中移除。 #25784 由 @Jérémie du Boisberranger 完成。
sklearn.decomposition
#
效率提升 通过避免重复验证,
decomposition.MiniBatchDictionaryLearning
和decomposition.MiniBatchSparsePCA
在小批量大小的情况下速度更快。 #25490 由 Jérémie du Boisberranger 完成。增强
decomposition.DictionaryLearning
现在接受参数callback
,以与函数decomposition.dict_learning
保持一致。 #24871 由 Omar Salman 完成。修复 在
decomposition.NMF
和decomposition.MiniBatchNMF
的fit
和transform
步骤中,更一致地处理W
和H
矩阵中的小值,这可能会产生与以前版本不同的结果。 #25438 由 Yotam Avidar-Constantini 完成。API 变更
decomposition.NMF.inverse_transform
和decomposition.MiniBatchNMF.inverse_transform
中的W
参数已重命名为Xt
,并将从 v1.5 版本中移除。 #26503 由 Adrin Jalali 完成。
sklearn.discriminant_analysis
#
增强
discriminant_analysis.LinearDiscriminantAnalysis
现在支持 PyTorch。更多详情请参见 数组API支持(实验性)。 #25956 由 Thomas Fan 完成。
sklearn.ensemble
#
新增功能
ensemble.HistGradientBoostingRegressor
现在通过loss="gamma"
支持 Gamma 偏差损失。使用 Gamma 偏差作为损失函数对于建模偏态分布的、严格正值的目标变量非常有用。 #22409 由 Christian Lorentzen 完成。新增功能 通过向
ensemble.RandomForestClassifier
,ensemble.RandomForestRegressor
,ensemble.ExtraTreesClassifier
和ensemble.ExtraTreesRegressor
传递可调用对象来计算自定义袋外评分。 #25177 由 Tim Head 完成。新特性
ensemble.GradientBoostingClassifier
现在通过oob_scores_
或oob_score_
属性暴露袋外分数。 #24882 由 Ashwin Mathur 完成。效率提升
ensemble.IsolationForest
的预测速度现在更快了(通常快 8 倍或更多)。在内部,估计器现在在fit
阶段预计算每棵树的决策路径长度。因此,无法加载使用 scikit-learn 1.2 训练的估计器以便使其在 scikit-learn 1.3 中进行预测:需要使用 scikit-learn 1.3 重新训练。 #25186 由 Felipe Breve Siola 完成。效率提升 带有
warm_start=True
的ensemble.RandomForestClassifier
和ensemble.RandomForestRegressor
现在只在后续fit
调用中实际存在更多n_estimators
时才重新计算袋外分数。 #26318 由 Joshua Choo Yun Keat 完成。增强
ensemble.BaggingClassifier
和ensemble.BaggingRegressor
公开了底层估计器的allow_nan
标签。 #25506 由 Thomas Fan 完成。修复 当
max_samples
是浮点数且round(n_samples * max_samples) < 1
时,ensemble.RandomForestClassifier.fit
将max_samples = 1
。 #25601 由 Jan Fidor 完成。修复 当在 pandas 数据框上调用
contamination
不是"auto"
时,ensemble.IsolationForest.fit
不再警告缺少特征名称。 #25931 由 Yao Xiao 完成。修复
ensemble.HistGradientBoostingRegressor
和ensemble.HistGradientBoostingClassifier
根据 LightGBM 和 pandas 的约定,一致地将分类特征的负值视为缺失值。 #25629 由 Thomas Fan 完成。修复 修复了 #23819 中引入的
ensemble.AdaBoostClassifier
和ensemble.AdaBoostRegressor
中base_estimator
的弃用问题。 #26242 由 Marko Toplak 完成。
sklearn.exceptions
#
新特性 添加了
exceptions.InconsistentVersionWarning
,当使用与 scikit-learn 估计器腌制时使用的 scikit-learn 版本不一致的 scikit-learn 版本解腌制 scikit-learn 估计器时,将引发此警告。 #25297 由 Thomas Fan 完成。
sklearn.feature_extraction
#
API变更
feature_extraction.image.PatchExtractor
现在遵循 scikit-learn 的转换器 API。此类定义为无状态转换器,这意味着在调用transform
之前不需要调用fit
。参数验证仅在fit
时发生。#24230 由 Guillaume Lemaitre 完成。
sklearn.feature_selection
#
增强
sklearn.feature_selection
中的所有选择器在转换后都将保留 DataFrame 的数据类型。#25102 由 Thomas Fan 完成。修复
feature_selection.SequentialFeatureSelector
的cv
参数现在支持生成器。#25973 由Yao Xiao <Charlie-XIAO>
完成。
sklearn.impute
#
增强 为
impute.IterativeImputer
添加了参数fill_value
。#25232 由 Thijs van Weezel 完成。修复 当
set_config(transform_output="pandas")
时,impute.IterativeImputer
现在可以正确保留 Pandas Index。#26454 由 Thomas Fan 完成。
sklearn.inspection
#
增强 为
inspection.partial_dependence
和inspection.PartialDependenceDisplay.from_estimator
添加了对sample_weight
的支持。这允许在针对我们进行检查的网格的每个值进行聚合时进行加权平均。仅当method
设置为brute
时才可以使用此选项。#25209 和 #26644 由 Carlo Lemos 完成。API变更
inspection.partial_dependence
返回一个带有新键grid_values
的utils.Bunch
。values
键已弃用,推荐使用grid_values
,values
键将在 1.5 版本中移除。#21809 和 #25732 由 Thomas Fan 完成。
sklearn.kernel_approximation
#
修复
kernel_approximation.AdditiveChi2Sampler
现在是无状态的。sample_interval_
属性已弃用,将在 1.5 版本中移除。#25190 由 Vincent Maladière 完成。
sklearn.linear_model
#
效率提升 当
sample_weight=None
时避免数据缩放,以及在linear_model.LinearRegression
中避免其他不必要的数据复制和意外的稠密到稀疏数据的转换。#26207 由 Olivier Grisel 完成。增强
linear_model.SGDClassifier
、linear_model.SGDRegressor
和linear_model.SGDOneClassSVM
现在保留numpy.float32
的数据类型。 #25587 由 Omar Salman 完成。增强
linear_model.ARDRegression
中已包含n_iter_
属性,用于显示达到停止条件所需的实际迭代次数。 #25697 由 John Pangas 完成。修复 使用更强大的标准来检测
linear_model.LogisticRegression
在线性可分问题中使用penalty="l1"
和solver="liblinear"
时的收敛性。 #25214 由 Tom Dupre la Tour 完成。修复 修复了在
linear_model.LogisticRegression
中使用solver="newton-cholesky"
和max_iter=0
调用fit
时发生的崩溃问题,该问题未能检查模型在第一次参数更新之前的状态。 #26653 由 Olivier Grisel 完成。API 变更 弃用
linear_model.BayesianRidge
和linear_model.ARDRegression
中的n_iter
属性,转而使用max_iter
。n_iter
将在 scikit-learn 1.5 中移除。此更改使这些估计器与其他估计器保持一致。 #25697 由 John Pangas 完成。
sklearn.manifold
#
修复
manifold.Isomap
现在在set_config(transform_output="pandas")
时能够正确保留 Pandas 索引。 #26454 由 Thomas Fan 完成。
sklearn.metrics
#
特性 为多个分类指标添加了
zero_division=np.nan
:metrics.precision_score
、metrics.recall_score
、metrics.f1_score
、metrics.fbeta_score
、metrics.precision_recall_fscore_support
、metrics.classification_report
。当zero_division=np.nan
且存在零除法时,该指标未定义,并从平均值中排除。当不用于平均值时,返回的值为np.nan
。 #25531 由 Marc Torrellas Socastro 完成。特性
metrics.average_precision_score
现在支持多类别情况。 #17388 由 Geoffrey Bolmier 完成, #24769 由 Ashwin Mathur 完成。效率 当唯一标签数量很大时,
metrics.adjusted_mutual_info_score
中互信息期望值的计算速度更快,并且总体内存使用量减少。 #25713 由 Kshitij Mathur、Guillaume Lemaitre、Omar Salman 和 Jérémie du Boisberranger 完成。增强
metrics.silhouette_samples
现在可以接受样本之间成对距离的稀疏矩阵或特征数组。 #18723 由 Sahil Gupta 和 #24677 由 Ashwin Mathur 完成。增强 为
metrics.precision_recall_curve
、metrics.PrecisionRecallDisplay.from_estimator
、metrics.PrecisionRecallDisplay.from_predictions
添加了一个新的参数drop_intermediate
,用于删除一些次优阈值以创建更轻量级的精确召回曲线。 #24668 由 @dberenbaum 完成。增强
metrics.RocCurveDisplay.from_estimator
和metrics.RocCurveDisplay.from_predictions
现在接受两个新的关键字参数plot_chance_level
和chance_level_kw
用于绘制基线机会水平。此线在chance_level_
属性中公开。 #25987 由 肖瑶 完成。增强
metrics.PrecisionRecallDisplay.from_estimator
和metrics.PrecisionRecallDisplay.from_predictions
现在接受两个新的关键字参数plot_chance_level
和chance_level_kw
用于绘制基线机会水平。此线在chance_level_
属性中公开。 #26019 由 肖瑶 完成。修复
metrics.pairwise.manhattan_distances
现在支持只读稀疏数据集。 #25432 由 Julien Jerphanion 完成。修复 修复了
metrics.classification_report
,以便空输入将返回np.nan
。以前,“宏观平均值”和weighted avg
将返回例如f1-score=np.nan
和f1-score=0.0
,前后不一致。现在,它们都返回np.nan
。 #25531 由 Marc Torrellas Socastro 完成。修复
metrics.ndcg_score
现在针对长度为 1 的输入给出有意义的错误消息。 #25672 由 Lene Preuss 和 Wei-Chun Chu 完成。修复 如果参数
y_pred
的值未标准化,metrics.log_loss
将发出警告,而不是在度量中实际对其进行标准化。从 1.5 版本开始,这将引发错误。 #25299 由 @Omar Salman <OmarManzoor 完成。修复 在
metrics.roc_curve
中,使用阈值np.inf
代替任意的max(y_score) + 1
。此阈值与 ROC 曲线点tpr=0
和fpr=0
相关。 #26194 由 Guillaume Lemaitre 完成。修复 使用 SciPy>=1.9 时,已删除
'matching'
度量标准,以与不再支持'matching'
的scipy.spatial.distance
保持一致。 #26264 由 Barata T. Onggo 完成。API 变更
metrics.log_loss
的eps
参数已被弃用,并将从 1.5 版本中删除。 #25299 由 Omar Salman 完成。
sklearn.gaussian_process
#
修复
gaussian_process.GaussianProcessRegressor
新增了一个参数n_targets
,用于在从先验分布采样时确定输出的数量。#23099 由 刘哲昊 完成。
sklearn.mixture
#
效率提升
mixture.GaussianMixture
现在效率更高,如果权重、均值和精度由用户给出,则会绕过不必要的初始化。#26021 由 张家伟 完成。
sklearn.model_selection
#
主要功能 新增了
model_selection.ValidationCurveDisplay
类,允许轻松绘制通过函数model_selection.validation_curve
获得的验证曲线。#25120 由 Guillaume Lemaitre 完成。API变更
model_selection.LearningCurveDisplay
类中的参数log_scale
已在 1.3 版本中弃用,并将在 1.5 版本中移除。可以通过直接在ax
对象上设置来覆盖默认比例,否则将根据数据点的间距自动设置。#25120 由 Guillaume Lemaitre 完成。增强
model_selection.cross_validate
新增了一个参数return_indices
,用于返回每个 cv 分割的训练测试索引。#25659 由 Guillaume Lemaitre 完成。
sklearn.multioutput
#
修复 对
multioutput.MultiOutputRegressor.partial_fit
和multioutput.MultiOutputClassifier.partial_fit
使用getattr
现在会在调用fit
之前正确地引发AttributeError
。#26333 由 Adrin Jalali 完成。
sklearn.naive_bayes
#
修复
naive_bayes.GaussianNB
在fit
中提供的sample_weight
将问题简化为单一类别时,不再引发ZeroDivisionError
。#24140 由 Jonathan Ohayon 和 Chiara Marmo 完成。
sklearn.neighbors
#
增强 当
n_neighbors
很大且algorithm="brute"
使用非欧几里德度量时,neighbors.KNeighborsClassifier.predict
和neighbors.KNeighborsClassifier.predict_proba
的性能得到了提升。#24076 由 Meekail Zain、Julien Jerphanion 完成。修复 移除
neighbors.BallTree
中对KulsinskiDistance
的支持。此差异性不是度量,BallTree 不支持。#25417 由 Guillaume Lemaitre 完成。API变更 除了
euclidean
和manhattan
以外的度量标准,以及在neighbors.NearestNeighbors
中使用可调用对象的功能已弃用,并将在1.5版本中移除。 #24083 由 Valentin Laurent贡献。
sklearn.neural_network
#
修复
neural_network.MLPRegressor
和neural_network.MLPClassifier
在warm_start=True
时会报告正确的n_iter_
值。它对应于当前对fit
的调用中执行的迭代次数,而不是自估计器初始化以来执行的总迭代次数。 #25443 由 Marvin Krawutschke贡献。
sklearn.pipeline
#
新增功能
pipeline.FeatureUnion
现在可以使用索引表示法(例如feature_union["scalar"]
)按名称访问转换器。 #25093 由 Thomas Fan贡献。新增功能 如果在
.fit
期间看到的X
值具有columns
属性并且所有列都是字符串,则pipeline.FeatureUnion
现在可以访问feature_names_in_
属性。例如,当X
是pandas.DataFrame
时。 #25220 由 Ian Thompson贡献。修复 如果管道的最后一步不支持
fit_transform
,则pipeline.Pipeline.fit_transform
现在会引发AttributeError
。 #26325 由 Adrin Jalali贡献。
sklearn.preprocessing
#
主要功能 引入
preprocessing.TargetEncoder
,这是一种基于目标均值(以类别值为条件)的类别编码。 #25334 由 Thomas Fan贡献。新增功能
preprocessing.OrdinalEncoder
现在支持将不频繁的类别分组到单个特征中。可以通过使用min_frequency
或max_categories
指定如何选择不频繁的类别来启用不频繁类别的分组。 #25677 由 Thomas Fan贡献。增强
preprocessing.PolynomialFeatures
现在在处理稀疏csr
矩阵时会预先计算扩展项的数量,以便优化indices
和indptr
的dtype
选择。当元素数量足够少时,它现在可以输出具有np.int32
indices/indptr
分量的csr
矩阵,并且会自动对足够大的矩阵使用np.int64
。 #20524 由 niuk-a 和 #23731 由 Meekail Zain贡献。增强 一个新的参数
sparse_output
已添加到preprocessing.SplineTransformer
(自 SciPy 1.8 起可用)。如果sparse_output=True
,则preprocessing.SplineTransformer
将返回一个稀疏 CSR 矩阵。 #24145 由 Christian Lorentzen贡献。增强 向
preprocessing.OneHotEncoder
添加了一个feature_name_combiner
参数。该参数指定一个自定义的可调用对象,用于创建preprocessing.OneHotEncoder.get_feature_names_out
返回的特征名称。此可调用对象将输入参数(input_feature, category)
组合成一个字符串。#22506 由 Mario Kostelac 贡献。增强 在
preprocessing.KBinsDiscretizer
中添加了对sample_weight
的支持。这允许为每个样本指定sample_weight
参数,以便在拟合过程中使用。此选项仅在strategy
设置为quantile
和kmeans
时可用。#24935 由 Seladus、Guillaume Lemaitre 和 Dea María Léon 贡献,#25257 由 Gleb Levitski 贡献。增强 现在,无论使用哪种策略,都可以在
preprocessing.KBinsDiscretizer
中使用subsample
参数进行子采样。#26424 由 Jérémie du Boisberranger 贡献。修复 当
set_config(transform_output="pandas")
时,preprocessing.PowerTransformer
现在可以正确保留 Pandas 索引。#26454 由 Thomas Fan 贡献。修复 当使用
method="box-cox"
对包含常量np.nan
列的数据进行处理时,preprocessing.PowerTransformer
现在会正确地抛出错误。#26400 由 Yao Xiao 贡献。修复 使用
method="yeo-johnson"
的preprocessing.PowerTransformer
现在会将常量特征保持不变,而不是使用拟合参数lambdas_
的任意值进行转换。#26566 由 Jérémie du Boisberranger 贡献。API 变更 当
strategy="kmeans"
或strategy="uniform"
时,preprocessing.KBinsDiscretizer
的subsample
参数的默认值将在 1.5 版本中从None
更改为200_000
。#26424 由 Jérémie du Boisberranger 贡献。
sklearn.svm
#
API 变更
svm.LinearSVC
和svm.LinearSVR
的dual
参数现在接受auto
选项。#26093 由 Gleb Levitski 贡献。
sklearn.tree
#
主要功能 当
splitter='best'
且标准为分类的gini
、entropy
或log_loss
,或回归的squared_error
、friedman_mse
或poisson
时,tree.DecisionTreeRegressor
和tree.DecisionTreeClassifier
支持缺失值。#23595,#26376 由 Thomas Fan 贡献。增强 向
tree.export_text
添加了一个class_names
参数。这允许为每个目标类别(按升序数字顺序)指定class_names
参数。#25387 由 William M 和 crispinlogan 贡献。修复
tree.export_graphviz
和tree.export_text
现在接受feature_names
和class_names
为类数组而非列表。 #26289 由 肖瑶 完成。
sklearn.utils
#
修复 修复了
utils.check_array
以正确转换 pandas 扩展数组。 #25813 和 #26106 由 Thomas Fan 完成。修复
utils.check_array
现在支持包含扩展数组和 object 数据类型的 pandas DataFrame,并返回一个 object 数据类型的 ndarray。 #25814 由 Thomas Fan 完成。API 变更 引入了
utils.estimator_checks.check_transformers_unfitted_stateless
以确保无状态转换器在没有先前调用fit
或fit_transform
的情况下,transform
不会引发NotFittedError
。 #25190 由 Vincent Maladière 完成。API 变更 当实例化继承自已弃用基类(即用
utils.deprecated
装饰)并覆盖__init__
方法的类时,现在会引发FutureWarning
警告。 #25733 由 Brigitta Sipőcz 和 Jérémie du Boisberranger 完成。
sklearn.semi_supervised
#
增强
semi_supervised.LabelSpreading.fit
和semi_supervised.LabelPropagation.fit
现在接受稀疏度量。 #19664 由 Kaushik Amar Das 完成。
其他#
增强 替换已弃用的异常
EnvironmentError
、IOError
和WindowsError
。 #26466 由 Dimitri Papadopoulos ORfanos 完成。
代码和文档贡献者
感谢自 1.2 版本以来为项目维护和改进做出贡献的每一个人,包括:
2357juan, Abhishek Singh Kushwah, Adam Handke, Adam Kania, Adam Li, adienes, Admir Demiraj, adoublet, Adrin Jalali, A.H.Mansouri, Ahmedbgh, Ala-Na, Alex Buzenet, AlexL, Ali H. El-Kassas, amay, András Simon, André Pedersen, Andrew Wang, Ankur Singh, annegnx, Ansam Zedan, Anthony22-dev, Artur Hermano, Arturo Amor, as-90, ashah002, Ashish Dutt, Ashwin Mathur, AymericBasset, Azaria Gebremichael, Barata Tripramudya Onggo, Benedek Harsanyi, Benjamin Bossan, Bharat Raghunathan, Binesh Bannerjee, Boris Feld, Brendan Lu, Brevin Kunde, cache-missing, Camille Troillard, Carla J, carlo, Carlo Lemos, c-git, Changyao Chen, Chiara Marmo, Christian Lorentzen, Christian Veenhuis, Christine P. Chai, crispinlogan, Da-Lan, DanGonite57, Dave Berenbaum, davidblnc, david-cortes, Dayne, Dea María Léon, Denis, Dimitri Papadopoulos Orfanos, Dimitris Litsidis, Dmitry Nesterov, Dominic Fox, Dominik Prodinger, Edern, Ekaterina Butyugina, Elabonga Atuo, Emir, farhan khan, Felipe Siola, futurewarning, Gael Varoquaux, genvalen, Gleb Levitski, Guillaume Lemaitre, gunesbayir, Haesun Park, hujiahong726, i-aki-y, Ian Thompson, Ido M, Ily, Irene, Jack McIvor, jakirkham, James Dean, JanFidor, Jarrod Millman, JB Mountford, Jérémie du Boisberranger, Jessicakk0711, Jiawei Zhang, Joey Ortiz, JohnathanPi, John Pangas, Joshua Choo Yun Keat, Joshua Hedlund, JuliaSchoepp, Julien Jerphanion, jygerardy, ka00ri, Kaushik Amar Das, Kento Nozawa, Kian Eliasi, Kilian Kluge, Lene Preuss, Linus, Logan Thomas, Loic Esteve, Louis Fouquet, Lucy Liu, Madhura Jayaratne, Marc Torrellas Socastro, Maren Westermann, Mario Kostelac, Mark Harfouche, Marko Toplak, Marvin Krawutschke, Masanori Kanazu, mathurinm, Matt Haberland, Max Halford, maximeSaur, Maxwell Liu, m. bou, mdarii, Meekail Zain, Mikhail Iljin, murezzda, Nawazish Alam, Nicola Fanelli, Nightwalkx, Nikolay Petrov, Nishu Choudhary, NNLNR, npache, Olivier Grisel, Omar Salman, ouss1508, PAB, Pandata, partev, Peter Piontek, Phil, pnucci, Pooja M, Pooja Subramaniam, precondition, Quentin Barthélemy, Rafal Wojdyla, Raghuveer Bhat, Rahil Parikh, Ralf Gommers, ram vikram singh, Rushil Desai, Sadra Barikbin, SANJAI_3, Sashka Warner, Scott Gigante, Scott Gustafson, searchforpassion, Seoeun Hong, Shady el Gewily, Shiva chauhan, Shogo Hida, Shreesha Kumar Bhat, sonnivs, Sortofamudkip, Stanislav (Stanley) Modrak, Stefanie Senger, Steven Van Vaerenbergh, Tabea Kossen, Théophile Baranger, Thijs van Weezel, Thomas A Caswell, Thomas Germer, Thomas J. Fan, Tim Head, Tim P, Tom Dupré la Tour, tomiock, tspeng, Valentin Laurent, Veghit, VIGNESH D, Vijeth Moudgalya, Vinayak Mehta, Vincent M, Vincent-violet, Vyom Pathak, William M, windiana42, Xiao Yuan, Yao Xiao, Yaroslav Halchenko, Yotam Avidar-Constantini, Yuchen Zhou, Yusuf Raji, zeeshan lone