版本 1.3#
有关此版本主要亮点的简短说明,请参阅 scikit-learn 1.3 发布亮点。
变更日志图例
主要特性 之前无法实现的重大功能。
特性 之前无法实现的功能。
效率 现有功能现在可能不需要那么多计算或内存。
改进 一项杂项的小改进。
修复 之前未按文档说明工作或未达到合理预期的问题现在应该已修复。
API变更 您将来需要更改代码才能达到相同的效果;或者某功能将在未来移除。
版本 1.3.2#
2023年10月
变更日志#
sklearn.datasets
#
修复 所有数据集获取器现在都接受
data_home
作为实现os.PathLike
接口的任何对象,例如pathlib.Path
。 #27468 由 Yao Xiao。
sklearn.decomposition
#
修复 修复了
decomposition.KernelPCA
中的一个错误,通过强制内部preprocessing.KernelCenterer
的输出为默认数组。当使用arpack求解器时,它需要一个带有dtype
属性的数组。 #27583 由 Guillaume Lemaitre。
sklearn.metrics
#
修复 修复了在并行循环中(例如
cross_val_score
)使用zero_division=np.nan
(例如precision_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
为整数dtype时,现在可以正确计算结果。 #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
#
修复 从用户提供的
precisions_init
初始化mixture.GaussianMixture
(用于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。改进
sample_weight
参数现在将用于cluster.KMeans
、cluster.BisectingKMeans
和cluster.MiniBatchKMeans
的质心初始化。此更改将破坏向后兼容性,因为从相同随机种子生成的数字将不同。 #25752 由 Hleb 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
可能会产生不同的结果。现在它将正确选择为拟合数据中特征数量的倒数,而之前可能会错误地选择为传递给inverse_transform
的数据中特征数量的倒数。提供了一个新属性gamma_
,用于显示每次调用核函数时实际使用的gamma
值。 #26337 由 Yao Xiao。
变更的显示#
改进
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。
改进 添加了一个多线程的Cython例程,用于计算由稀疏CSR矩阵和密集NumPy组成的一对数据集的欧几里德距离平方(有时后跟融合缩减操作)。
这可以提高以下函数和估计器的性能
这种性能改进的典型示例是当将稀疏CSR矩阵传递给依赖密集NumPy表示来存储其拟合参数的估计器的
predict
或transform
方法时(或反之)。例如,在这种情况下,在常见的笔记本电脑上,
sklearn.neighbors.NearestNeighbors.kneighbors
现在速度提高了2倍。改进 所有内部依赖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 等人完成。
改进
sample_weight
参数现在将用于cluster.KMeans
、cluster.BisectingKMeans
和cluster.MiniBatchKMeans
的质心初始化。此更改将破坏向后兼容性,因为从相同随机种子生成的数字将不同。 #25752 由 Hleb 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
中的predict
参数sample_weight
现已弃用,并将在v1.5版本中移除。 #25251 由 Hleb Levitski。API变更
cluster.FeatureAgglomeration.inverse_transform
中的Xred
参数已重命名为Xt
,并将在v1.5版本中移除。 #26503 由 Adrin Jalali。
sklearn.compose
#
修复
compose.ColumnTransformer
当其各个转换器输出的pandas数据帧的索引彼此不一致,且输出配置为pandas时,会引发一个信息性错误。 #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。效率
ensemble.RandomForestClassifier
和ensemble.RandomForestRegressor
在warm_start=True
时,现在只在后续的fit
调用中实际有更多的n_estimators
时才重新计算袋外分数。 #26318 由 Joshua Choo Yun Keat。改进
ensemble.BaggingClassifier
和ensemble.BaggingRegressor
公开底层估计器的allow_nan
标签。 #25506 由 Thomas Fan。修复
ensemble.RandomForestClassifier.fit
当max_samples
为浮点数且round(n_samples * max_samples) < 1
时,将max_samples = 1
。 #25601 由 Jan Fidor。修复 当在pandas数据帧上调用
ensemble.IsolationForest.fit
且contamination
不为"auto"
时,不再警告缺少特征名称。 #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版本不一致的版本反序列化时会引发此警告。 #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的dtype。 #25102 由 Thomas Fan。修复
feature_selection.SequentialFeatureSelector
的cv
参数现在支持生成器。 #25973 由Yao Xiao <Charlie-XIAO>
。
sklearn.impute
#
改进 将参数
fill_value
添加到impute.IterativeImputer
。 #25232 由 Thijs van Weezel。修复 当
set_config(transform_output="pandas")
时,impute.IterativeImputer
现在可以正确保留Pandas索引。 #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
#
效率 避免在
linear_model.LinearRegression
中当sample_weight=None
时的数据缩放以及其他不必要的数据复制和意外的密集到稀疏数据转换。 #26207 由 Olivier Grisel。改进
linear_model.SGDClassifier
、linear_model.SGDRegressor
和linear_model.SGDOneClassSVM
现在保留numpy.float32
的dtype。 #25587 由 Omar Salman。改进 属性
n_iter_
已包含在linear_model.ARDRegression
中,以显示达到停止准则所需的实际迭代次数。 #25697 由 John Pangas。修复 使用更鲁棒的准则来检测
linear_model.LogisticRegression
在线性可分问题上使用penalty="l1"
和solver="liblinear"
时的收敛。 #25214 由 Tom Dupre la Tour。修复 修复了在对
linear_model.LogisticRegression
调用fit
时,若solver="newton-cholesky"
且max_iter=0
则会崩溃的问题。该问题是由于在第一次参数更新前未能检查模型状态引起的。 #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
#
修复 当
set_config(transform_output="pandas")
时,manifold.Isomap
现在可以正确保留 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
中,当唯一标签数量较大时,预期互信息(expected mutual information)的计算现在更快,并且总体内存使用量也减少了。 #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,由 Yao Xiao 提交。功能增强
metrics.PrecisionRecallDisplay.from_estimator
和metrics.PrecisionRecallDisplay.from_predictions
现在接受两个新关键字参数plot_chance_level
和chance_level_kw
,用于绘制基线偶然水平。这条线通过chance_level_
属性暴露。 #26019,由 Yao Xiao 提交。修复
metrics.pairwise.manhattan_distances
现在支持只读稀疏数据集。 #25432,由 Julien Jerphanion 提交。修复 修复了
metrics.classification_report
,使其在输入为空时返回np.nan
。此前,“macro avg” 和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 提交。修复
metrics.log_loss
在参数y_pred
的值未归一化时会发出警告,而不是在指标中实际对其进行归一化。从 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,由 Zhehao Liu 提交。
sklearn.mixture
#
效率改进
mixture.GaussianMixture
现在效率更高,如果用户提供了权重、均值和精度,它将跳过不必要的初始化。 #26021,由 Jiawei Zhang 提交。
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
,用于返回每个交叉验证分割的训练-测试索引。 #25659,由 Guillaume Lemaitre 提交。
sklearn.multioutput
#
修复 在
getattr
上对multioutput.MultiOutputRegressor.partial_fit
和multioutput.MultiOutputClassifier.partial_fit
操作,如果调用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
的支持。此相异度不是度量(metric),因此 BallTree 无法支持。 #25417,由 Guillaume Lemaitre 提交。API变更
neighbors.NearestNeighbors
中除了euclidean
和manhattan
之外的其他度量以及可调用对象的支持已被弃用,并将在 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
属性且所有列均为字符串(例如X
是一个pandas.DataFrame
),pipeline.FeatureUnion
现在可以访问feature_names_in_
属性。 #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
选择。当元素数量足够少时,它现在可以输出indices/indptr
组件为np.int32
的csr
矩阵,对于足够大的矩阵则会自动使用np.int64
。 #20524 由 niuk-a 提交,以及 #23731 由 Meekail Zain 提交。功能增强
preprocessing.SplineTransformer
新增参数sparse_output
,从 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 由 Hleb Levitski 提交。功能增强 现在,无论使用何种策略,
preprocessing.KBinsDiscretizer
都可以通过subsample
参数进行子采样。 #26424,由 Jérémie du Boisberranger 提交。修复 当
set_config(transform_output="pandas")
时,preprocessing.PowerTransformer
现在可以正确保留 Pandas 索引。 #26454,由 Thomas Fan 提交。修复
preprocessing.PowerTransformer
现在在使用method="box-cox"
处理包含常数np.nan
列的数据时,会正确引发错误。 #26400,由 Yao Xiao 提交。修复 使用
method="yeo-johnson"
的preprocessing.PowerTransformer
现在会保持常数特征不变,而不是使用任意的lambdas_
拟合参数值进行转换。 #26566,由 Jérémie du Boisberranger 提交。API变更
preprocessing.KBinsDiscretizer
的subsample
参数的默认值将从None
在 1.5 版本中变更为200_000
,当strategy="kmeans"
或strategy="uniform"
时。 #26424,由 Jérémie du Boisberranger 提交。
sklearn.svm
#
API变更
svm.LinearSVC
和svm.LinearSVR
的dual
参数现在接受auto
选项。 #26093,由 Hleb Levitski 提交。
sklearn.tree
#
重大功能
tree.DecisionTreeRegressor
和tree.DecisionTreeClassifier
在splitter='best'
且分类的准则为gini
、entropy
或log_loss
,或回归的准则为squared_error
、friedman_mse
或poisson
时,支持缺失值。 #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,由 Yao Xiao 提交。
sklearn.utils
#
修复 修复了
utils.check_array
,使其能够正确转换 pandas 扩展数组。 #25813 和 #26106,由 Thomas Fan 提交。修复
utils.check_array
现在支持包含扩展数组和对象 dtype 的 pandas DataFrame,通过返回一个对象 dtype 的 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, Hleb 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