版本 0.21#
更新日志图例
主要功能 之前无法实现的重大功能。
功能 之前无法实现的功能。
效率 现有功能现在可能不需要那么多的计算或内存。
改进 一些杂项的微小改进。
修复 之前未按文档工作或未符合合理预期的问题现已修复。
API 变更 未来你需要更改代码才能达到相同的效果;或者某个功能将在未来被移除。
版本 0.21.3#
2019年7月30日
更改的模型#
以下估计器和函数在用相同数据和参数进行拟合时,可能会产生与之前版本不同的模型。这通常是由于建模逻辑的更改(错误修复或增强)或随机抽样过程的更改而引起的。
v0.20.0 版本说明未能提及
metrics.make_scorer
在needs_proba=True
且y_true
为二元时存在的向后不兼容性。现在,评分器函数应该接受一个 1D 的y_pred
(即正类的概率,形状为(n_samples,)
),而不是 2D 的y_pred
(即形状为(n_samples, 2)
)。
更新日志#
sklearn.cluster
#
修复 修复了
cluster.KMeans
中的一个错误,该错误导致在使用init='random'
进行计算时,当n_jobs > 1
或n_jobs = -1
时,计算是单线程的。#12955 由 Prabakaran Kumaresshan 提交。修复 修复了
cluster.OPTICS
中的一个错误,该错误导致用户无法传递浮点型min_samples
和min_cluster_size
。#14496 由 Fabian Klopfer 和 Hanmin Qin 提交。修复 修复了
cluster.KMeans
中的一个错误,该错误导致 KMeans++ 初始化偶尔会引发 IndexError。#11756 由 Joel Nothman 提交。
sklearn.compose
#
修复 修复了
compose.ColumnTransformer
中的一个问题,该问题导致在使用fit
和transform
之间列顺序不同的 DataFrames 时,可能会悄无声息地将错误的列传递给remainder
转换器。#14237 由Andreas Schuderer <schuderer>
提交。
sklearn.datasets
#
修复
datasets.fetch_california_housing
、datasets.fetch_covtype
、datasets.fetch_kddcup99
、datasets.fetch_olivetti_faces
、datasets.fetch_rcv1
和datasets.fetch_species_distributions
在缓存数据是使用已弃用的sklearn.externals.joblib
存储时,会尝试使用新的joblib
持久化先前的缓存。此行为将在 v0.23 中弃用并移除。#14197 由 Adrin Jalali 提交。
sklearn.ensemble
#
修复 修复了
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
中的零除错误。#14024 由Nicolas Hug <NicolasHug>
提交。
sklearn.impute
#
修复 修复了
impute.SimpleImputer
和impute.IterativeImputer
中的一个错误,以便在训练数据中存在缺失值时不会抛出错误。#13974 由Frank Hoang <fhoang7>
提交。
sklearn.inspection
#
修复 修复了
inspection.plot_partial_dependence
中的一个错误,该错误导致在多分类问题中未考虑target
参数。#14393 由 Guillem G. Subies 提交。
sklearn.linear_model
#
修复 修复了
linear_model.LogisticRegressionCV
中的一个错误,该错误导致refit=False
会根据'multiclass'
和'penalty'
参数而失败(0.21 版本引入的回归)。#14087 由 Nicolas Hug 提交。修复 针对
linear_model.ARDRegression
和 Scipy>=1.3.0 的兼容性修复。适应了上游对默认pinvh
截止阈值的更改,否则在某些情况下会导致精度不佳。#14067 由 Tim Staley 提交。
sklearn.neighbors
#
修复 修复了
neighbors.NeighborhoodComponentsAnalysis
中的一个错误,该错误导致对初始参数n_components
、max_iter
和tol
的验证要求过于严格的类型。#14092 由 Jérémie du Boisberranger 提交。
sklearn.tree
#
修复 修复了
tree.export_text
中的一个错误,该错误发生在树只有一个特征且传入单个特征名称时。#14053 由Thomas Fan
提交。修复 修复了
tree.plot_tree
的一个问题,该问题导致即使对于 DecisionTreeClassifiers 中的gini
标准,它也显示熵计算。#13947 由 Frank Hoang 提交。
版本 0.21.2#
2019年5月24日
更新日志#
sklearn.decomposition
#
修复 修复了
cross_decomposition.CCA
中的一个错误,该错误在Y
接近零时提高了数值稳定性。#13903 由 Thomas Fan 提交。
sklearn.metrics
#
修复 修复了
metrics.pairwise.euclidean_distances
中的一个错误,该错误导致对于足够大的 float32 数据集,距离矩阵的一部分未被实例化(0.21 版本引入的回归)。#13910 由 Jérémie du Boisberranger 提交。
sklearn.preprocessing
#
修复 修复了
preprocessing.OneHotEncoder
中的一个错误,该错误导致新的drop
参数未在get_feature_names
中体现。#13894 由 James Myatt 提交。
sklearn.utils.sparsefuncs
#
修复 修复了一个错误,该错误导致
min_max_axis
在 32 位系统上对于某些大型输入会失败。这会影响preprocessing.MaxAbsScaler
、preprocessing.normalize
和preprocessing.LabelBinarizer
。#13741 由 Roddy MacSween 提交。
版本 0.21.1#
2019年5月17日
这是一个错误修复版本,主要解决了 0.21.0 版本中的一些打包问题。它还包括一些次要的文档改进和错误修复。
更新日志#
sklearn.inspection
#
修复 修复了
inspection.partial_dependence
中的一个错误,使其仅在多分类多输出情况下检查分类器而不是回归器。#14309 由 Guillaume Lemaitre 提交。
sklearn.metrics
#
修复 修复了
metrics.pairwise_distances
中的一个错误,该错误导致当X
具有布尔 dtype 且Y == None
时,布尔度量会引发AttributeError
。#13864 由 Paresh Mathur 提交。修复 修复了
metrics.pairwise_distances
在n_jobs > 1
时的两个错误。首先,它以前会返回与输入具有相同 dtype 的距离矩阵,即使对于整数 dtype 也是如此。其次,当Y
是X
时,欧几里得度量的对角线不为零。#13877 由 Jérémie du Boisberranger 提交。
sklearn.neighbors
#
修复 修复了
neighbors.KernelDensity
中的一个错误,该错误导致在使用sample_weight
后无法从 pickle 恢复。#13772 由 Aditya Vyas 提交。
版本 0.21.0#
2019年5月
更改的模型#
以下估计器和函数在用相同数据和参数进行拟合时,可能会产生与之前版本不同的模型。这通常是由于建模逻辑的更改(错误修复或增强)或随机抽样过程的更改而引起的。
使用 ‘eigen’ 求解器的
discriminant_analysis.LinearDiscriminantAnalysis
。修复当
max_depth
和max_leaf_nodes
都已设置时的决策树和派生集成模型。修复使用 ‘saga’ 求解器的
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
。修复sklearn.feature_extraction.text.HashingVectorizer
、sklearn.feature_extraction.text.TfidfVectorizer
和sklearn.feature_extraction.text.CountVectorizer
修复svm.SVC.decision_function
和multiclass.OneVsOneClassifier.decision_function
。修复linear_model.SGDClassifier
和任何派生分类器。修复任何使用
linear_model._sag.sag_solver
函数且种子为0
的模型,包括linear_model.LogisticRegression
、linear_model.LogisticRegressionCV
、linear_model.Ridge
和 使用 ‘sag’ 求解器的linear_model.RidgeCV
。修复当使用稀疏输入进行留一法交叉验证时的
linear_model.RidgeCV
。修复
详细信息列在下面的更新日志中。
(尽管我们正在努力通过提供此信息来更好地告知用户,但我们无法保证此列表是完整的。)
已知主要错误#
更新日志#
已正式停止支持 Python 3.4 及更低版本。
sklearn.base
#
API 变更 从 0.23 版本开始,在回归器上调用
score
时使用的 R2 分数将采用multioutput='uniform_average'
,以与metrics.r2_score
保持一致。这将影响所有多输出回归器(multioutput.MultiOutputRegressor
除外)的score
方法。#13157 由 Hanmin Qin 提交。
sklearn.calibration
#
改进 增加了对
calibration.calibration_curve
输入数据按分位数而非在 0 和 1 之间均匀分箱的支持。#13086 由 Scott Cole 提交。改进 允许将 n 维数组作为
calibration.CalibratedClassifierCV
的输入。#13485 由 William de Vazelhes 提交。
sklearn.cluster
#
主要特性 一种新的聚类算法:
cluster.OPTICS
,这是一种与cluster.DBSCAN
相关的算法,其超参数更易于设置且扩展性更好,由 Shane、Adrin Jalali、Erich Schubert、Hanmin Qin 和 Assia Benbihi 提交。修复 修复了
cluster.Birch
有时会引发 AttributeError 的错误。#13651 由 Joel Nothman 提交。修复 修复了
cluster.KMeans
在使用样本权重时空聚类未正确重新定位的错误。#13486 由 Jérémie du Boisberranger 提交。API 变更
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
中的n_components_
属性已更名为n_connected_components_
。#13427 由 Stephane Couvreur 提交。改进
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
现在接受distance_threshold
参数,该参数可用于查找聚类而不是n_clusters
。#9069 由 Vathsala Achar 和 Adrin Jalali 提交。
sklearn.compose
#
API 变更
compose.ColumnTransformer
不再是实验性功能。#13835 由 Hanmin Qin 提交。
sklearn.datasets
#
修复 在 SVMLight 文件中增加了对 64 位组 ID 和指针的支持。#10727 由 Bryan K Woods 提交。
修复
datasets.load_sample_images
现在返回具有确定性顺序的图像。#13250 由 Thomas Fan 提交。
sklearn.decomposition
#
改进
decomposition.KernelPCA
现在具有确定性输出(解决了核矩阵特征值分解中的符号模糊性)。#13241 由 Aurélien Bellet 提交。修复 修复了
decomposition.KernelPCA
中的一个错误:在未去除零特征值 (remove_zero_eig=False
) 的情况下,fit().transform()
现在可以生成正确的输出(与fit_transform()
相同)。fit_inverse_transform
也通过使用与fit_transform
相同的技巧来计算X
的变换,从而得到了加速。#12143 由 Sylvain Marié 提交。修复 修复了
decomposition.NMF
中的一个错误,该错误导致当n_components < n_features
而不是n_components <= min(n_samples, n_features)
时,允许使用init = 'nndsvd'
、init = 'nndsvda'
和init = 'nndsvdar'
。#11650 由 Hossein Pourbozorg 和 Zijie (ZJ) Poh 提交。API 变更
decomposition.non_negative_factorization
中init
参数的默认值将在 0.23 版本中从random
更改为None
,以使其与decomposition.NMF
保持一致。当使用默认值时,将引发 FutureWarning。#12988 由 Zijie (ZJ) Poh 提交。
sklearn.discriminant_analysis
#
改进
discriminant_analysis.LinearDiscriminantAnalysis
现在保留float32
和float64
数据类型。#8769 和 #11000 由 Thibault Sejourne 提交。修复 当
discriminant_analysis.LinearDiscriminantAnalysis
被赋予参数n_components > min(n_features, n_classes - 1)
时,现在会引发ChangedBehaviourWarning
,并且如果满足条件,n_components
会更改为min(n_features, n_classes - 1)
。以前,此更改是默默进行的。#11526 由 William de Vazelhes 提交。修复 修复了
discriminant_analysis.LinearDiscriminantAnalysis
中的一个错误,该错误导致在多类别情况下预测概率的计算不正确。#6848,由 Agamemnon Krasoulis 和Guillaume Lemaitre <glemaitre>
提交。修复 修复了
discriminant_analysis.LinearDiscriminantAnalysis
中的一个错误,该错误导致使用eigen
求解器时预测概率的计算不正确。#11727,由 Agamemnon Krasoulis 提交。
sklearn.dummy
#
修复 修复了
dummy.DummyClassifier
中的一个错误,该错误导致在stratified
策略下,predict_proba
方法返回 int32 数组而不是 float64 数组。#13266 由 Christos Aridas 提交。修复 修复了
dummy.DummyClassifier
中的一个错误,该错误导致如果在fit
期间给出了形状为(n, 1)
的列向量y
,则在预测时会抛出维度不匹配错误。#13545 由 Nick Sorros 和 Adrin Jalali 提交。
sklearn.ensemble
#
主要特性 新增两种梯度提升树的实现:
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
。这些估计器的实现灵感来源于 LightGBM,当样本数量超过数万时,它们的速度可能比ensemble.GradientBoostingRegressor
和ensemble.GradientBoostingClassifier
快几个数量级。这些新估计器的 API 略有不同,并且ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中的一些功能尚未支持。这些新的估计器是实验性的,这意味着它们的结果或 API 可能会在没有任何弃用周期的情况下发生变化。要使用它们,您需要显式导入
enable_hist_gradient_boosting
>>> # explicitly require this experimental feature >>> from sklearn.experimental import enable_hist_gradient_boosting # noqa >>> # now you can import normally from sklearn.ensemble >>> from sklearn.ensemble import HistGradientBoostingClassifier
注意
更新:自 1.0 版本起,这些估计器不再是实验性的,您无需再使用
from sklearn.experimental import enable_hist_gradient_boosting
。#12807 由 Nicolas Hug 提交。
特性 新增
ensemble.VotingRegressor
,它为回归问题提供了与ensemble.VotingClassifier
等效的功能。#12513 由 Ramil Nugmanov 和 Mohamed Ali Jamaoui 提交。效率 当以
n_jobs > 1
运行ensemble.IsolationForest
时,优先使用线程而非进程,因为底层决策树拟合调用会释放 GIL。这一更改减少了内存使用和通信开销。#12543 由 Isaac Storch 和 Olivier Grisel 提交。效率 通过避免在内存中保留每个树的预测,使
ensemble.IsolationForest
的内存效率更高。#13260 由 Nicolas Goix 提交。效率
ensemble.IsolationForest
现在在预测步骤中使用数据块,从而限制了内存使用量。#13283 由 Nicolas Goix 提交。效率
sklearn.ensemble.GradientBoostingClassifier
和sklearn.ensemble.GradientBoostingRegressor
现在将输入y
保留为float64
类型,以避免其在内部被树复制。#13524 由 Adrin Jalali 提交。改进 减少了
ensemble.AdaBoostClassifier
和ensemble.AdaBoostRegressor
中 X 的验证。#13174 由 Christos Aridas 提交。改进
ensemble.IsolationForest
现在公开了warm_start
参数,允许迭代地向孤立森林添加树。#13496 由 Peter Marko 提交。修复 所有基于随机森林的模型(即
ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
、ensemble.ExtraTreesRegressor
、ensemble.RandomTreesEmbedding
、ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
)中的feature_importances_
值现在满足以下条件:总和为
1
特征重要性计算中所有单节点树都被忽略
如果所有树都只有一个单节点(即根节点),则特征重要性将是一个全零数组。
#13636 和 #13620 由 Adrin Jalali 提交。
修复 修复了
ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中的一个错误,该错误导致它们不支持 scikit-learn 估计器作为初始估计器。还增加了对不支持样本权重的初始估计器的支持。#12436 由 Jérémie du Boisberranger 提交,#12983 由 Nicolas Hug 提交。修复 修复了当输入为 0、1 或 2 时,
ensemble.IsolationForest
中计算的平均路径长度的输出错误。#13251 由 Albert Thomas 和 joshuakennethjones 提交。修复 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误导致在多类别分类问题中梯度计算不正确。#12715 由 Nicolas Hug 提交。修复 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误导致早期停止的验证集未进行分层抽样。#13164 由 Nicolas Hug 提交。修复 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误导致多类别分类器的默认初始预测会预测类别先验而不是先验的对数。#12983 由 Nicolas Hug 提交。修复 修复了
ensemble.RandomForestClassifier
中的一个错误,该错误导致如果任何目标是字符串,则其predict
方法会针对多类别多输出森林模型报错。#12834 由 Elizabeth Sander 提交。修复 修复了
ensemble.gradient_boosting.LossFunction
和ensemble.gradient_boosting.LeastSquaresError
中的一个错误,该错误导致update_terminal_regions
中learning_rate
的默认值与文档和调用函数不一致。但请注意,直接使用这些损失函数已被弃用。#6463 由 movelikeriver 提交。修复
ensemble.partial_dependence
(以及新版本sklearn.inspection.partial_dependence
)现在在梯度提升模型使用样本权重进行训练时,会在部分依赖性计算中考虑样本权重。#13193 由 Samuel O. Ronsin 提交。API 变更
ensemble.partial_dependence
和ensemble.plot_partial_dependence
已被弃用,转而支持inspection.partial_dependence
和inspection.plot_partial_dependence<sklearn.inspection.plot_partial_dependence>
。#12599 由 Trevor Stephens 和 Nicolas Hug 提交。修复 当其中一个估计器设置为
None
且sample_weight
不为None
时,ensemble.VotingClassifier
和ensemble.VotingRegressor
在fit
期间失败。#13779 由 Guillaume Lemaitre 提交。API 变更
ensemble.VotingClassifier
和ensemble.VotingRegressor
除了接受None
之外,还接受'drop'
来禁用估计器,以与其他估计器(即pipeline.FeatureUnion
和compose.ColumnTransformer
)保持一致。#13780 由 Guillaume Lemaitre 提交。
sklearn.externals
#
API 变更 由于已停止支持 Python 2.7,
externals.six
已被弃用。#12916 由 Hanmin Qin 提交。
sklearn.feature_extraction
#
修复 如果
input='file'
或input='filename'
,并且将一个可调用对象作为analyzer
传入,sklearn.feature_extraction.text.HashingVectorizer
、sklearn.feature_extraction.text.TfidfVectorizer
和sklearn.feature_extraction.text.CountVectorizer
现在会从文件读取数据,然后将其传递给指定的analyzer
,而不是将文件名或文件对象传递给分析器。#13641 由 Adrin Jalali 提交。
sklearn.impute
#
主要特性 新增了
impute.IterativeImputer
,这是一种通过以循环方式将每个带有缺失值的特征建模为其他特征的函数来插补缺失值的策略。#8478 和 #12177 由 Sergey Feldman 和 Ben Lawson 提交。IterativeImputer 的 API 是实验性的,可能会在没有任何弃用周期的情况下发生变化。要使用它们,您需要显式导入
enable_iterative_imputer
>>> from sklearn.experimental import enable_iterative_imputer # noqa >>> # now you can import normally from sklearn.impute >>> from sklearn.impute import IterativeImputer
特性
impute.SimpleImputer
和impute.IterativeImputer
有一个新的参数'add_indicator'
,它将impute.MissingIndicator
变换简单地堆叠到插补器的变换输出中。这允许预测估计器考虑缺失情况。#12583、#13601 由 Danylo Baibak 提交。修复 在
impute.MissingIndicator
中,如果输入是稀疏的并且missing_values
属性设置为 0,则会引发异常以避免隐式稠密化。#13240 由 Bartosz Telenczuk 提交。修复 修复了
impute.MissingIndicator
中的两个错误。首先,当X
是稀疏时,所有非零且非缺失的值在转换后的数据中都会变为显式的 False。其次,当features='missing-only'
时,如果完全没有缺失值,所有特征都会被保留。#13562 由 Jérémie du Boisberranger 提交。
sklearn.inspection
#
(新子包)
特性 现在支持对任何回归器或分类器(前提是它们具有
predict_proba
方法)生成部分依赖性图 (inspection.plot_partial_dependence
)。#12599 由 Trevor Stephens 和 Nicolas Hug 提交。
sklearn.isotonic
#
特性 允许在
isotonic.IsotonicRegression
中使用不同的数据类型(如 float32)。#8769 由 Vlad Niculae 提交。
sklearn.linear_model
#
改进
linear_model.Ridge
现在保留float32
和float64
数据类型。#8769 和 #11000 由 Guillaume Lemaitre 和 Joan Massich 提交。特性
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
现在支持 Elastic-Net 惩罚项,并使用 'saga' 求解器。#11646 由 Nicolas Hug 提交。特性 新增了
linear_model.lars_path_gram
,这是处于充分统计量模式的linear_model.lars_path
,允许用户在不提供X
和y
的情况下计算linear_model.lars_path
。#11699 由 Kuai Yu 提交。效率
linear_model.make_dataset
现在保留float32和
和float64
数据类型,从而减少了随机梯度、SAG 和 SAGA 求解器中的内存消耗。#8769 和 #11000 由 Nelle Varoquaux、Arthur Imbert、Guillaume Lemaitre 和 Joan Massich 提交。改进
linear_model.LogisticRegression
现在支持传入penalty='none'
时的无正则化目标。这等效于在l2正则化下设置C=np.inf
。`liblinear` 求解器不支持此功能。 #12860 由 Nicolas Hug 贡献。改进
linear_model.Ridge
中的sparse_cg
求解器现在支持在输入为稀疏时拟合截距(即fit_intercept=True
)。 #13336 由 Bartosz Telenczuk 贡献。改进 `Lasso`、`ElasticNet` 等中使用的坐标下降求解器现在在未达到所需容差即完成时,会发出
ConvergenceWarning
警告。 #11754 和 #13397 由 Brent Fagan 和 Adrin Jalali 贡献。修复 修复了
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中使用 'saga' 求解器时的一个错误,在某些情况下权重无法正确更新。 #11646 由 Tom Dupre la Tour 贡献。修复 修复了
linear_model.BayesianRidge
中的后验均值、后验协方差和返回的正则化参数。后验均值和后验协方差并非通过正则化参数的最后一次更新计算得出,且返回的正则化参数并非最终结果。还修复了当compute_score=True
时用于计算得分的对数边缘似然公式。 #12174 由 Albert Thomas 贡献。修复 修复了
linear_model.LassoLarsIC
中的一个错误,即在实例创建时用户输入的copy_X=False
会被fit
方法中的默认参数值copy_X=True
覆盖。 #12972 由 Lucio Fernandez-Arjona 贡献。修复 修复了
linear_model.LinearRegression
中的一个错误,该错误导致在稀疏和密集情况下,当fit_intercept=True
时,无法返回相同的系数和截距。 #13279 由 Alexandre Gramfort 贡献。修复 修复了
linear_model.HuberRegressor
中的一个错误,当X
的数据类型为布尔型时会导致其失效。 #13328 由 Alexandre Gramfort 贡献。修复 修复了
saga
和sag
求解器在joblib.Parallel
设置下,当n_jobs > 1
且backend="threading"
时存在的性能问题,此前它们的表现会比顺序执行情况更差。 #13389 由 Pierre Glaser 贡献。修复 修复了
linear_model.stochastic_gradient.BaseSGDClassifier
中的一个错误,该错误导致在多线程多类别设置下训练时结果不确定。 #13422 由 Clément Doumouro 贡献。修复 修复了
linear_model.ridge_regression
、linear_model.Ridge
和linear_model.RidgeClassifier
中的一个错误,该错误导致当参数return_intercept=True
且solver=auto
(默认)或任何其他非sag
求解器时,出现未处理的异常。 #13363 由 Bartosz Telenczuk 贡献。修复
linear_model.ridge_regression
现在会在return_intercept=True
且求解器不是sag
时抛出异常。此前,只会发出警告。 #13363 由 Bartosz Telenczuk 贡献。修复 当
solver=auto
且提供了sample_weight
时,linear_model.ridge_regression
将为稀疏输入选择sparse_cg
求解器(此前选择的是cholesky
求解器)。 #13363 由 Bartosz Telenczuk 贡献。API 变更 在 0.21 版本中,使用
linear_model.lars_path
并在传入Gram
的同时使用X=None
的用法已弃用,并将在 0.23 版本中移除。请改用linear_model.lars_path_gram
。 #11699 由 Kuai Yu 贡献。API 变更
linear_model.logistic_regression_path
在 0.21 版本中已弃用,并将在 0.23 版本中移除。 #12821 由 Nicolas Hug 贡献。修复
linear_model.RidgeCV
在留一法交叉验证中,当fit_intercept=True
且设计矩阵为稀疏时,现在能正确拟合截距。 #13350 由 Jérôme Dockès 贡献。
sklearn.manifold
#
效率提升
manifold.trustworthiness
现在使用倒排索引而非np.where
查找来确定输入空间中邻居的排名。这尤其在邻居数量多和/或数据集较小的情况下提高了效率。 #9907 由 William de Vazelhes 贡献。
sklearn.metrics
#
新功能 为单输出回归添加了
metrics.max_error
指标和相应的'max_error'
评分器。 #12232 由 Krishna Sangeeth 贡献。新功能 添加了
metrics.multilabel_confusion_matrix
,它能计算每个类别的真阳性、假阳性、假阴性和真阴性计数的混淆矩阵。这有助于计算诸如召回率(recall)、特异度(specificity)、误报率(fall out)和漏报率(miss rate)等集合度量。 #11179 由 Shangwu Yao 和 Joel Nothman 贡献。新功能 添加了
metrics.jaccard_score
,用于计算二分类、多标签和多类别任务的 Jaccard 系数作为评估指标,其接口类似于metrics.f1_score
。 #13151 由 Gaurav Dhingra 和 Joel Nothman 贡献。新功能 添加了
metrics.pairwise.haversine_distances
,可以通过metrics.pairwise_distances
和估计器以metric='pairwise'
访问。(Haversine 距离此前已可用于最近邻计算。) #12568 由 Wei Xue、Emmanuel Arias 和 Joel Nothman 贡献。效率提升 通过使用基于线程的后端而非基于进程的后端,
metrics.pairwise_distances
在n_jobs
> 1 时速度更快。 #8216 由 Pierre Glaser 和 Romuald Menuet 贡献。效率提升 稀疏输入的成对曼哈顿距离现在使用随 scipy 提供的 BLAS,而非捆绑的 BLAS。 #12732 由 Jérémie du Boisberranger 贡献。
改进 在
metrics.classification_report
中使用标签accuracy
代替micro-average
以避免混淆。micro-average
仅在多标签或多类别且类别子集的情况下显示,因为它与准确率(accuracy)相同。 #12334 由 Emmanuel Arias、Joel Nothman 和 Andreas Müller 贡献。改进 为
metrics.homogeneity_completeness_v_measure
和metrics.v_measure_score
添加了beta
参数,用于配置同质性(homogeneity)和完整性(completeness)之间的权衡。 #13607 由 Stephane Couvreur 和 Ivan Sanchez 贡献。修复
metrics.r2_score
指标在只有单个样本时会退化,现在它将返回 NaN 并引发exceptions.UndefinedMetricWarning
警告。 #12855 由 Pawel Sendyk 贡献。修复 修复了
metrics.brier_score_loss
的一个错误,在y_true
中只有一个类别时,它有时会返回不正确的结果。 #13628 由 Hanmin Qin 贡献。修复 修复了
metrics.label_ranking_average_precision_score
中的一个错误,该错误导致在处理退化标签的样本时未考虑 `sample_weight`。 #13447 由 Dan Ellis 贡献。API 变更
metrics.hamming_loss
中的labels
参数在 0.21 版本中已弃用,并将在 0.23 版本中移除。 #10580 由 Reshama Shaikh 和 Sandra Mitrovic 贡献。修复 函数
metrics.pairwise.euclidean_distances
以及因此使用metric='euclidean'
的多个估计器,在使用float32
特征时存在数值精度问题。精度已提高,但代价是性能略有下降。 #13554 由 @Celelibi 和 Jérémie du Boisberranger 贡献。API 变更
metrics.jaccard_similarity_score
已弃用,取而代之的是更一致的metrics.jaccard_score
。二分类和多类别目标的原有行为已失效。 #13151 由 Joel Nothman 贡献。
sklearn.mixture
#
修复 修复了
mixture.BaseMixture
及其相关估计器(即mixture.GaussianMixture
和mixture.BayesianGaussianMixture
)中的一个错误,该错误导致fit_predict
和fit.predict
不等效。 #13142 由 Jérémie du Boisberranger 贡献。
sklearn.model_selection
#
新功能 类
GridSearchCV
和RandomizedSearchCV
现在允许将refit
设置为可调用对象,以增加识别最佳估计器的灵活性。请参阅 平衡模型复杂度和交叉验证得分。 #11354 由 Wenhao Zhang、Joel Nothman 和 Adrin Jalali 贡献。改进 类
GridSearchCV
、RandomizedSearchCV
,以及方法cross_val_score
、cross_val_predict
、cross_validate
,当return_train_scores
为 True 且verbose
> 2 时,现在会打印训练分数。对于learning_curve
和validation_curve
,只需满足后者即可。 #12613 和 #12669 由 Marc Torrellas 贡献。改进 某些 CV 分割器 类和
model_selection.train_test_split
现在在生成的训练集为空时会引发ValueError
。 #12861 由 Nicolas Hug 贡献。修复 修复了
model_selection.StratifiedKFold
中的一个错误,该错误导致它使用相同的random_state
打乱每个类别的样本,使得shuffle=True
无效。 #13124 由 Hanmin Qin 贡献。修复 添加了
model_selection.cross_val_predict
处理多标签(和多输出多类别)目标的能力,支持predict_proba
类型的方法。 #8773 由 Stephen Hoover 贡献。修复 修复了
cross_val_predict
中的一个问题,即在交叉验证折叠中排除某个类别时,method="predict_proba"
总是返回0.0
。 #13366 由 Guillaume Fournier 贡献。
sklearn.multiclass
#
修复 修复了
multiclass.OneVsOneClassifier.decision_function
中的一个问题,由于 `decision_function` 中使用的缩放比例,给定样本的 `decision_function` 值在单独评估该样本或在包含该样本的批次上评估时是不同的。 #10440 由 Jonathan Ohayon 贡献。
sklearn.multioutput
#
修复 修复了
multioutput.MultiOutputClassifier
中的一个错误,其predict_proba
方法错误地检查估计器对象中的predict_proba
属性。 #12222 由 Rebekah Kim 贡献。
sklearn.neighbors
#
主要功能 添加了用于度量学习的
neighbors.NeighborhoodComponentsAnalysis
,它实现了邻域成分分析算法。 #10058 由 William de Vazelhes 和 John Chiotellis 贡献。API 变更
neighbors.NearestNeighbors
中的方法:kneighbors
、radius_neighbors
、kneighbors_graph
、radius_neighbors_graph
在fit
方法之前被调用时,现在会引发NotFittedError
而非AttributeError
。 #12279 由 Krishna Sangeeth 贡献。
sklearn.neural_network
#
修复 修复了
neural_network.MLPClassifier
和neural_network.MLPRegressor
中的一个错误,即shuffle=False
选项被忽略。 #12582 由 Sam Waterbury 贡献。修复 修复了
neural_network.MLPClassifier
中的一个错误,即早期停止的验证集未进行分层抽样。然而,在多标签情况下,分割仍然是非分层的。 #13164 由 Nicolas Hug 贡献。
sklearn.pipeline
#
新功能
pipeline.Pipeline
现在可以使用索引表示法(例如my_pipeline[0:-1]
)来提取步骤子序列作为另一个 Pipeline 实例。Pipeline 也可以直接通过索引提取特定步骤(例如my_pipeline['svc']
),而不是通过访问named_steps
。 #2568 由 Joel Nothman 贡献。新功能 在
pipeline.Pipeline
、compose.ColumnTransformer
和pipeline.FeatureUnion
中添加了可选参数verbose
,以及相应的make_
辅助函数,用于显示每个步骤的进度和计时。 #11364 由 Baze Petrushev、Karan Desai、Joel Nothman 和 Thomas Fan 贡献。改进
pipeline.Pipeline
现在支持将'passthrough'
用作转换器,效果与None
相同。 #11144 由 Thomas Fan 贡献。改进
pipeline.Pipeline
实现了__len__
方法,因此len(pipeline)
返回管道中的步骤数。 #13439 由 Lakshya KD 贡献。
sklearn.preprocessing
#
新功能
preprocessing.OneHotEncoder
现在支持使用新的drop
参数为每个类别删除一个特征。 #12908 由 Drew Johnston 贡献。效率提升
preprocessing.OneHotEncoder
和preprocessing.OrdinalEncoder
现在能更高效地处理 pandas DataFrame。 #13253 由 @maikia 贡献。效率提升
preprocessing.MultiLabelBinarizer
现在会缓存类映射,而不是每次动态计算。 #12116 由 Ekaterina Krivich 和 Joel Nothman 贡献。效率提升
preprocessing.PolynomialFeatures
现在支持将压缩稀疏行(CSR)矩阵作为2次和3次多项式的输入。这通常比密集情况快得多,因为它随矩阵密度和展开度(约密度^度)而变化,并且比压缩稀疏列(CSC)情况快得多。 #12197 由 Andrew Nystrom 贡献。效率提升
preprocessing.PolynomialFeatures
在密集情况下的速度有所提升。还添加了一个新参数order
,用于控制输出顺序以进一步提高性能。 #12251 由 Tom Dupre la Tour 贡献。修复 修复了在使用
preprocessing.StandardScaler
时,`float16` 数据类型可能导致的计算溢出问题。 #13007 由 Raffaello Baluyot 贡献。修复 修复了
preprocessing.QuantileTransformer
和preprocessing.quantile_transform
中的一个错误,强制n_quantiles
最多等于n_samples
。n_quantiles
大于n_samples
的值要么无用,要么导致累积分布函数估计器的错误近似。 #13333 由 Albert Thomas 贡献。API 变更
preprocessing.quantile_transform
中copy
的默认值将在 0.23 版本中从 False 更改为 True,以使其与sklearn.preprocessing
中其他函数的默认copy
值更加一致,并通过就地修改X
的值来防止意外的副作用。 #13459 由 Hunter McGushion 贡献。
sklearn.svm
#
修复 修复了
svm.SVC.decision_function
中,当decision_function_shape='ovr'
时的一个问题。由于 `decision_function` 中使用的缩放比例,给定样本的 `decision_function` 值在单独评估该样本或在包含该样本的批次上评估时是不同的。 #10440 由 Jonathan Ohayon 贡献。
sklearn.tree
#
新功能 决策树现在可以使用
matplotlib
和tree.plot_tree
进行绘制,而无需依赖dot
库,从而移除了一个难以安装的依赖项。 #8508 由 Andreas Müller 贡献。新功能 决策树现在可以使用
tree.export_text
导出为人类可读的文本格式。 #6261 由Giuseppe Vettigli <JustGlowing>
贡献。新功能
get_n_leaves()
和get_depth()
已添加到tree.BaseDecisionTree
及其所有基于它的估计器中,包括tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
。 #12300 由 Adrin Jalali 贡献。修复 此前,树模型和森林模型无法对带有字符串标签的多输出分类目标进行
predict
,尽管它们在fit
中接受此类标签。 #11458 由 Mitar Milutinovic 贡献。修复 修复了
tree.BaseDecisionTree
及其所有基于它的估计器(包括tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
)的一个问题,即当用户同时指定max_leaf_nodes
和max_depth
时,在扩展树时max_depth
会超出给定值 1。请注意,这也会影响所有使用决策树的集成方法。 #12344 由 Adrin Jalali 贡献。
sklearn.utils
#
新功能
utils.resample
现在接受stratify
参数,用于根据类别分布进行抽样。 #13549 由 Nicolas Hug 贡献。API 变更
utils.check_array
和utils.check_X_y
中的warn_on_dtype
参数已弃用。如果传入的metric
是成对布尔指标,则在check_pairwise_arrays
中添加了数据类型转换的明确警告。 #13382 由 Prathmesh Savale 贡献。
多个模块#
主要功能 所有估计器的
__repr__()
方法(在调用print(estimator)
时使用)已完全重写,基于 Python 的美观打印标准库。默认情况下会打印所有参数,但这可以通过sklearn.set_config
中的print_changed_only
选项进行更改。 #11705 由 Nicolas Hug 贡献。主要功能 添加了估计器标签:这些是对估计器的注解,允许以编程方式检查其功能,例如稀疏矩阵支持、支持的输出类型和支持的方法。估计器标签还决定了在调用
check_estimator
时对估计器运行的测试。更多信息请参阅用户指南。 #8022 由 Andreas Müller 贡献。效率提升 在多个估计器中将数组转换为不同数据类型时,避免了内存复制。 #11973 由 Roman Yurchak 贡献。
修复 修复了
our_rand_r
辅助函数的实现中的一个错误,该错误导致其在不同平台上的行为不一致。 #13422 由 Madhura Parikh 和 Clément Doumouro 贡献。
其他#
改进 Joblib 不再是 scikit-learn 的内部捆绑库,而是成为了一个依赖项。最低支持版本是 joblib 0.11,但强烈建议使用 0.13 或更高版本。 #13531 由 Roman Yurchak 贡献。
估计器检查的变更#
这些变更主要影响库开发人员。
将
check_fit_idempotent
添加到check_estimator
中,该函数检查当fit
方法使用相同数据调用两次时,predict
、predict_proba
、transform
和decision_function
的输出是否保持不变。 #12328 由 Nicolas Hug 贡献。许多检查现在可以通过估计器标签进行禁用或配置。 #8022 由 Andreas Müller 贡献。
代码和文档贡献者
感谢自 0.20 版本以来为项目的维护和改进做出贡献的所有人,包括
adanhawth, Aditya Vyas, Adrin Jalali, Agamemnon Krasoulis, Albert Thomas, Alberto Torres, Alexandre Gramfort, amourav, Andrea Navarrete, Andreas Mueller, Andrew Nystrom, assiaben, Aurélien Bellet, Bartosz Michałowski, Bartosz Telenczuk, bauks, BenjaStudio, bertrandhaut, Bharat Raghunathan, brentfagan, Bryan Woods, Cat Chenal, Cheuk Ting Ho, Chris Choe, Christos Aridas, Clément Doumouro, Cole Smith, Connossor, Corey Levinson, Dan Ellis, Dan Stine, Danylo Baibak, daten-kieker, Denis Kataev, Didi Bar-Zev, Dillon Gardner, Dmitry Mottl, Dmitry Vukolov, Dougal J. Sutherland, Dowon, drewmjohnston, Dror Atariah, Edward J Brown, Ekaterina Krivich, Elizabeth Sander, Emmanuel Arias, Eric Chang, Eric Larson, Erich Schubert, esvhd, Falak, Feda Curic, Federico Caselli, Frank Hoang, Fibinse Xavier`, Finn O’Shea, Gabriel Marzinotto, Gabriel Vacaliuc, Gabriele Calvo, Gael Varoquaux, GauravAhlawat, Giuseppe Vettigli, Greg Gandenberger, Guillaume Fournier, Guillaume Lemaitre, Gustavo De Mari Pereira, Hanmin Qin, haroldfox, hhu-luqi, Hunter McGushion, Ian Sanders, JackLangerman, Jacopo Notarstefano, jakirkham, James Bourbeau, Jan Koch, Jan S, janvanrijn, Jarrod Millman, jdethurens, jeremiedbb, JF, joaak, Joan Massich, Joel Nothman, Jonathan Ohayon, Joris Van den Bossche, josephsalmon, Jérémie Méhault, Katrin Leinweber, ken, kms15, Koen, Kossori Aruku, Krishna Sangeeth, Kuai Yu, Kulbear, Kushal Chauhan, Kyle Jackson, Lakshya KD, Leandro Hermida, Lee Yi Jie Joel, Lily Xiong, Lisa Sarah Thomas, Loic Esteve, louib, luk-f-a, maikia, mail-liam, Manimaran, Manuel López-Ibáñez, Marc Torrellas, Marco Gaido, Marco Gorelli, MarcoGorelli, marineLM, Mark Hannel, Martin Gubri, Masstran, mathurinm, Matthew Roeschke, Max Copeland, melsyt, mferrari3, Mickaël Schoentgen, Ming Li, Mitar, Mohammad Aftab, Mohammed AbdelAal, Mohammed Ibraheem, Muhammad Hassaan Rafique, mwestt, Naoya Iijima, Nicholas Smith, Nicolas Goix, Nicolas Hug, Nikolay Shebanov, Oleksandr Pavlyk, Oliver Rausch, Olivier Grisel, Orestis, Osman, Owen Flanagan, Paul Paczuski, Pavel Soriano, pavlos kallis, Pawel Sendyk, peay, Peter, Peter Cock, Peter Hausamann, Peter Marko, Pierre Glaser, pierretallotte, Pim de Haan, Piotr Szymański, Prabakaran Kumaresshan, Pradeep Reddy Raamana, Prathmesh Savale, Pulkit Maloo, Quentin Batista, Radostin Stoyanov, Raf Baluyot, Rajdeep Dua, Ramil Nugmanov, Raúl García Calvo, Rebekah Kim, Reshama Shaikh, Rohan Lekhwani, Rohan Singh, Rohan Varma, Rohit Kapoor, Roman Feldbauer, Roman Yurchak, Romuald M, Roopam Sharma, Ryan, Rüdiger Busche, Sam Waterbury, Samuel O. Ronsin, SandroCasagrande, Scott Cole, Scott Lowe, Sebastian Raschka, Shangwu Yao, Shivam Kotwalia, Shiyu Duan, smarie, Sriharsha Hatwar, Stephen Hoover, Stephen Tierney, Stéphane Couvreur, surgan12, SylvainLan, TakingItCasual, Tashay Green, thibsej, Thomas Fan, Thomas J Fan, Thomas Moreau, Tom Dupré la Tour, Tommy, Tulio Casagrande, Umar Farouk Umar, Utkarsh Upadhyay, Vinayak Mehta, Vishaal Kapoor, Vivek Kumar, Vlad Niculae, vqean3, Wenhao Zhang, William de Vazelhes, xhan, Xing Han Lu, xinyuliu12, Yaroslav Halchenko, Zach Griffith, Zach Miller, Zayd Hammoudeh, Zhuyi Xue, Zijie (ZJ) Poh, ^__^