版本 0.22#
有关此版本主要亮点的简短说明,请参阅 scikit-learn 0.22 版本亮点。
变更日志图例
主要功能 你以前无法实现的重要功能。
功能 你以前无法实现的功能。
效率提升 现有功能现在可能不需要那么多的计算或内存。
增强 其他一些小的改进。
修复 以前未按文档说明(或根据合理预期)工作的内容现在应该可以工作了。
API 变更 你需要更改代码才能在将来获得相同的效果;或者某个功能将在将来被移除。
版本 0.22.2.post1#
2020年3月3日
0.22.2.post1 版本包含源代码分发的打包修复,但软件包的内容与 0.22.2 版本(无 .post1 后缀)的轮子内容相同。两者都包含以下更改。
变更日志#
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
#
修复 使用
algorithm="elkan"
的cluster.KMeans
现在使用与默认algorithm="full"
相同的停止条件。 #15930 由 @inder128 提供。
sklearn.inspection
#
已修复 当为
n_jobs=1
或n_jobs>1
同时提供random_state
时,inspection.permutation_importance
将返回相同的importances
,无论使用共享内存后端(线程安全)还是隔离内存、基于进程的后端。此外,避免将数据强制转换为 object 数据类型,并避免在使用n_jobs>1
的大型 DataFrame 上出现只读错误(如 #15810 中所述)。这是 #15898 (由 Shivam Gargsya 完成) 的后续工作。 #15933 由 Guillaume Lemaitre 和 Olivier Grisel 完成。已修复
inspection.plot_partial_dependence
和inspection.PartialDependenceDisplay.plot
现在一致地检查传递的轴数量。 #15760 由 Thomas Fan 完成。
sklearn.metrics
#
已修复 当
normalize
无效时,metrics.plot_confusion_matrix
现在会引发错误。之前,它在没有归一化的情况下运行良好。 #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
在给定sample_weight
参数为list
类型时(在包装的估计器不支持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
现在接受 max_iter,默认值为 300,而不是始终使用默认值 300。它现在还公开了n_iter_
,表示对每个种子执行的最大迭代次数。 #15120 由 Adrin Jalali 完成。修复 如果
affinity='cosine'
且X
包含全零样本,cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
现在会引发错误。 #7943 by @mthorrell.
sklearn.compose
#
新增功能 新增了
compose.make_column_selector
,它与compose.ColumnTransformer
一起使用,可以根据名称和数据类型选择 DataFrame 列。 #12303 by Thomas Fan.修复 修复了
compose.ColumnTransformer
中的一个错误,该错误在使用布尔列表且 NumPy 版本低于 1.12 时未能选择正确的列。 #14510 by Guillaume Lemaitre.修复 修复了
compose.TransformedTargetRegressor
中的一个错误,该错误没有将**fit_params
传递给底层的回归器。 #14890 by Miguel Cabrera.修复
compose.ColumnTransformer
现在要求fit
和transform
之间的特征数量一致。现在会发出FutureWarning
警告,这将在 0.24 版本中引发错误。如果特征数量不一致且使用了负索引,则会引发错误。 #14544 by Adrin Jalali.
sklearn.cross_decomposition
#
新增功能
cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
有一个新的函数inverse_transform
用于将数据转换回原始空间。 #15304 by Jaime Ferrando Huertas.改进
decomposition.KernelPCA
现在会正确检查求解器找到的特征值是否存在数值或条件问题。这确保了跨求解器(eigen_solver
的不同选择)的结果一致性,包括近似求解器,例如'randomized'
和'lobpcg'
(参见 #12068)。 #12145 by Sylvain Marié修复 修复了一个错误,该错误导致
cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
在使用目标矩阵Y
(其中第一列为常数)拟合时引发错误。 #13609 by Camila Williamson.修复
cross_decomposition.CCA
现在使用 scipy 1.3 和之前的 scipy 版本会产生相同的结果。 #15661 by Thomas Fan.
sklearn.datasets
#
新增功能
datasets.fetch_openml
现在通过设置as_frame=True
支持使用 pandas 处理异构数据。 #13902 by Thomas Fan.新增功能
datasets.fetch_openml
现在在返回的 Bunch 中包含target_names
。 #15160 by 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
#
效率提升 使用
solver="mu"
的decomposition.NMF
现在对稀疏输入矩阵使用批量处理,以避免短暂分配大小为(非零元素数,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
现在将max_iter
传递给底层的linear_model.LassoLars
(当algorithm='lasso_lars'
时)。 #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变更
outputs_2d_
属性在dummy.DummyClassifier
和dummy.DummyRegressor
中已弃用。它等效于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
参数,允许进行 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
参数允许将 bootstrap 样本的大小限制为小于数据集的大小。已添加到ensemble.RandomForestClassifier
,ensemble.RandomForestRegressor
,ensemble.ExtraTreesClassifier
,ensemble.ExtraTreesRegressor
。 #14682 由 Matt Hancock 贡献,以及 #5963 由 Pablo Duboue 贡献。修复 当
voting='hard'
时,ensemble.VotingClassifier.predict_proba
将不再存在。 #14287 由 Thomas Fan 贡献。修复
ensemble.VotingClassifier
和ensemble.VotingRegressor
中的named_estimators_
属性现在可以正确映射到已删除的估计器。以前,当其中一个估计器被删除时,named_estimators_
的映射是不正确的。 #15375 由 Thomas Fan 完成。修复 默认情况下运行
utils.estimator_checks.check_estimator
用于ensemble.VotingClassifier
和ensemble.VotingRegressor
。这有助于解决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变更
ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中的presort
现已弃用,并且该参数无效。建议用户改用ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
。 #14907 由 Adrin Jalali 完成。
sklearn.feature_extraction
#
增强 如果参数选择意味着另一个参数将在为
feature_extraction.text.HashingVectorizer
、feature_extraction.text.CountVectorizer
和feature_extraction.text.TfidfVectorizer
调用 fit() 方法时未使用,则现在会发出警告。 #14602 由 Gaurav Chawla 完成。修复 由
feature_extraction.text.VectorizerMixin
的build_preprocessor
和build_analyzer
创建的函数现在可以被pickle序列化。 #14430 由 Dillon Niederhut 完成。修复
feature_extraction.text.strip_accents_unicode
现在可以正确地去除以NFKD规范形式表示的字符串中的变音符号。#15100 由 Daniel Grady 完成。修复 修复了一个错误,该错误导致
feature_extraction.DictVectorizer
在处理大型输入数据时生成scipy.sparse
矩阵的transform
操作期间引发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
时,由于数值不稳定性而无法去除恒定特征,通过在这种情况下使用范围而不是方差来解决。#13704 由 Roddy MacSween 完成。
sklearn.gaussian_process
#
功能 结构化数据的 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 完成。修复
linear_model.Ridge
使用solver='sag'
时,现在接受 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
中的一个错误,其中scores_
、n_iter_
和coefs_paths_
属性在penalty='elastic-net'
时顺序错误。 #15044 由 Nicolas Hug 完成。修复 修复了
linear_model.MultiTaskLassoCV
和linear_model.MultiTaskElasticNetCV
在 X 的数据类型为整数且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 完成。效率 当
method="barnes-hut"
时,提高了manifold.TSNE
的效率,通过并行计算梯度。 #13213 由 Thomas Moreau 完成。修复 修复了
manifold.spectral_embedding
(以及manifold.SpectralEmbedding
和cluster.SpectralClustering
)在eigen_solver='amg'
且n_samples < 5 * n_components
时计算错误特征值的一个错误。 #14647 由 Andreas Müller 完成。修复 修复了
manifold.spectral_embedding
(用于manifold.SpectralEmbedding
和cluster.SpectralClustering
)中一个错误,其中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
。这允许设置未定义指标的返回值。#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
,使其可以接受 0 和float('+inf')
值。#13231 由 Dong-hee Na 贡献。增强 在
metrics.mean_squared_error
中添加了参数squared
用于返回均方根误差。#13467 由 Urvang Patel 贡献。增强 允许在没有真正正例的情况下计算平均指标。 #14595 by Andreas Müller.
增强 多标签指标现在支持列表的列表作为输入。 #14865 Srivatsan Ramesh, Herilalaina Rakotoarison, Léonard Binet.
增强
metrics.median_absolute_error
现在支持multioutput
参数。 #14732 by Agamemnon Krasoulis.增强 ‘roc_auc_ovr_weighted’ 和 ‘roc_auc_ovo_weighted’ 现在可以作为模型选择工具的 评分 参数使用。 #14417 by Thomas Fan.
增强
metrics.confusion_matrix
接受参数normalize
,允许按列、行或整体对混淆矩阵进行归一化。 #15625 byGuillaume Lemaitre <glemaitre>
。修复 在
metrics.silhouette_score
中,当预计算的距离矩阵包含非零对角线条目时,引发 ValueError。 #12258 by Stephen Tierney.API变更 应使用
scoring="neg_brier_score"
代替scoring="brier_score_loss"
,后者现已弃用。 #14898 by Stefan Matcovici.
sklearn.model_selection
#
效率提升 提高了
model_selection.cross_validate
、model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
中多指标评分的性能。 #14593 by Thomas Fan.增强
model_selection.learning_curve
现在接受参数return_times
,可用于检索计算时间,以便绘制模型可扩展性(参见 learning_curve 示例)。 #13938 by Hadrien Reboul.增强
model_selection.RandomizedSearchCV
现在接受参数分布列表。 #14549 by Andreas Müller.修复 重新实现了
model_selection.StratifiedKFold
以修复一个问题,其中一个测试集可能比另一个测试集大n_classes
。测试集现在应该大小大致相等。 #14704 by Joel Nothman.修复
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
的cv_results_
属性现在只包含未拟合的估计器。这可能会节省大量内存,因为不会存储估计器的状态。 ##15096 by Andreas Müller.API变更 如果设置了
random_state
但shuffle
为 False,则model_selection.KFold
和model_selection.StratifiedKFold
现在会发出警告。这将在 0.24 版中引发错误。
sklearn.multioutput
#
修复
multioutput.MultiOutputClassifier
现在具有属性classes_
。 #14629 by Agamemnon Krasoulis.修复
multioutput.MultiOutputClassifier
现在具有predict_proba
属性,并且可以使用hasattr
进行检查。 #15488 #15490 by Rebekah Kim
sklearn.naive_bayes
#
主要功能 新增了
naive_bayes.CategoricalNB
,它实现了分类 Naive Bayes 分类器。 #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
时,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 完成。修复 当在 fit() 方法中为参数
sample_weight
传入负值或零值时,svm.SVC
,svm.SVR
,svm.NuSVR
和svm.OneClassSVM
会生成无效的模型。此行为仅在某些边界情况下发生。现在,在这些情况下,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 变更
tree.DecisionTreeClassifier
和tree.DecisionTreeRegressor
中的presort
现已弃用,此参数无效。#14907 由 Adrin Jalali 完成。API 变更
tree.DecisionTreeRegressor
的classes_
和n_classes_
属性现已弃用。#15028 由 Mei Guan、Nicolas Hug 和 Adrin Jalali 完成。
sklearn.utils
#
功能 通过设置
generate_only=True
,check_estimator
现在可以生成检查。以前,运行check_estimator
会在第一次检查失败时停止。使用generate_only=True
,所有检查都可以独立运行并报告失败的检查。更多信息请参见 创建您自己的估计器。#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 <https://github.com/scipy/scipy/pull/10815>
。增强
utils.safe_indexing
(现已弃用)接受一个axis
参数,用于跨行和列索引类似数组的对象。列索引可以在NumPy数组、SciPy稀疏矩阵和Pandas DataFrame上进行。还进行了一些额外的重构。 #14035 和 #14475 by Guillaume Lemaitre。增强
utils.extmath.safe_sparse_dot
可在3D+ ndarray和稀疏矩阵之间工作。 #14538 by Jérémie du Boisberranger。修复
utils.check_array
现在会抛出错误而不是将NaN转换为整数。 #14872 by Roman Yurchak。修复
utils.check_array
现在可以正确检测pandas DataFrame中的数值数据类型,修复了float32
被不必要地向上转换为float64
的错误。 #15094 by Andreas Müller。API变更 以下utils已被弃用,现在为私有
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.testing
中的内容,除了all_estimators
(现在位于utils
中)。
sklearn.isotonic
#
修复 修复了当
isotonic.IsotonicRegression.fit
中X.dtype == 'float32'
且X.dtype != y.dtype
时抛出错误的bug。 #14902 by Lucas。
其他#
修复 从SciPy移植
lobpcg
,其中包含一些bug修复,但仅在1.3+版本中可用。 #13609 和 #14971 by Guillaume Lemaitre。API变更 Scikit-learn现在将任何实现鸭子类型数组的输入数据结构转换为NumPy数组(使用
__array__
),以确保一致的行为,而不是依赖于__array_function__
(参见 NEP 18)。 #14702 by Andreas Müller。API变更 使用
check_is_fitted
替换手动检查。使用未拟合的估计器时抛出的错误现在更加统一。 #13013 by Agamemnon Krasoulis。
估计器检查的更改#
这些更改主要影响库开发者。
现在,如果在
fit
之前调用predict
或transform
,则估计器应抛出NotFittedError
;以前,AttributeError
或ValueError
是可以接受的。 #13013 by Agamemnon Krasoulis。估计器检查现在支持二元分类器。此类分类器需要具有
binary_only=True
估计器标签。 #13875 by Trevor Stephens。估计器应将输入数据(
X
,y
,sample_weights
)转换为numpy.ndarray
,并且永远不要在传递的原始数据类型上调用__array_function__
(参见 NEP 18)。 #14702 by Andreas Müller。requires_positive_X
估计器标签(对于需要X为非负的模型)现在被utils.estimator_checks.check_estimator
使用,以确保如果X包含一些负值条目则会引发正确的错误消息。 #14680 by Alex Gramfort。添加了对成对估计器在非方阵数据上引发错误的检查 #14336 by 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 Cash, 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