版本 0.22#
有关此版本主要亮点的简要说明,请参阅 scikit-learn 0.22 发布亮点。
更新日志图例
主要功能 以前无法实现的重要功能。
功能 以前无法实现的功能。
效率 现有功能现在可能不再需要那么多计算或内存。
改进 一项杂项的小改进。
修复 以前未按文档说明工作或未达到合理预期的问题现在应该已修复。
API 变更 将来您需要更改代码才能实现相同的效果;或者某个功能将在未来移除。
版本 0.22.2.post1#
2020年3月3日
0.22.2.post1 版本包含对源代码分发的打包修复,但包内容与 0.22.2 版本(不带 .post1 后缀)的 wheel 包内容相同。两者都包含以下更改。
更新日志#
sklearn.impute
#
效率 通过分块计算成对距离,减少
impute.KNNImputer
的渐进内存使用量。 #16397 由 Joel Nothman 提交。
sklearn.metrics
#
修复 修复了
metrics.plot_roc_curve
中的一个错误,该错误将估计器名称传递给了metrics.RocCurveDisplay
而不是参数name
。这导致后续调用metrics.RocCurveDisplay.plot
时生成不同的图。 #16500 由 Guillaume Lemaitre 提交。修复 修复了
metrics.plot_precision_recall_curve
中的一个错误,该错误将估计器名称传递给了metrics.PrecisionRecallDisplay
而不是参数name
。这导致后续调用metrics.PrecisionRecallDisplay.plot
时生成不同的图。 #16505 由 Guillaume Lemaitre 提交。
sklearn.neighbors
#
修复 修复了一个错误,该错误将数组列表转换为二维对象数组,而不是包含 NumPy 数组的一维数组。此错误影响了
neighbors.NearestNeighbors.radius_neighbors
。 #16076 由 Guillaume Lemaitre 和 Alex Shacked 提交。
版本 0.22.1#
2020年1月2日
这是一个错误修复版本,主要解决了 0.22.0 版本中的一些打包问题。它还包括一些次要的文档改进和一些错误修复。
更新日志#
sklearn.cluster
#
修复
cluster.KMeans
当algorithm="elkan"
时,现在使用与默认algorithm="full"
相同的停止准则。 #15930 由 @inder128 提交。
sklearn.inspection
#
修复
inspection.permutation_importance
在n_jobs=1
或n_jobs>1
且使用共享内存后端(线程安全)和独立内存、基于进程的后端时,如果给定random_state
,将返回相同的importances
。同时避免将数据转换为对象 dtype,并避免在n_jobs>1
的大型数据框上出现只读错误,如 #15810 中所报告。这是 #15898 的后续工作,由 Shivam Gargsya 提交。 #15933 由 Guillaume Lemaitre 和 Olivier Grisel 提交。修复
inspection.plot_partial_dependence
和inspection.PartialDependenceDisplay.plot
现在一致地检查传入的轴数量。 #15760 由 Thomas Fan 提交。
sklearn.metrics
#
修复
metrics.plot_confusion_matrix
现在当normalize
无效时会引发错误。以前,在没有归一化的情况下它运行良好。 #15888 由 Hanmin Qin 提交。修复
metrics.plot_confusion_matrix
现在正确地为标签着色,以最大化与背景的对比度。 #15936 由 Thomas Fan 和 @DizietAsahi 提交。修复
metrics.classification_report
不再忽略zero_division
关键字参数的值。 #15879 由 Bibhash Chandra Mitra 提交。修复 修复了
metrics.plot_confusion_matrix
中的一个错误,以正确地将values_format
参数传递给metrics.ConfusionMatrixDisplay
的 plot() 调用。 #15937 由 Stephen Blystone 提交。
sklearn.model_selection
#
修复
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
接受fit_params
中提供的标量值。0.22 中的更改破坏了向后兼容性。 #15863 由 Adrin Jalali 和 Guillaume Lemaitre 提交。
sklearn.naive_bayes
#
修复 移除了
naive_bayes.BaseNB
中方法_check_X
的abstractmethod
装饰器,该装饰器可能会破坏继承自此已弃用公共基类的下游项目。 #15996 由 Brigitta Sipőcz 提交。
sklearn.preprocessing
#
修复
preprocessing.QuantileTransformer
现在保证quantiles_
属性完全按非递减方式排序。 #15751 由 Tirth Patel 提交。
sklearn.semi_supervised
#
修复
semi_supervised.LabelPropagation
和semi_supervised.LabelSpreading
现在允许可调用核函数返回稀疏权重矩阵。 #15868 由 Niklas Smedemark-Margulies 提交。
sklearn.utils
#
修复
utils.check_array
现在可以正确地将带有布尔列的 pandas DataFrame 转换为浮点数。 #15797 由 Thomas Fan 提交。修复
utils.validation.check_is_fitted
重新接受明确的attributes
参数,以检查特定属性作为拟合估计器的明确标记。当未提供明确的attributes
时,只有以下划线结尾且不以下划线开头(即不是双下划线开头)的属性用作“已拟合”标记。all_or_any
参数也不再被弃用。此更改旨在恢复与 0.21 版本中此实用程序行为的一些向后兼容性。 #15947 由 Thomas Fan 提交。
版本 0.22.0#
2019年12月3日
网站更新#
我们的网站 进行了改版,焕然一新。 #14849 由 Thomas Fan 提交。
明确公共 API 的定义#
Scikit-learn 拥有公共 API 和私有 API。
我们尽力不破坏公共 API,并且只引入向后兼容的更改,这些更改不需要任何用户操作。然而,在无法避免的情况下,对公共 API 的任何更改都将遵循两个次要版本的弃用周期。私有 API 未公开文档化,也不受任何弃用周期的约束,因此用户不应依赖其稳定性。
如果一个函数或对象在 API 参考 中有文档说明,并且可以通过不带前导下划线的导入路径导入,那么它是公共的。例如,sklearn.pipeline.make_pipeline
是公共的,而 sklearn.pipeline._name_estimators
是私有的。sklearn.ensemble._gb.BaseEnsemble
也是私有的,因为整个 _gb
模块是私有的。
截至 0.22 版本,一些工具实际上是公共的(没有前导下划线),而它们本应是私有的。在 0.22 版本中,这些工具已被正确私有化,公共 API 空间也得到了清理。此外,从大多数子模块导入现在已被弃用:例如,您应该使用 from sklearn.cluster import Birch
而不是 from sklearn.cluster.birch import Birch
(实际上,birch.py
已移至 _birch.py
)。
注意
公共 API 中的所有工具都应在 API 参考 中有文档说明。如果您发现一个公共工具(没有前导下划线)不在 API 参考中,这意味着它要么应该是私有的,要么应该有文档说明。请通过提出 issue 告知我们!
这项工作在 issue 9250 和 issue 12927 中进行了跟踪。
弃用:从现在开始使用 FutureWarning
#
在弃用某个功能时,scikit-learn 的先前版本通常会引发 DeprecationWarning
。由于 Python 默认不显示 DeprecationWarnings
,scikit-learn 需要依靠自定义警告过滤器来始终显示警告。该过滤器有时会干扰用户的自定义警告过滤器。
从 0.22 版本开始,scikit-learn 将针对弃用功能显示 FutureWarnings
,这符合 Python 文档的建议。FutureWarnings
默认总是由 Python 显示,因此已移除自定义过滤器,scikit-learn 不再干扰用户过滤器。 #15080 由 Nicolas Hug 提交。
模型变更#
以下估计器和函数,在使用相同数据和参数拟合时,可能会生成与之前版本不同的模型。这通常是由于建模逻辑(错误修复或改进)或随机采样过程的变化引起的。
cluster.KMeans
当n_jobs=1
时。 修复decomposition.SparseCoder
、decomposition.DictionaryLearning
和decomposition.MiniBatchDictionaryLearning
修复decomposition.SparseCoder
当algorithm='lasso_lars'
时 修复decomposition.SparsePCA
其中normalize_components
因弃用而无效。ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
修复 , 功能 , 改进 .impute.IterativeImputer
当X
具有无缺失值的特征时。 功能linear_model.Ridge
当X
是稀疏时。 修复model_selection.StratifiedKFold
以及分类器使用cv=int
的任何情况。 修复cross_decomposition.CCA
当使用 scipy >= 1.3 时 修复
详细信息在下面的更新日志中列出。
(尽管我们努力通过提供此信息来更好地告知用户,但我们无法保证此列表是完整的。)
更新日志#
sklearn.base
#
API 变更 从 0.24 版本开始,
base.BaseEstimator.get_params
对于在估计器构造函数中但未作为实例属性存储的参数将引发 AttributeError,而不是返回 None。 #14464 由 Joel Nothman 提交。
sklearn.calibration
#
修复 修复了一个错误,该错误导致
calibration.CalibratedClassifierCV
在给定list
类型的sample_weight
参数时失败(在包装的估计器不支持sample_weights
的情况下)。 #13575 由 William de Vazelhes 提交。
sklearn.cluster
#
功能
cluster.SpectralClustering
现在接受预计算的稀疏邻居图作为输入。 #10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 提交。改进
cluster.SpectralClustering
现在接受n_components
参数。此参数扩展了SpectralClustering
类的功能,以匹配cluster.spectral_clustering
。 #13726 由 Shuzhe Xiao 提交。修复 修复了
cluster.KMeans
由于随机状态的处理,在n_jobs=1
和n_jobs>1
之间产生了不一致结果的错误。 #9288 由 Bryan Yang 提交。修复 修复了
cluster.KMeans
中的elkan
算法由于整数索引溢出,在大型数组上产生分段错误的错误。 #15057 由 Vladimir Korolev 提交。修复
MeanShift
现在接受一个默认值为 300 的 max_iter,而不是始终使用默认值 300。它现在还公开了一个n_iter_
属性,指示在每个种子(seed)上执行的最大迭代次数。 #15120 由 Adrin Jalali 提交。修复
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
现在,如果affinity='cosine'
并且X
包含全零样本,则会引发错误。 #7943 由 @mthorrell 提交。
sklearn.compose
#
功能 添加了
compose.make_column_selector
,它与compose.ColumnTransformer
一起使用,根据名称和 dtype 选择 DataFrame 列。 #12303 由 Thomas Fan 提交。修复 修复了
compose.ColumnTransformer
中的一个错误,该错误在使用布尔列表且 NumPy 版本低于 1.12 时未能选择正确的列。 #14510 由 Guillaume Lemaitre 提交。修复 修复了
compose.TransformedTargetRegressor
中的一个错误,该错误未将**fit_params
传递给底层回归器。 #14890 由 Miguel Cabrera 提交。修复
compose.ColumnTransformer
现在要求fit
和transform
之间的特征数量一致。现在会引发FutureWarning
,在 0.24 版本中这将引发错误。如果特征数量不一致且使用负索引,则会引发错误。 #14544 由 Adrin Jalali 提交。
sklearn.cross_decomposition
#
功能
cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
新增了inverse_transform
函数,用于将数据转换回原始空间。 #15304 由 Jaime Ferrando Huertas 提交。改进
decomposition.KernelPCA
现在正确检查求解器找到的特征值是否存在数值或条件问题。这确保了不同求解器(eigen_solver
的不同选择)结果的一致性,包括近似求解器,例如'randomized'
和'lobpcg'
(参见 #12068)。 #12145 由 Sylvain Marié 提交。修复 修复了一个错误,该错误导致
cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
当使用目标矩阵Y
拟合时(其中第一列为常数),会引发错误。 #13609 由 Camila Williamson 提交。修复
cross_decomposition.CCA
现在使用 scipy 1.3 及更早的 scipy 版本产生相同的结果。 #15661 由 Thomas Fan 提交。
sklearn.datasets
#
功能
datasets.fetch_openml
现在通过设置as_frame=True
支持使用 pandas 的异构数据。 #13902 由 Thomas Fan 提交。功能
datasets.fetch_openml
现在在返回的 Bunch 中包含了target_names
。 #15160 由 Thomas Fan 提交。改进 参数
return_X_y
已添加到datasets.fetch_20newsgroups
和datasets.fetch_olivetti_faces
。 #14259 由 Sourav Singh 提交。改进
datasets.make_classification
现在接受类似数组的weights
参数,即列表或 numpy.array,而不仅仅是列表。 #14764 由 Cat Chenal 提交。- 改进 参数
normalize
已添加到 datasets.fetch_20newsgroups_vectorized
。 #14740 由 Stéphan Tulkens 提交
- 改进 参数
修复 修复了
datasets.fetch_openml
中的一个错误,该错误未能加载包含被忽略特征的 OpenML 数据集。 #14623 由 Sarra Habchi 提交。
sklearn.decomposition
#
效率
decomposition.NMF
当solver="mu"
拟合稀疏输入矩阵时,现在使用批处理来避免暂时分配一个大小为(非零元素数量,n_components)的数组。 #15257 由 Mart Willocx 提交。改进
decomposition.dict_learning
和decomposition.dict_learning_online
现在接受method_max_iter
并将其传递给decomposition.sparse_encode
。 #12650 由 Adrin Jalali 提交。改进
decomposition.SparseCoder
、decomposition.DictionaryLearning
和decomposition.MiniBatchDictionaryLearning
现在接受transform_max_iter
参数,并将其传递给decomposition.dict_learning
或decomposition.sparse_encode
。 #12650 由 Adrin Jalali 提交。改进
decomposition.IncrementalPCA
现在接受稀疏矩阵作为输入,将其分批转换为密集矩阵,从而避免一次性存储整个密集矩阵的需要。 #13960 由 Scott Gigante 提交。修复
decomposition.sparse_encode
现在当algorithm='lasso_lars'
时,将max_iter
传递给底层的linear_model.LassoLars
。 #12650 由 Adrin Jalali 提交。
sklearn.dummy
#
修复
dummy.DummyClassifier
现在处理多输出情况下检查所提供常量是否存在的问题。 #14908 由 Martina G. Vilas 提交。API 变更
dummy.DummyClassifier
中strategy
参数的默认值将从 0.22 版本的'stratified'
更改为 0.24 版本中的'prior'
。当使用默认值时,会引发 FutureWarning。 #15382 由 Thomas Fan 提交。API 变更
dummy.DummyClassifier
和dummy.DummyRegressor
中的outputs_2d_
属性已被弃用。它等同于n_outputs > 1
。 #14933 由 Nicolas Hug 提交。
sklearn.ensemble
#
主要功能 添加了
ensemble.StackingClassifier
和ensemble.StackingRegressor
,用于使用最终分类器或回归器堆叠预测器。 #11047 由 Guillaume Lemaitre 和 Caio Oliveira 提交,#15138 由 Jon Cusick 提交。主要功能 对
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
进行了多项改进。功能 估计器现在原生支持训练和预测时包含缺失值的密集数据。它们还支持无限值。 #13911 和 #14406 由 Nicolas Hug、Adrin Jalali 和 Olivier Grisel 提交。
功能 估计器现在拥有一个额外的
warm_start
参数,支持热启动。 #14012 由 Johann Faouzi 提交。功能
inspection.partial_dependence
和inspection.plot_partial_dependence
现在支持两种估计器的快速“递归”方法。 #13769 由 Nicolas Hug 提交。改进 对于
ensemble.HistGradientBoostingClassifier
,现在在按类别分层的子样本上监控训练损失或分数,以保留原始训练集的类别平衡。 #14194 由 Johann Faouzi 提交。改进
ensemble.HistGradientBoostingRegressor
现在支持“最小绝对偏差”损失。 #13896 由 Nicolas Hug 提交。修复 估计器现在分别对训练数据和验证数据进行分箱,以避免任何数据泄露。 #13933 由 Nicolas Hug 提交。
修复 修复了一个错误,该错误导致使用字符串目标时提前停止会中断。 #14710 由 Guillaume Lemaitre 提交。
修复
ensemble.HistGradientBoostingClassifier
如果二分类问题给出了categorical_crossentropy
损失,现在会引发错误。 #14869 由 Adrin Jalali 提交。
请注意,0.21 版本的 pickle 在 0.22 版本中将无法工作。
改进 添加了
max_samples
参数,允许将引导样本的大小限制为小于数据集大小。已添加到ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
、ensemble.ExtraTreesRegressor
。 #14682 由 Matt Hancock 和 #5963 由 Pablo Duboue 提交。修复
ensemble.VotingClassifier.predict_proba
当voting='hard'
时将不再存在。 #14287 由 Thomas Fan 提交。修复
ensemble.VotingClassifier
和ensemble.VotingRegressor
中的named_estimators_
属性现在正确映射到已删除的估计器。以前,每当其中一个估计器被删除时,named_estimators_
映射都是不正确的。 #15375 由 Thomas Fan 提交。修复 默认对
ensemble.VotingClassifier
和ensemble.VotingRegressor
运行utils.estimator_checks.check_estimator
。这解决了predict
期间形状一致性问题,该问题在底层估计器未输出一致数组维度时会失败。请注意,将来应该通过重构通用测试来替换它。 #14305 由 Guillaume Lemaitre 提交。修复
ensemble.AdaBoostClassifier
根据文献中的决策函数计算概率。因此,predict
和predict_proba
给出一致的结果。 #14114 由 Guillaume Lemaitre 提交。修复 堆叠和投票估计器现在确保其底层估计器要么全是分类器,要么全是回归器。
ensemble.StackingClassifier
、ensemble.StackingRegressor
、ensemble.VotingClassifier
和ensemble.VotingRegressor
现在会引发一致的错误消息。 #15084 由 Guillaume Lemaitre 提交。修复
ensemble.AdaBoostRegressor
其中损失应仅按非空权重样本的最大值进行归一化。 #14294 由 Guillaume Lemaitre 提交。API 变更
presort
在ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中现已弃用,该参数不再起作用。建议用户改用ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
。 #14907 由 Adrin Jalali 提交。
sklearn.feature_extraction
#
改进 现在,如果在调用
fit()
方法时,某个参数选择会导致其他参数被未使用,则会发出警告,适用于feature_extraction.text.HashingVectorizer
、feature_extraction.text.CountVectorizer
和feature_extraction.text.TfidfVectorizer
。#14602 由 Gaurav Chawla 贡献。修复 由
feature_extraction.text.VectorizerMixin
的build_preprocessor
和build_analyzer
创建的函数现在可以被序列化(pickled)。#14430 由 Dillon Niederhut 贡献。修复
feature_extraction.text.strip_accents_unicode
现在可以正确地从 NFKD 规范化形式的字符串中删除重音符号。#15100 由 Daniel Grady 贡献。修复 修复了一个错误,该错误导致
feature_extraction.DictVectorizer
在对大型输入数据执行transform
操作以生成scipy.sparse
矩阵时引发OverflowError
。#15463 由 Norvan Sahiner 贡献。API变更 弃用了
feature_extraction.text.TfidfVectorizer.transform
中未使用的copy
参数,该参数将在 v0.24 中移除。#14520 由 Guillem G. Subies 贡献。
sklearn.feature_selection
#
改进 更新了以下
sklearn.feature_selection
估计器,允许在transform
和fit
中使用 NaN/Inf 值:feature_selection.RFE
、feature_selection.RFECV
、feature_selection.SelectFromModel
和feature_selection.VarianceThreshold
。请注意,如果特征选择器的底层估计器不允许 NaN/Inf,则仍会报错,但特征选择器本身不再不必要地强制此限制。#11635 由 Alec Peters 贡献。修复 修复了一个错误,该错误导致
feature_selection.VarianceThreshold
在threshold=0
时,由于数值不稳定而未能移除常数特征,此情况下现在使用范围(range)而非方差(variance)。#13704 由 Roddy MacSween 贡献。
sklearn.gaussian_process
#
新功能 结构化数据上的高斯过程模型:
gaussian_process.GaussianProcessRegressor
和gaussian_process.GaussianProcessClassifier
现在可以接受通用对象列表(例如字符串、树、图等)作为其训练/预测方法的X
参数。应提供用户定义的核函数,用于计算通用对象之间的核矩阵,并且该核函数应继承自gaussian_process.kernels.GenericKernelMixin
,以告知 GPR/GPC 模型它处理的是非向量样本。#15557 由 Yu-Hang Tang 贡献。效率
gaussian_process.GaussianProcessClassifier.log_marginal_likelihood
和gaussian_process.GaussianProcessRegressor.log_marginal_likelihood
现在接受一个clone_kernel=True
关键字参数。当设置为False
时,核属性会被修改,但可能会带来性能提升。#14378 由 Masashi Shibata 贡献。API变更 从 0.24 版本开始,
gaussian_process.kernels.Kernel.get_params
将对估计器构造函数中存在但未作为实例属性存储的参数引发AttributeError
,而不是返回None
。#14464 由 Joel Nothman 贡献。
sklearn.impute
#
重要新功能 新增
impute.KNNImputer
,用于使用 k-近邻算法插补缺失值。#12852 由 Ashim Bhattarai 和 Thomas Fan 贡献,以及 #15010 由 Guillaume Lemaitre 贡献。新功能
impute.IterativeImputer
新增了skip_compute
标志,默认值为 False,当设置为 True 时,在拟合阶段将跳过对没有缺失值的特征的计算。#13773 由 Sergey Feldman 贡献。效率
impute.MissingIndicator.fit_transform
避免了掩码矩阵的重复计算。#14356 由 Harsh Soni 贡献。修复
impute.IterativeImputer
现在支持仅有一个特征的情况。由 Sergey Feldman 贡献。修复 修复了
impute.IterativeImputer
中的一个错误,该错误导致在使用imputation_order
为"ascending"
或"descending"
时,特征的插补顺序与期望顺序相反。#15393 由 Venkatachalam N 贡献。
sklearn.inspection
#
重要新功能 新增了
inspection.permutation_importance
,用于衡量任意训练模型中每个特征相对于给定评分函数的重要性。#13146 由 Thomas Fan 贡献。新功能
inspection.partial_dependence
和inspection.plot_partial_dependence
现在支持针对ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
的快速“递归”方法。#13769 由 Nicolas Hug 贡献。改进
inspection.plot_partial_dependence
已扩展,现在支持 用户指南 中描述的新可视化 API。#14646 由 Thomas Fan 贡献。改进
inspection.partial_dependence
现在支持 pandas DataFrame 以及包含compose.ColumnTransformer
的pipeline.Pipeline
。此外,当传入 DataFrame 时,inspection.plot_partial_dependence
默认将使用列名。#14028 和 #15429 由 Guillaume Lemaitre 贡献。
sklearn.kernel_approximation
#
修复 修复了一个错误,该错误导致
kernel_approximation.Nystroem
在使用kernel="precomputed"
时引发KeyError
。#14706 由 Venkatachalam N 贡献。
sklearn.linear_model
#
效率 “liblinear”逻辑回归求解器现在速度更快,并且所需内存更少。#14108、#14170、#14296 由 Alex Henrie 贡献。
改进
linear_model.BayesianRidge
现在接受超参数alpha_init
和lambda_init
,可用于设置 fit 中最大化过程的初始值。#13618 由 Yoshihiro Uchida 贡献。修复 当
X
是稀疏的,solver="auto"
且fit_intercept=True
时,linear_model.Ridge
现在能正确拟合截距,因为在此配置下的默认求解器已更改为sparse_cg
,它可以使用稀疏数据拟合截距。#13995 由 Jérôme Dockès 贡献。修复 使用
solver='sag'
的linear_model.Ridge
现在接受 F 序和非连续数组,并进行转换而不是失败。#14458 由 Guillaume Lemaitre 贡献。修复
linear_model.LassoCV
在拟合最终模型时不再强制设置precompute=False
。#14591 由 Andreas Müller 贡献。修复
linear_model.RidgeCV
和linear_model.RidgeClassifierCV
现在在cv=None
时能正确评分。#14864 由 Venkatachalam N 贡献。修复 修复了
linear_model.LogisticRegressionCV
中的一个错误,当penalty='elastic-net'
时,scores_
、n_iter_
和coefs_paths_
属性的顺序会出错。#15044 由 Nicolas Hug 贡献。修复 修复了
linear_model.MultiTaskLassoCV
和linear_model.MultiTaskElasticNetCV
在X
的 dtype 为 int 且fit_intercept=True
时的问题。#15086 由 Alex Gramfort 贡献。修复 liblinear 求解器现在支持
sample_weight
。#15038 由 Guillaume Lemaitre 贡献。
sklearn.manifold
#
新功能
manifold.Isomap
、manifold.TSNE
和manifold.SpectralEmbedding
现在接受预计算的稀疏邻接图作为输入。#10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 贡献。新功能 在
manifold.TSNE
中暴露了n_jobs
参数,用于邻居图的多核计算。当metric="precomputed"
或(metric="euclidean"
且method="exact"
)时,此参数无效。#15082 由 Roman Yurchak 贡献。效率 通过并行计算梯度,提高了
manifold.TSNE
在method="barnes-hut"
模式下的效率。#13213 由 Thomas Moreau 贡献。修复 修复了一个错误,该错误导致
manifold.spectral_embedding
(以及因此受影响的manifold.SpectralEmbedding
和cluster.SpectralClustering
)在n_samples < 5 * n_components
且使用eigen_solver='amg'
时计算出错误的特征值。#14647 由 Andreas Müller 贡献。修复 修复了在
manifold.SpectralEmbedding
和cluster.SpectralClustering
中使用的manifold.spectral_embedding
中的一个错误,该错误导致eigen_solver="amg"
有时会引发 LinAlgError。#13393 由 Andrew Knyazev 贡献,#13707 由 Scott White 贡献。API变更 弃用了
manifold.Isomap
中未使用的training_data_
属性。#10482 由 Tom Dupre la Tour 贡献。
sklearn.metrics
#
重要新功能 新增了
metrics.plot_roc_curve
,用于绘制 ROC 曲线。此函数引入了 用户指南 中描述的可视化 API。#14357 由 Thomas Fan 贡献。新功能 为多个分类指标添加了新参数
zero_division
:metrics.precision_score
、metrics.recall_score
、metrics.f1_score
、metrics.fbeta_score
、metrics.precision_recall_fscore_support
、metrics.classification_report
。这允许为未定义(ill-defined)的指标设置返回值。#14900 由 Marc Torrellas Socastro 贡献。新功能 添加了
metrics.pairwise.nan_euclidean_distances
指标,用于在存在缺失值的情况下计算欧氏距离。#12852 由 Ashim Bhattarai 和 Thomas Fan 贡献。新功能 新增了排名指标
metrics.ndcg_score
和metrics.dcg_score
,用于计算折损累积增益(Discounted Cumulative Gain)和归一化折损累积增益(Normalized Discounted Cumulative Gain)。#9951 由 Jérôme Dockès 贡献。新功能 新增了
metrics.plot_precision_recall_curve
,用于绘制精确率-召回率曲线。#14936 由 Thomas Fan 贡献。新功能 新增了
metrics.plot_confusion_matrix
,用于绘制混淆矩阵。#15083 由 Thomas Fan 贡献。新功能 为
metrics.roc_auc_score
添加了多分类支持,以及相应的评分器'roc_auc_ovr'
、'roc_auc_ovo'
、'roc_auc_ovr_weighted'
和'roc_auc_ovo_weighted'
。#12789 和 #15274 由 Kathy Chen、Mohamed Maskani 和 Thomas Fan 贡献。新功能 新增了
metrics.mean_tweedie_deviance
,用于衡量给定power
参数的 Tweedie 离差。同时新增了平均泊松离差metrics.mean_poisson_deviance
和平均伽马离差metrics.mean_gamma_deviance
,它们分别是power=1
和power=2
时 Tweedie 离差的特例。#13938 由 Christian Lorentzen 和 Roman Yurchak 贡献。效率 提高了
metrics.pairwise.manhattan_distances
在稀疏矩阵情况下的性能。#15049 由Paolo Toccaceli <ptocca>
贡献。改进
metrics.fbeta_score
中的参数beta
已更新,接受零和float('+inf')
值。#13231 由 Dong-hee Na 贡献。改进 在
metrics.mean_squared_error
中添加了参数squared
,用于返回均方根误差。#13467 由 Urvang Patel 贡献。改进 在没有真实阳性(true positives)的情况下,允许计算平均指标。#14595 由 Andreas Müller 贡献。
改进 多标签指标现在支持以列表的列表作为输入。#14865 由 Srivatsan Ramesh、Herilalaina Rakotoarison、Léonard Binet 贡献。
改进
metrics.median_absolute_error
现在支持multioutput
参数。#14732 由 Agamemnon Krasoulis 贡献。改进 “roc_auc_ovr_weighted”和“roc_auc_ovo_weighted”现在可以用作模型选择工具的 scoring 参数。#14417 由 Thomas Fan 贡献。
改进
metrics.confusion_matrix
现在接受一个normalize
参数,允许按列、按行或总体归一化混淆矩阵。#15625 由Guillaume Lemaitre <glemaitre>
贡献。修复 当预计算的距离矩阵包含非零对角线元素时,
metrics.silhouette_score
将引发 ValueError。#12258 由 Stephen Tierney 贡献。API变更 应使用
scoring="neg_brier_score"
,因为scoring="brier_score_loss"
现已弃用。#14898 由 Stefan Matcovici 贡献。
sklearn.model_selection
#
效率 提高了
model_selection.cross_validate
、model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
中多指标评分的性能。#14593 由 Thomas Fan 贡献。改进
model_selection.learning_curve
现在接受参数return_times
,可用于获取计算时间以绘制模型可伸缩性(参见 learning_curve 示例)。#13938 由 Hadrien Reboul 贡献。改进
model_selection.RandomizedSearchCV
现在接受参数分布列表。#14549 由 Andreas Müller 贡献。修复 重新实现了
model_selection.StratifiedKFold
,修复了一个测试集可能比另一个测试集大n_classes
的问题。测试集现在应近似大小相等。#14704 由 Joel Nothman 贡献。修复
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
的cv_results_
属性现在只包含未拟合的估计器。这可能节省大量内存,因为估计器的状态未被存储。#15096 由 Andreas Müller 贡献。API变更
model_selection.KFold
和model_selection.StratifiedKFold
现在在设置了random_state
但shuffle
为 False 时会发出警告。这将在 0.24 版本中引发错误。
sklearn.multioutput
#
修复
multioutput.MultiOutputClassifier
现在拥有属性classes_
。#14629 由 Agamemnon Krasoulis 贡献。修复
multioutput.MultiOutputClassifier
现在将predict_proba
作为属性,并且可以通过hasattr
进行检查。#15488 #15490 由 Rebekah Kim 贡献。
sklearn.naive_bayes
#
重要新功能 新增了
naive_bayes.CategoricalNB
,实现了分类朴素贝叶斯分类器。#12569 由 Tim Bicker 和 Florian Wilhelm 贡献。
sklearn.neighbors
#
重要新功能 新增了
neighbors.KNeighborsTransformer
和neighbors.RadiusNeighborsTransformer
,它们将输入数据集转换为稀疏邻接图。它们对最近邻计算提供了更精细的控制,并支持方便的流水线缓存以供多次使用。#10482 由 Tom Dupre la Tour 贡献。新功能
neighbors.KNeighborsClassifier
、neighbors.KNeighborsRegressor
、neighbors.RadiusNeighborsClassifier
、neighbors.RadiusNeighborsRegressor
和neighbors.LocalOutlierFactor
现在接受预计算的稀疏邻接图作为输入。#10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 贡献。新功能
neighbors.RadiusNeighborsClassifier
现在支持使用predict_proba
进行概率预测,并支持更多 outlier_label 选项:“most_frequent”或针对多输出的不同 outlier_labels。#9597 由 Wenbo Zhao 贡献。效率 提高了
neighbors.RadiusNeighborsClassifier.predict
的效率。#9597 由 Wenbo Zhao 贡献。修复 当
metric='precomputed'
且在非方阵数据上进行拟合时,neighbors.KNeighborsRegressor
现在会抛出错误。#14336 由 Gregory Dexter 贡献。
sklearn.neural_network
#
新功能 在
neural_network.BaseMultilayerPerceptron
、neural_network.MLPRegressor
和neural_network.MLPClassifier
中添加了max_fun
参数,用于控制未能达到tol
改进时的最大函数评估次数。#9274 由 Daniel Perry 贡献。
sklearn.pipeline
#
改进 如果最终估计器支持,
pipeline.Pipeline
现在支持 score_samples。#13806 由 Anaël Beaugnon 贡献。修复
FeatureUnion
中的fit
现在接受fit_params
以传递给底层转换器。#15119 由 Adrin Jalali 贡献。API变更 在
pipeline.FeatureUnion
中,将None
作为转换器已弃用。请改用'drop'
。#15053 由 Thomas Fan 贡献。
sklearn.preprocessing
#
效率 当输入数据是密集时,
preprocessing.PolynomialFeatures
现在速度更快。#13290 由 Xavier Dupré 贡献。改进 在拟合预处理器
preprocessing.StandardScaler
、preprocessing.MinMaxScaler
、preprocessing.MaxAbsScaler
、preprocessing.RobustScaler
和preprocessing.QuantileTransformer
时,避免不必要的数据复制,从而略微提高了性能。#13987 由 Roman Yurchak 贡献。修复 当在非方阵数据上拟合时,
preprocessing.KernelCenterer
现在会抛出错误。#14336 由 Gregory Dexter 贡献。
sklearn.model_selection
#
修复
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
现在支持_pairwise
属性,这可以防止在交叉验证过程中,对于具有成对输入的估计器(例如当 metric 设置为“precomputed”时的neighbors.KNeighborsClassifier
)出现错误。#13925 由 Isaac S. Robson 和 #15524 由 Xun Tang 贡献。
sklearn.svm
#
改进
svm.SVC
和svm.NuSVC
现在接受break_ties
参数。如果decision_function_shape='ovr'
且目标类别数 > 2,此参数会导致 predict 根据 decision_function 的置信度值来打破平局。#12557 由 Adrin Jalali 贡献。改进 当
kernel='precomputed'
且在非方阵数据上拟合时,SVM 估计器现在会抛出更具体的错误。#14336 由 Gregory Dexter 贡献。修复 当
svm.SVC
、svm.SVR
、svm.NuSVR
和svm.OneClassSVM
在fit()
方法中接收到sample_weight
参数的负值或零值时,会生成一个无效模型。这种行为仅在某些边界情况下发生。现在,在这些情况下,fit()
将会抛出异常而失败。#14286 由 Alex Shacked 贡献。修复
svm.SVR
和svm.OneClassSVM
的n_support_
属性以前未初始化,且大小为 2。现在它的大小为 1,并带有正确的值。#15099 由 Nicolas Hug 贡献。修复 修复了
BaseLibSVM._sparse_fit
中的一个错误,该错误在n_SV=0
时会引发 ZeroDivisionError。#14894 由 Danna Naser 贡献。修复 liblinear 求解器现在支持
sample_weight
。#15038 由 Guillaume Lemaitre 贡献。
sklearn.tree
#
新功能 为
tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
、tree.ExtraTreeRegressor
、ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
、ensemble.ExtraTreesRegressor
、ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
添加了由ccp_alpha
控制的最小成本复杂度剪枝功能。#12887 由 Thomas Fan 贡献。API变更
presort
在tree.DecisionTreeClassifier
和tree.DecisionTreeRegressor
中已弃用,该参数现在无效。#14907 由 Adrin Jalali 贡献。API变更
tree.DecisionTreeRegressor
的classes_
和n_classes_
属性现已弃用。#15028 由 Mei Guan、Nicolas Hug 和 Adrin Jalali 贡献。
sklearn.utils
#
新功能
check_estimator
现在可以通过设置generate_only=True
来生成检查。此前,运行check_estimator
会在第一个检查失败时停止。设置generate_only=True
后,所有检查都可以独立运行,并报告失败的检查。更多信息请参阅 Rolling your own estimator。#14381 由 Thomas Fan 贡献。新功能 添加了一个 pytest 特定装饰器
parametrize_with_checks
,用于对估计器列表进行参数化估计器检查。#14381 由 Thomas Fan 贡献。新功能 一个新的随机变量
utils.fixes.loguniform
实现了对数均匀随机变量(例如,用于 RandomizedSearchCV)。例如,对于loguniform(1, 100)
,结果1
、10
和100
的可能性均相等。参见 #11232 由 Scott Sievert 和 Nathaniel Saul 贡献,以及 SciPy PR 10815。改进
utils.safe_indexing
(现已弃用)接受一个axis
参数,用于在行和列上对类数组对象进行索引。列索引可以在 NumPy 数组、SciPy 稀疏矩阵和 Pandas DataFrame 上执行。还进行了额外的重构。#14035 和 #14475 由 Guillaume Lemaitre 贡献。改进
utils.extmath.safe_sparse_dot
现在支持 3D+ ndarray 和稀疏矩阵之间的操作。#14538 由 Jérémie du Boisberranger 贡献。修复
utils.check_array
现在会引发错误,而不是将 NaN 转换为整数。#14872 由 Roman Yurchak 贡献。修复
utils.check_array
现在将正确检测 pandas DataFrames 中的数值 dtype,修复了float32
不必要地向上转换为float64
的错误。#15094 由 Andreas Müller 贡献。API变更 以下实用工具已弃用,并且现在为私有:
choose_check_classifiers_labels
enforce_estimator_tags_y
mocking.MockDataFrame
mocking.CheckingClassifier
optimize.newton_cg
random.random_choice_csc
utils.choose_check_classifiers_labels
utils.enforce_estimator_tags_y
utils.optimize.newton_cg
utils.random.random_choice_csc
utils.safe_indexing
utils.mocking
utils.fast_dict
utils.seq_dataset
utils.weight_vector
utils.fixes.parallel_helper
(已移除)除了现在位于
utils
中的all_estimators
外,utils.testing
的所有内容。
sklearn.isotonic
#
修复 修复了一个错误,该错误导致
isotonic.IsotonicRegression.fit
在X.dtype == 'float32'
且X.dtype != y.dtype
时引发错误的 bug。#14902 由 Lucas 贡献。
杂项#
修复 从 SciPy 移植了
lobpcg
,它实现了一些错误修复,但仅在 1.3+ 版本中可用。#13609 和 #14971 由 Guillaume Lemaitre 贡献。API变更 Scikit-learn 现在将任何实现鸭子数组(duck array)的输入数据结构转换为 NumPy 数组(使用
__array__
),以确保行为一致性,而不是依赖于__array_function__
(参见 NEP 18)。#14702 由 Andreas Müller 贡献。API 变更 将手动检查替换为
check_is_fitted
。现在,使用未拟合的估计器时抛出的错误更加统一。#13013 由 Agamemnon Krasoulis 贡献。
估计器检查的变更#
这些变更主要影响库开发人员。
现在,如果
predict
或transform
在fit
之前被调用,估计器应抛出NotFittedError
;以前AttributeError
或ValueError
也是可接受的。#13013 由 Agamemnon Krasoulis 贡献。估计器检查现在支持仅限二分类的分类器。这类分类器需要带有
binary_only=True
估计器标签。#13875 由 Trevor Stephens 贡献。估计器应将输入数据(
X
、y
、sample_weights
)转换为numpy.ndarray
,并且永远不要在传入的原始数据类型上调用__array_function__
(参见 NEP 18)。#14702 由 Andreas Müller 贡献。requires_positive_X
估计器标签(用于要求 X 为非负值的模型)现在被utils.estimator_checks.check_estimator
使用,以确保如果 X 包含负值,则抛出适当的错误消息。#14680 由 Alex Gramfort 贡献。增加了对成对估计器的检查,确保它们在非方数据上抛出错误。#14336 由 Gregory Dexter 贡献。
增加了两个常见的多输出估计器测试:
utils.estimator_checks.check_classifier_multioutput
和utils.estimator_checks.check_regressor_multioutput
。#13392 由 Rok Mihevc 贡献。修复 在缺失的地方增加了
check_transformer_data_not_an_array
检查。修复 估计器标签的解析现在遵循常规的 MRO(方法解析顺序)。它们以前只能被覆盖一次。#14884 由 Andreas Müller 贡献。
代码和文档贡献者
感谢自 0.21 版本以来为项目的维护和改进做出贡献的所有人,包括
Aaron Alphonsus, Abbie Popa, Abdur-Rahmaan Janhangeer, abenbihi, Abhinav Sagar, Abhishek Jana, Abraham K. Lagat, Adam J. Stewart, Aditya Vyas, Adrin Jalali, Agamemnon Krasoulis, Alec Peters, Alessandro Surace, Alexandre de Siqueira, Alexandre Gramfort, alexgoryainov, Alex Henrie, Alex Itkes, alexshacked, Allen Akinkunle, Anaël Beaugnon, Anders Kaseorg, Andrea Maldonado, Andrea Navarrete, Andreas Mueller, Andreas Schuderer, Andrew Nystrom, Angela Ambroz, Anisha Keshavan, Ankit Jha, Antonio Gutierrez, Anuja Kelkar, Archana Alva, arnaudstiegler, arpanchowdhry, ashimb9, Ayomide Bamidele, Baran Buluttekin, barrycg, Bharat Raghunathan, Bill Mill, Biswadip Mandal, blackd0t, Brian G. Barkley, Brian Wignall, Bryan Yang, c56pony, camilaagw, cartman_nabana, catajara, Cat Chenal, Cathy, cgsavard, Charles Vesteghem, Chiara Marmo, Chris Gregory, Christian Lorentzen, Christos Aridas, Dakota Grusak, Daniel Grady, Daniel Perry, Danna Naser, DatenBergwerk, David Dormagen, deeplook, Dillon Niederhut, Dong-hee Na, Dougal J. Sutherland, DrGFreeman, Dylan Cashman, edvardlindelof, Eric Larson, Eric Ndirangu, Eunseop Jeong, Fanny, federicopisanu, Felix Divo, flaviomorelli, FranciDona, Franco M. Luque, Frank Hoang, Frederic Haase, g0g0gadget, Gabriel Altay, Gabriel do Vale Rios, Gael Varoquaux, ganevgv, gdex1, getgaurav2, Gideon Sonoiya, Gordon Chen, gpapadok, Greg Mogavero, Grzegorz Szpak, Guillaume Lemaitre, Guillem García Subies, H4dr1en, hadshirt, Hailey Nguyen, Hanmin Qin, Hannah Bruce Macdonald, Harsh Mahajan, Harsh Soni, Honglu Zhang, Hossein Pourbozorg, Ian Sanders, Ingrid Spielman, J-A16, jaehong park, Jaime Ferrando Huertas, James Hill, James Myatt, Jay, jeremiedbb, Jérémie du Boisberranger, jeromedockes, Jesper Dramsch, Joan Massich, Joanna Zhang, Joel Nothman, Johann Faouzi, Jonathan Rahn, Jon Cusick, Jose Ortiz, Kanika Sabharwal, Katarina Slama, kellycarmody, Kennedy Kang’ethe, Kensuke Arai, Kesshi Jordan, Kevad, Kevin Loftis, Kevin Winata, Kevin Yu-Sheng Li, Kirill Dolmatov, Kirthi Shankar Sivamani, krishna katyal, Lakshmi Krishnan, Lakshya KD, LalliAcqua, lbfin, Leland McInnes, Léonard Binet, Loic Esteve, loopyme, lostcoaster, Louis Huynh, lrjball, Luca Ionescu, Lutz Roeder, MaggieChege, Maithreyi Venkatesh, Maltimore, Maocx, Marc Torrellas, Marie Douriez, Markus, Markus Frey, Martina G. Vilas, Martin Oywa, Martin Thoma, Masashi SHIBATA, Maxwell Aladago, mbillingr, m-clare, Meghann Agarwal, m.fab, Micah Smith, miguelbarao, Miguel Cabrera, Mina Naghshhnejad, Ming Li, motmoti, mschaffenroth, mthorrell, Natasha Borders, nezar-a, Nicolas Hug, Nidhin Pattaniyil, Nikita Titov, Nishan Singh Mann, Nitya Mandyam, norvan, notmatthancock, novaya, nxorable, Oleg Stikhin, Oleksandr Pavlyk, Olivier Grisel, Omar Saleem, Owen Flanagan, panpiort8, Paolo, Paolo Toccaceli, Paresh Mathur, Paula, Peng Yu, Peter Marko, pierretallotte, poorna-kumar, pspachtholz, qdeffense, Rajat Garg, Raphaël Bournhonesque, Ray, Ray Bell, Rebekah Kim, Reza Gharibi, Richard Payne, Richard W, rlms, Robert Juergens, Rok Mihevc, Roman Feldbauer, Roman Yurchak, R Sanjabi, RuchitaGarde, Ruth Waithera, Sackey, Sam Dixon, Samesh Lakhotia, Samuel Taylor, Sarra Habchi, Scott Gigante, Scott Sievert, Scott White, Sebastian Pölsterl, Sergey Feldman, SeWook Oh, she-dares, Shreya V, Shubham Mehta, Shuzhe Xiao, SimonCW, smarie, smujjiga, Sönke Behrends, Soumirai, Sourav Singh, stefan-matcovici, steinfurt, Stéphane Couvreur, Stephan Tulkens, Stephen Cowley, Stephen Tierney, SylvainLan, th0rwas, theoptips, theotheo, Thierno Ibrahima DIOP, Thomas Edwards, Thomas J Fan, Thomas Moreau, Thomas Schmitt, Tilen Kusterle, Tim Bicker, Timsaur, Tim Staley, Tirth Patel, Tola A, Tom Augspurger, Tom Dupré la Tour, topisan, Trevor Stephens, ttang131, Urvang Patel, Vathsala Achar, veerlosar, Venkatachalam N, Victor Luzgin, Vincent Jeanselme, Vincent Lostanlen, Vladimir Korolev, vnherdeiro, Wenbo Zhao, Wendy Hu, willdarnell, William de Vazelhes, wolframalpha, xavier dupré, xcjason, x-martian, xsat, xun-tang, Yinglr, yokasre, Yu-Hang “Maxin” Tang, Yulia Zamriy, Zhao Feng