版本 0.21#
Legend for changelogs
Major Feature something big that you couldn’t do before.
Feature something that you couldn’t do before.
Efficiency an existing feature now may not require as much computation or memory.
Enhancement a miscellaneous minor improvement.
Fix something that previously didn’t work as documented – or according to reasonable expectations – should now work.
API Change you will need to change your code to have the same effect in the future; or a feature will be removed in the future.
版本 0.21.3#
2019年7月30日
变更的模型#
以下估计器和函数,在相同数据和参数下进行拟合时,可能会产生与上一版本不同的模型。这通常是由于建模逻辑的变更(错误修复或增强),或随机抽样过程的变化所导致。
v0.20.0 发布说明中未能提及当
needs_proba=True
且y_true
为二元时,metrics.make_scorer
中的向后不兼容性。现在,评分器函数应接受一维y_pred
(即,正类的概率,形状为(n_samples,)
),而不是二维y_pred
(即,形状为(n_samples, 2)
)。
变更日志#
sklearn.cluster
#
Fix 修复了
cluster.KMeans
中的一个错误,当init='random'
且n_jobs > 1
或n_jobs = -1
时,计算是单线程的。#12955 由 Prabakaran Kumaresshan 贡献。Fix 修复了
cluster.OPTICS
中的一个错误,用户无法传递浮点数min_samples
和min_cluster_size
。#14496 由 Fabian Klopfer 和 Hanmin Qin 贡献。Fix 修复了
cluster.KMeans
中的一个错误,KMeans++ 初始化偶尔会导致 IndexError。#11756 由 Joel Nothman 贡献。
sklearn.compose
#
Fix 修复了
compose.ColumnTransformer
中的一个问题,当使用列顺序在 :func:fit
和 :func:transform
之间不同的 DataFrame 时,可能会导致将错误的列静默传递给remainder
转换器。#14237 由Andreas Schuderer <schuderer>
贡献。
sklearn.datasets
#
datasets.fetch_kddcup99
, datasets.fetch_olivetti_faces
,
datasets.fetch_rcv1
, 以及 datasets.fetch_species_distributions
尝试使用新的 joblib
持久化先前缓存的数据,如果缓存数据是使用已弃用的 sklearn.externals.joblib
持久化的。此行为将被弃用,并在 v0.23 中移除。
#14197 由 Adrin Jalali 提交。
sklearn.ensemble
#
Fix 修复了
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
中的零除错误。 #14024 由Nicolas Hug <NicolasHug>
提交。
sklearn.impute
#
Fix 修复了
impute.SimpleImputer
和impute.IterativeImputer
中的一个错误,使得在训练数据中存在缺失值时不会抛出错误。 #13974 由Frank Hoang <fhoang7>
提交。
sklearn.inspection
#
Fix 修复了
inspection.plot_partial_dependence
中的一个错误,其中target
参数在多类问题中未被考虑。 #14393 由 Guillem G. Subies 提交。
sklearn.linear_model
#
Fix 修复了
linear_model.LogisticRegressionCV
中的一个错误,其中refit=False
会根据'multiclass'
和'penalty'
参数失败(在 0.21 版本中引入的回归问题)。 #14087 由 Nicolas Hug 提交。Fix 修复了
linear_model.ARDRegression
与 Scipy>=1.3.0 的兼容性问题。适应上游对默认pinvh
截止阈值的更改,否则在某些情况下会导致精度不佳。 #14067 由 Tim Staley 提交。
sklearn.neighbors
#
Fix 修复了
neighbors.NeighborhoodComponentsAnalysis
中的一个错误,其中初始参数n_components
,max_iter
和tol
的验证需要过于严格的类型。 #14092 由
sklearn.tree
#
Fix 修复了当树只有一个特征且传入单个特征名称时,
tree.export_text
中的错误。#14053 由Thomas Fan
提交。Fix 修复了
tree.plot_tree
中的一个问题,该问题在 DecisionTreeClassifiers 中使用gini
准则时仍显示熵计算。#13947 由 Frank Hoang 提交。
Version 0.21.2#
2019年5月24日
更新日志#
sklearn.decomposition
#
Fix 修复了
cross_decomposition.CCA
中的一个错误,提高了当Y
接近零时的数值稳定性。#13903 由 Thomas Fan 提交。
sklearn.metrics
#
Fix 修复了
metrics.pairwise.euclidean_distances
中的一个错误,该错误导致对于足够大的 float32 数据集,部分距离矩阵未实例化(在 0.21 版本中引入的回归问题)。#13910 由 Jérémie du Boisberranger 提交。
sklearn.preprocessing
#
Fix 修复了
preprocessing.OneHotEncoder
中的一个错误,其中新的drop
参数未反映在get_feature_names
中。#13894 由 James Myatt 提交。
sklearn.utils.sparsefuncs
Fix 修复了一个错误,
min_max_axis
在 32 位系统上对于某些大输入会失败。这影响了preprocessing.MaxAbsScaler
、preprocessing.normalize
和preprocessing.LabelBinarizer
。#13741 由 Roddy MacSween 提交。
Version 0.21.1#
2019年5月17日
这是一个错误修复版本,主要是为了解决 0.21.0 版本中的一些打包问题。它还包括一些小的文档改进和一些错误修复。
更新日志#
sklearn.inspection
#
Fix 修复了
inspection.partial_dependence
中的一个错误,仅在多类-多输出情况下检查分类器而不是回归器。 #14309 由 Guillaume Lemaitre 提交。
sklearn.metrics
#
Fix 修复了
metrics.pairwise_distances
中的一个错误,当X
具有布尔数据类型且Y == None
时会引发AttributeError
。 #13864 由 Paresh Mathur 提交。Fix 修复了
metrics.pairwise_distances
中的两个错误,当n_jobs > 1
时。首先,它以前会返回与输入相同数据类型的距离矩阵,即使是整数数据类型。然后,当Y
是X
时,欧几里得度量的对角线不是零。 #13877 由 Jérémie du Boisberranger 提交。
sklearn.neighbors
#
Fix 修复了
neighbors.KernelDensity
中的一个错误,如果使用了sample_weight
,则无法从 pickle 中恢复。 #13772 由 Aditya Vyas 提交。
版本 0.21.0#
2019年5月
更改的模型#
以下估计器和函数,当使用相同的数据和参数进行拟合时,可能会产生与上一版本不同的模型。这通常是由于建模逻辑的变化(错误修复或增强)或随机抽样过程的变化。
discriminant_analysis.LinearDiscriminantAnalysis
使用 ‘eigen’ 求解器。Fix决策树及其派生集成,当同时设置
max_depth
和max_leaf_nodes
时。Fixlinear_model.LogisticRegression
和linear_model.LogisticRegressionCV
使用 ‘saga’ 求解器。Fixsklearn.feature_extraction.text.HashingVectorizer
,sklearn.feature_extraction.text.TfidfVectorizer
, 以及sklearn.feature_extraction.text.CountVectorizer
Fixsvm.SVC.decision_function
和multiclass.OneVsOneClassifier.decision_function
. Fixlinear_model.SGDClassifier
及其衍生分类器。 Fix任何使用
linear_model._sag.sag_solver
函数且种子为0
的模型,包括linear_model.LogisticRegression
,linear_model.LogisticRegressionCV
,linear_model.Ridge
, 以及使用 ‘sag’ 求解器的linear_model.RidgeCV
。 Fix当使用留一交叉验证和稀疏输入时,
linear_model.RidgeCV
。 Fix
详细信息列在下面的变更日志中。
(虽然我们正努力通过提供这些信息来更好地告知用户,但我们不能保证此列表是完整的。)
已知重大错误#
linear_model.LogisticRegression
的默认max_iter
对于许多求解器来说太小,给定默认的tol
。特别是,我们在版本 0.16 中发布的 #3591 中,意外地将 liblinear 求解器的默认max_iter
从 1000 次迭代更改为 100 次迭代。在未来的版本中,我们希望根据求解器启发式地选择更好的默认max_iter
和tol
(参见 #13317 )。
变更日志#
已正式放弃对 Python 3.4 及以下版本的支持。
sklearn.base
#
API Change 当在回归器上调用
score
时使用的 R2 评分将从版本 0.23 开始使用multioutput='uniform_average'
以保持与metrics.r2_score
的一致性。这将影响所有多输出回归器的score
方法(除了multioutput.MultiOutputRegressor
)。 #13157 由 Hanmin Qin 提交。
sklearn.calibration
#
Enhancement 增加了通过分位数而不是在 0 和 1 之间均匀分箱的方式对传递给
calibration.calibration_curve
的数据进行分箱的支持。 #13086 由 Scott Cole 提交。Enhancement 允许
calibration.CalibratedClassifierCV
接受 n 维数组作为输入。#13485 由 William de Vazelhes 提交。
sklearn.cluster
#
Major Feature 一种新的聚类算法:
cluster.OPTICS
:一种与cluster.DBSCAN
相关的算法,其超参数更易于设置且扩展性更好,由 Shane 、 Adrin Jalali 、Erich Schubert 、 Hanmin Qin 和 Assia Benbihi 提交。Fix 修复了一个
cluster.Birch
偶尔会引发 AttributeError 的错误。#13651 由 Joel Nothman 提交。Fix 修复了
cluster.KMeans
中在使用样本权重时,空簇未正确重新定位的错误。#13486 由 Jérémie du Boisberranger 提交。API Change
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
中的n_components_
属性已重命名为n_connected_components_
。 #13427 由 Stephane Couvreur 提交。Enhancement
cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
现在接受一个distance_threshold
参数,该参数可用于查找簇而不是n_clusters
。 #9069 由 Vathsala Achar 和 Adrin Jalali 提交。
sklearn.compose
#
API Change
compose.ColumnTransformer
不再是实验性功能。#13835 由 Hanmin Qin 提交。
sklearn.datasets
#
Fix 增加了对 SVMLight 文件中 64 位组 ID 和指针的支持。#10727 由 Bryan K Woods 提交。
Fix
datasets.load_sample_images
返回的图像具有确定性顺序。#13250 由 Thomas Fan 提交。
sklearn.decomposition
#
Enhancement
decomposition.KernelPCA
现在具有确定性输出(解决了核矩阵特征值分解中的符号歧义)。#13241 由 Aurélien Bellet 提交。Fix 修复了
decomposition.KernelPCA
中的一个错误,fit().transform()
现在在非移除零特征值(remove_zero_eig=False
)的情况下产生正确的输出(与fit_transform()
相同)。fit_inverse_transform
也通过使用与fit_transform
相同的技巧来计算X
的变换,从而加速。#12143 由 Sylvain Marié 提交。Fix 修复了
decomposition.NMF
中的一个错误,当init = 'nndsvd'
、init = 'nndsvda'
和init = 'nndsvdar'
允许在n_components < n_features
而不是n_components <= min(n_samples, n_features)
时。#11650 由 Hossein Pourbozorg 和 Zijie (ZJ) Poh 提交。API Change
decomposition.non_negative_factorization
中init
参数的默认值将从random
变为None
(在版本 0.23 中),以使其与decomposition.NMF
一致。当使用默认值时,会引发 FutureWarning。#12988 由 Zijie (ZJ) Poh 提交。
sklearn.discriminant_analysis
#
Enhancement
discriminant_analysis.LinearDiscriminantAnalysis
现在保留float32
和float64
数据类型。#8769 和 #11000 由 Thibault Sejourne 贡献。Fix 当
discriminant_analysis.LinearDiscriminantAnalysis
的参数n_components
大于min(n_features, n_classes - 1)
时,现在会引发ChangedBehaviourWarning
,并且如果需要,n_components
会被更改为min(n_features, n_classes - 1)
。之前这种更改是静默进行的。#11526 由 William de Vazelhes 贡献。Fix 修复了
discriminant_analysis.LinearDiscriminantAnalysis
中的一个错误,该错误在多类情况下会错误地计算预测概率。#6848 ,由 Agamemnon Krasoulis 和Guillaume Lemaitre <glemaitre>
贡献。Fix 修复了
discriminant_analysis.LinearDiscriminantAnalysis
中的一个错误,该错误在使用eigen
求解器时会错误地计算预测概率。#11727 ,由 Agamemnon Krasoulis 贡献。
sklearn.dummy
#
Fix 修复了
dummy.DummyClassifier
中的一个错误,该错误在stratified
策略下predict_proba
方法返回的是 int32 数组而不是 float64。#13266 由 Christos Aridas 贡献。Fix 修复了
dummy.DummyClassifier
中的一个错误,该错误在预测时会抛出维度不匹配的错误,如果在fit
时给定的是形状为(n, 1)
的列向量y
。#13545 由 Nick Sorros 和 Adrin Jalali 贡献。
sklearn.ensemble
#
Major Feature 添加了两种新的梯度提升树实现:
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
。这些估计器的实现受到 LightGBM 的启发,并且可以有数量级的性能提升。
比 ensemble.GradientBoostingRegressor
和
ensemble.GradientBoostingClassifier
快得多,
当样本数量大于数万个样本时。这些新估计器的API略有不同,
并且 ensemble.GradientBoostingClassifier
和
ensemble.GradientBoostingRegressor
的一些功能尚未支持。
这些新估计器是实验性的,这意味着它们的结果或API可能会在没有任何弃用周期的情况下发生变化。要使用它们,您需要显式导入 enable_hist_gradient_boosting
>>> # 显式要求此实验性功能
>>> from sklearn.experimental import enable_hist_gradient_boosting # noqa
>>> # 现在可以从 sklearn.ensemble 正常导入
>>> from sklearn.ensemble import HistGradientBoostingClassifier
Note
更新:自版本1.0起,这些估计器不再是实验性的,您不需要使用 from sklearn.experimental import enable_hist_gradient_boosting
。
#12807 由 Nicolas Hug 贡献。
Feature 添加
ensemble.VotingRegressor
, 为回归问题提供与ensemble.VotingClassifier
等效的功能。 #12513 由 Ramil Nugmanov 和 Mohamed Ali Jamaoui 贡献。Efficiency 使
ensemble.IsolationForest
在运行n_jobs > 1
时优先使用线程而非进程,因为底层决策树拟合调用会释放GIL。这一更改减少了内存使用和通信开销。#12543 由 Isaac Storch 和 Olivier Grisel 贡献。Efficiency 通过避免在内存中保留每个树的预测,使
ensemble.IsolationForest
更节省内存。#13260 由 Nicolas Goix 贡献。Efficiency
ensemble.IsolationForest
现在在预测步骤中使用数据块,从而限制了内存使用。#13283 由 Nicolas Goix 贡献。 Nicolas Goix .Efficiency
sklearn.ensemble.GradientBoostingClassifier
和sklearn.ensemble.GradientBoostingRegressor
现在将输入y
保持为float64
,以避免内部树对其进行复制。 #13524 由 Adrin Jalali 提交。Enhancement 最小化了
ensemble.AdaBoostClassifier
和ensemble.AdaBoostRegressor
中对 X 的验证 #13174 由 Christos Aridas 提交。Enhancement
ensemble.IsolationForest
现在暴露了warm_start
参数,允许迭代地向隔离森林添加树。 #13496 由 Peter Marko 提交。Fix 所有基于随机森林的模型(即
ensemble.RandomForestClassifier
,ensemble.RandomForestRegressor
,ensemble.ExtraTreesClassifier
,ensemble.ExtraTreesRegressor
,ensemble.RandomTreesEmbedding
,ensemble.GradientBoostingClassifier
, 和ensemble.GradientBoostingRegressor
)中的feature_importances_
值现在:总和为
1
在特征重要性计算中忽略所有单节点树
如果所有树都只有一个节点(即根节点),特征重要性将是一个全零数组。
#13636 和 #13620 由 Adrin Jalali 提交。
Fix 修复了
ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中的一个错误,该错误不支持将 scikit-learn 估计器作为初始估计器。还增加了对不支持样本权重的初始估计器的支持。 #12436 由 Jérémie du Boisberranger 提交,以及 #12983 由 Nicolas Hug 提交。Fix 修复了
ensemble.IsolationForest
中计算的平均路径长度输出,当输入为 0、1 或 2 时。 #13251 由 Albert Thomas 和 joshuakennethjones 提交。Fix 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误在多类分类问题中会错误地计算梯度。#12715 由 Nicolas Hug 提交。Fix 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误在早停法的验证集采样时未进行分层采样。#13164 由 Nicolas Hug 提交。Fix 修复了
ensemble.GradientBoostingClassifier
中的一个错误,该错误在多类分类器的默认初始预测中会预测类别的先验概率而不是先验概率的对数。#12983 由 Nicolas Hug 提交。Fix 修复了
ensemble.RandomForestClassifier
中的一个错误,该错误在多类多输出森林模型中,如果任何目标为字符串,predict
方法会出错。#12834 由 Elizabeth Sander 提交。Fix 修复了
ensemble.gradient_boosting.LossFunction
和ensemble.gradient_boosting.LeastSquaresError
中的一个错误,其中update_terminal_regions
的learning_rate
默认值与文档和调用函数不一致。但请注意,直接使用这些损失函数已被弃用。#6463 由 movelikeriver 提交。Fix
ensemble.partial_dependence
(以及新的版本sklearn.inspection.partial_dependence
)现在在计算部分依赖时会考虑样本权重,当梯度提升模型使用样本权重进行训练时。#13193 由 Samuel O. Ronsin 提交。API Change
ensemble.partial_dependence
和ensemble.plot_partial_dependence
现在已被弃用,取而代之的是inspection.partial_dependence
和inspection.plot_partial_dependence<sklearn.inspection.plot_partial_dependence>
。#12599 由 Trevor Stephens 和 Nicolas Hug 提交。Fix
ensemble.VotingClassifier
和ensemble.VotingRegressor
在其中一个估计器设置为None
且sample_weight
不为None
时,在fit
过程中会失败。 #13779 由 Guillaume Lemaitre 提交。API Change
ensemble.VotingClassifier
和ensemble.VotingRegressor
接受'drop'
来禁用一个估计器,除了None
之外,以与其他估计器(例如,pipeline.FeatureUnion
和compose.ColumnTransformer
)保持一致。 #13780 由 Guillaume Lemaitre 提交。
sklearn.externals
API Change 由于我们已放弃对 Python 2.7 的支持,因此弃用了
externals.six
。 #12916 由 Hanmin Qin 提交。
sklearn.feature_extraction
#
Fix 如果
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
#
Major Feature 添加了
impute.IterativeImputer
,这是一种通过循环方式将每个具有缺失值的特征建模为其他特征的函数来填补缺失值的策略。 #8478 和 #12177 由 Sergey Feldman 和 Ben Lawson 提交。IterativeImputer 的 API 是实验性的,可能会在没有任何弃用周期的情况下发生变化。要使用它们,您需要显式导入
enable_iterative_imputer
>>> from sklearn.experimental import enable_iterative_imputer # noqa >>> # 现在您可以正常从 sklearn.impute 导入 >>> from sklearn.impute import IterativeImputer
Feature
impute.SimpleImputer
和impute.IterativeImputer
新增了一个参数'add_indicator'
, 该参数简单地将一个impute.MissingIndicator
转换堆叠到 填补器的转换输出中。这允许预测估计器考虑缺失性。#12583 , #13601 由 Danylo Baibak 贡献。Fix 在
impute.MissingIndicator
中,通过在输入为稀疏且missing_values
属性 设置为 0 时抛出异常,避免隐式稠密化。#13240 由 Bartosz Telenczuk 贡献。Fix 修复了
impute.MissingIndicator
中的两个错误。首先,当X
是稀疏的,所有非零非缺失值在转换后的数据中变成了显式的 False。其次,当features='missing-only'
时,如果完全没有缺失值,所有特征都会被保留。#13562 由 Jérémie du Boisberranger 贡献。
sklearn.inspection
#
(新子包)
Feature 部分依赖图 (
inspection.plot_partial_dependence
) 现在支持任何回归器或分类器(前提是它们有predict_proba
方法)。#12599 由 Trevor Stephens 和 Nicolas Hug 贡献。
sklearn.isotonic
#
Feature 允许在
isotonic.IsotonicRegression
中使用不同的数据类型(如 float32)。 #8769 由 Vlad Niculae 贡献。
sklearn.linear_model
#
Enhancement
linear_model.Ridge
现在保留float32
和float64
数据类型。#8769 和 #11000 由 Guillaume Lemaitre 和 Joan Massich 贡献。Feature
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
现在支持弹性网络惩罚,
使用 ‘saga’ 求解器。#11646 由 Nicolas Hug 贡献。
Feature 添加了
linear_model.lars_path_gram
,这是在充分统计模式下的linear_model.lars_path
,允许用户在不提供X
和y
的情况下计算linear_model.lars_path
。#11699 由 Kuai Yu 贡献。Efficiency
linear_model.make_dataset
现在保留float32
和float64
数据类型,减少了随机梯度、SAG 和 SAGA 求解器中的内存消耗。#8769 和 #11000 由 Nelle Varoquaux 、Arthur Imbert 、Guillaume Lemaitre 和 Joan Massich 贡献。Enhancement
linear_model.LogisticRegression
现在支持当传递penalty='none'
时使用无正则化目标。这等效于使用 l2 正则化设置C=np.inf
。liblinear 求解器不支持此功能。#12860 由 Nicolas Hug 贡献。Enhancement
linear_model.Ridge
中的sparse_cg
求解器现在支持在输入为稀疏时拟合截距(即fit_intercept=True
)。#13336 由 Bartosz Telenczuk 贡献。Enhancement
Lasso
、ElasticNet
等中使用的坐标下降求解器现在在未达到所需容差的情况下完成时会发出ConvergenceWarning
。#11754 和 #13397 由 Brent Fagan 和 Adrin Jalali 贡献。Fix 修复了
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
中使用 ‘saga’ 求解器时权重在某些情况下不会正确更新的错误。#11646 由 Tom Dupre la Tour 贡献。Fix 修复了
linear_model.BayesianRidge
中的后验均值、后验协方差和返回的正则化参数。后验均值和后验协方差不是计算得到的值。 在最后一次更新正则化参数时,返回的正则化参数并非最终值。同时修复了在compute_score=True
时用于计算分数的对数边际似然公式。#12174 由 Albert Thomas 贡献。Fix 修复了
linear_model.LassoLarsIC
中的一个错误,其中用户在实例创建时输入的copy_X=False
会被fit
中的默认参数值copy_X=True
覆盖。#12972 由 Lucio Fernandez-Arjona 贡献。Fix 修复了
linear_model.LinearRegression
中的一个错误,该错误在fit_intercept=True
时,稀疏和密集情况下返回的系数和截距不一致。#13279 由 Alexandre Gramfort 贡献。Fix 修复了
linear_model.HuberRegressor
中的一个错误,当X
为布尔类型时会失效。#13328 由 Alexandre Gramfort 贡献。Fix 修复了在
n_jobs > 1
且backend="threading"
的joblib.Parallel
设置下调用saga
和sag
求解器时的性能问题,导致它们的表现比顺序情况下更差。#13389 由 Pierre Glaser 贡献。Fix 修复了
linear_model.stochastic_gradient.BaseSGDClassifier
中的一个错误,该错误在多类设置下使用多个线程进行训练时不是确定性的。#13422 由 Clément Doumouro 贡献。Fix 修复了
linear_model.ridge_regression
、linear_model.Ridge
和linear_model.RidgeClassifier
中的错误,这些错误在return_intercept=True
和solver=auto
(默认)或其他不同于sag
的求解器时导致未处理的异常。#13363 由 Bartosz Telenczuk 贡献。Fix
linear_model.ridge_regression
现在会在return_intercept=True
且求解器不同于sag
时抛出异常。之前仅发出警告。#13363 由 Bartosz Telenczuk 贡献。Fix
linear_model.ridge_regression
在solver=auto
且提供了sample_weight
时,对于稀疏输入将选择sparse_cg
求解器(之前选择了cholesky
求解器)。#13363 由 Bartosz Telenczuk 贡献。API Change 在版本 0.21 中,使用
linear_model.lars_path
时传入X=None
并传递Gram
已被弃用,并将在版本 0.23 中移除。请改用linear_model.lars_path_gram
。#11699 由 Kuai Yu 贡献。API Change
linear_model.logistic_regression_path
在版本 0.21 中已被弃用,并将在版本 0.23 中移除。#12821 由 Nicolas Hug 贡献。Fix
linear_model.RidgeCV
在使用留一交叉验证时,当fit_intercept=True
且设计矩阵为稀疏矩阵时,现在能正确拟合截距。#13350 由 Jérôme Dockès 贡献。
sklearn.manifold
#
Efficiency 使
manifold.trustworthiness
使用倒排索引而不是np.where
查找来找到输入空间中邻居的排名。这在计算大量邻居和小数据集时提高了效率。#9907 由 William de Vazelhes 贡献。
sklearn.metrics
#
Feature 添加了
metrics.max_error
指标和相应的'max_error'
回归单输出的评分器。#12232 由 Krishna Sangeeth 贡献。Feature 添加了
metrics.multilabel_confusion_matrix
,它为每个类别计算一个包含真正例、假正例、假反例和真反例计数的混淆矩阵。这有助于计算集合级别的指标,如召回率、特异性、假阳性率和漏报率。#11179 由 Shangwu Yao 和 Joel Nothman 贡献。Feature 添加了
metrics.jaccard_score
用于计算 Jaccard 相似系数。
Jaccard系数作为二元、多标签和多类任务的评估指标,具有类似于:func:metrics.f1_score
的接口。#13151 由 Gaurav Dhingra 和 Joel Nothman 贡献。
Feature 添加了
metrics.pairwise.haversine_distances
,可以通过metric='pairwise'
在metrics.pairwise_distances
和估计器中访问。(Haversine距离之前可用于最近邻计算。):pr:12568
由 Wei Xue 、Emmanuel Arias 和 Joel Nothman 贡献。Efficiency 通过使用基于线程的后端而不是基于进程的后端,当
n_jobs
> 1 时,metrics.pairwise_distances
更快。#8216 由 Pierre Glaser 和 Romuald Menuet 贡献。Efficiency 带有稀疏输入的成对曼哈顿距离现在使用随scipy提供的BLAS,而不是捆绑的BLAS。#12732 由 Jérémie du Boisberranger 贡献。
Enhancement 在
metrics.classification_report
中使用标签accuracy
而不是micro-average
以避免混淆。micro-average
仅在多标签或多类且子集类的情况下显示,因为它在其他情况下与准确度相同。#12334 由 Emmanuel Arias 、 Joel Nothman 和 Andreas Müller 贡献。Enhancement 在
metrics.homogeneity_completeness_v_measure
和metrics.v_measure_score
中添加了beta
参数,以配置同质性和完整性之间的权衡。#13607 由 Stephane Couvreur 和 Ivan Sanchez 贡献。Fix 指标
metrics.r2_score
在单个样本时退化,现在返回NaN并引发exceptions.UndefinedMetricWarning
。#12855 由 Pawel Sendyk 贡献。Fix 修复了一个错误,即
metrics.brier_score_loss
有时会 当y_true
中只有一个类别时,返回错误的结果。 #13628 由 Hanmin Qin 提交。Fix 修复了
metrics.label_ranking_average_precision_score
中的一个错误, 该错误在标签退化的情况下没有考虑 sample_weight。 #13447 由 Dan Ellis 提交。API Change
metrics.hamming_loss
中的参数labels
在版本 0.21 中已弃用, 并将在版本 0.23 中移除。#10580 由 Reshama Shaikh 和 Sandra Mitrovic 提交。Fix 函数
metrics.pairwise.euclidean_distances
以及 因此使用metric='euclidean'
的几个估计器,在float32
特征上存在数值精度问题。 精度已提高,但性能略有下降。#13554 由 @Celelibi 和 Jérémie du Boisberranger 提交。API Change
metrics.jaccard_similarity_score
已弃用,取而代之的是 更一致的metrics.jaccard_score
。前者的二进制和多类目标行为已损坏。 #13151 由 Joel Nothman 提交。
sklearn.mixture
#
Fix 修复了
mixture.BaseMixture
中的一个错误,因此基于它的估计器, 即mixture.GaussianMixture
和mixture.BayesianGaussianMixture
,其中fit_predict
和fit.predict
不一致。#13142 由 Jérémie du Boisberranger 提交。
sklearn.model_selection
#
Feature 类
GridSearchCV
和RandomizedSearchCV
现在允许 refit=callable, 以增加识别最佳估计器的灵活性。 参见 平衡模型复杂性和交叉验证得分 。 #11354 由 Wenhao Zhang 、 Joel Nothman 和 Adrin Jalali 提交。Enhancement 类
GridSearchCV
,RandomizedSearchCV
以及方法cross_val_score
,cross_val_predict
,cross_validate
现在在return_train_scores
为 True 且verbose
> 2 时打印训练分数。对于learning_curve
和validation_curve
仅后者需要。 #12613 和 #12669 由 Marc Torrellas 贡献。Enhancement 一些 CV splitter 类和
model_selection.train_test_split
现在在生成的训练集为空时抛出ValueError
。 #12861 由 Nicolas Hug 贡献。Fix 修复了一个
model_selection.StratifiedKFold
的 bug,该 bug 使得每个类的样本在相同的random_state
下被打乱,导致shuffle=True
无效。 #13124 由 Hanmin Qin 贡献。Fix 增加了
model_selection.cross_val_predict
处理多标签(以及多输出-多类)目标与predict_proba
类型方法的能力。 #8773 由 Stephen Hoover 贡献。Fix 修复了
cross_val_predict
中的一个问题,其中method="predict_proba"
在交叉验证折叠中排除某个类别时总是返回0.0
。 #13366 由 Guillaume Fournier 贡献。
sklearn.multiclass
#
Fix 修复了
multiclass.OneVsOneClassifier.decision_function
中的一个问题,其中给定样本的 decision_function 值会因 decision_function 是在单个样本上评估还是在包含相同样本的批次上评估而不同,这是由于 decision_function 中使用的缩放导致的。 #10440 由 Jonathan Ohayon 贡献。
sklearn.multioutput
#
Fix 修复了
multioutput.MultiOutputClassifier
中的一个 bug,该 bug
predict_proba
方法错误地检查了估计器对象中的predict_proba
属性。
#12222 由 Rebekah Kim 提交。
sklearn.neighbors
#
Major Feature 添加了
neighbors.NeighborhoodComponentsAnalysis
用于度量学习,实现了邻域成分分析算法。#10058 由 William de Vazelhes 和 John Chiotellis 提交。API Change
neighbors.NearestNeighbors
中的方法:kneighbors
、radius_neighbors
、kneighbors_graph
、radius_neighbors_graph
现在会在调用前未进行fit
时引发NotFittedError
,而不是AttributeError
。#12279 由 Krishna Sangeeth 提交。
sklearn.neural_network
#
Fix 修复了
neural_network.MLPClassifier
和neural_network.MLPRegressor
中的一个错误,其中选项shuffle=False
被忽略。#12582 由 Sam Waterbury 提交。Fix 修复了
neural_network.MLPClassifier
中的一个错误,其中早期停止的验证集未进行分层采样。然而,在多标签情况下,分割仍然不是分层的。#13164 由 Nicolas Hug 提交。
sklearn.pipeline
#
Feature
pipeline.Pipeline
现在可以使用索引表示法(例如my_pipeline[0:-1]
)提取步骤的子序列作为另一个 Pipeline 实例。Pipeline 也可以直接索引以提取特定步骤(例如my_pipeline['svc']
),而不是访问named_steps
。#2568 由 Joel Nothman 提交。Feature 在
pipeline.Pipeline
、compose.ColumnTransformer
和pipeline.FeatureUnion
中添加了可选参数verbose
。 以及相应的make_
辅助函数,用于显示每个步骤的进度和时间。#11364 由 Baze Petrushev 、 Karan Desai 、 Joel Nothman 和 Thomas Fan 贡献。Enhancement
pipeline.Pipeline
现在支持使用'passthrough'
作为转换器,效果与None
相同。 #11144 由 Thomas Fan 贡献。Enhancement
pipeline.Pipeline
实现了__len__
,因此len(pipeline)
返回管道中的步骤数。 #13439 由 Lakshya KD 贡献。
sklearn.preprocessing
#
Feature
preprocessing.OneHotEncoder
现在支持通过新的 drop 参数每类别丢弃一个特征。#12908 由 Drew Johnston 贡献。Efficiency
preprocessing.OneHotEncoder
和preprocessing.OrdinalEncoder
现在更高效地处理 pandas DataFrame。 #13253 由 @maikia 贡献。Efficiency 使
preprocessing.MultiLabelBinarizer
缓存类映射,而不是每次实时计算。 #12116 由 Ekaterina Krivich 和 Joel Nothman 贡献。Efficiency
preprocessing.PolynomialFeatures
现在支持作为输入的压缩稀疏行(CSR)矩阵,适用于 2 和 3 次幂。这通常比密集情况快得多,因为它随矩阵密度和扩展度(密度^度)缩放,并且比压缩稀疏列(CSC)情况快得多。 #12197 由 Andrew Nystrom 贡献。Efficiency 在密集情况下,
preprocessing.PolynomialFeatures
的速度提升。还添加了一个新的参数order
,用于进一步控制输出顺序以提高性能。#12251 由 Tom Dupre la Tour 贡献。Fix 修复了使用 float16 dtype 时
preprocessing.StandardScaler
的计算溢出问题。 #13007 由 Raffaello Baluyot 提交Fix 修复了
preprocessing.QuantileTransformer
和preprocessing.quantile_transform
中的一个错误,强制n_quantiles
最多等于n_samples
。n_quantiles
大于n_samples
的值要么是无用的,要么会导致累积分布函数估计器的错误近似。 #13333 由 Albert Thomas 提交。API Change
preprocessing.quantile_transform
中copy
的默认值将从 False 变为 True, 以使其与其他sklearn.preprocessing
中的函数默认copy
值更加一致,并防止通过原地修改X
值而产生意外的副作用。 #13459 由 Hunter McGushion 提交。
sklearn.svm
#
Fix 修复了
svm.SVC.decision_function
在decision_function_shape='ovr'
时的问题。 由于在 decision_function 中使用的缩放,给定样本的 decision_function 值会因评估是在单个样本上还是在包含相同样本的批次上而有所不同。 #10440 由 Jonathan Ohayon 提交。
sklearn.tree
#
Feature 现在可以使用
tree.plot_tree
通过 matplotlib 绘制决策树,而不依赖于dot
库, 从而移除了一个难以安装的依赖项。#8508 由 Andreas Müller 提交。Feature 现在可以使用
tree.export_text
以人类可读的文本格式导出决策树。 #6261 由Giuseppe Vettigli <JustGlowing>
提交。Feature 已向
tree.BaseDecisionTree
添加了get_n_leaves()
和get_depth()
方法, 因此所有基于它的估计器,包括tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
, 都可以使用这些方法。
#12300 由 Adrin Jalali 提交。
Fix 树和森林之前无法在
predict
中预测带有字符串标签的多输出分类目标,尽管在fit
中接受它们。#11458 由 Mitar Milutinovic 提交。Fix 修复了
tree.BaseDecisionTree
及其所有基于它的估计器(包括tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
和tree.ExtraTreeRegressor
)的一个问题,即当用户同时指定max_leaf_nodes
和max_depth
时,它们在扩展树时会超出给定的max_depth
1 层。请注意,这也影响所有使用决策树的集成方法。#12344 由 Adrin Jalali 提交。
sklearn.utils
#
Feature
utils.resample
现在接受一个stratify
参数,用于根据类别分布进行采样。#13549 由 Nicolas Hug 提交。API Change 从
utils.check_array
和utils.check_X_y
中弃用了warn_on_dtype
参数。在check_pairwise_arrays
中添加了显式的数据类型转换警告,如果传递的metric
是成对布尔度量。#13382 由 Prathmesh Savale 提交。
多个模块#
Major Feature 所有估计器的
__repr__()
方法(在调用print(estimator)
时使用)已完全重写,基于 Python 的漂亮打印标准库。默认情况下打印所有参数,但可以通过sklearn.set_config
中的print_changed_only
选项进行更改。#11705 由 Nicolas Hug 提交。Major Feature 添加估计器标签:这些是估计器的注解,允许程序化检查它们的功能,如稀疏矩阵支持、支持的输出类型和支持的方法。估计器
标签还决定了在调用 check_estimator
时对估计器运行的测试。更多信息请参阅 用户指南 。#8022 由 Andreas Müller 贡献。
Efficiency 在多个估计器中将数组转换为不同数据类型时,避免了内存复制。#11973 由 Roman Yurchak 贡献。
Fix 修复了
our_rand_r
辅助函数实现中的一个错误,该错误在不同平台上行为不一致。#13422 由 Madhura Parikh 和 Clément Doumouro 贡献。
杂项#
Enhancement Joblib 不再嵌入在 scikit-learn 中,而是成为了一个依赖项。最低支持版本是 joblib 0.11,但强烈建议使用版本 >= 0.13。#13531 由 Roman Yurchak 贡献。
估计器检查的变更#
这些变更主要影响库的开发者。
向
check_estimator
添加了check_fit_idempotent
,该检查确保当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, ^__^