版本 1.0#
有关此版本主要亮点的简短描述,请参阅scikit-learn 1.0 版本亮点。
更新日志图例
重大功能 以前无法实现的大功能。
功能 以前无法实现的功能。
效率提升 现有功能现在可能不需要那么多计算或内存。
增强 一般性的小改进。
修复 以前无法按文档或合理预期工作的问题现在应该可以了。
API 变更 未来你需要更改代码才能达到相同的效果;或者未来某个功能将被移除。
版本 1.0.2#
2021 年 12 月
修复
cluster.Birch、feature_selection.RFECV、ensemble.RandomForestRegressor、ensemble.RandomForestClassifier、ensemble.GradientBoostingRegressor和ensemble.GradientBoostingClassifier在拟合 pandas DataFrame 时不再引发警告。由 Thomas Fan 提交的 #21578。
更新日志#
sklearn.cluster#
修复 修复了
cluster.SpectralClustering中的无限循环问题,通过将迭代计数器从 try 块移至 except 块。由 Tyler Martin 提交的 #21271。
sklearn.datasets#
修复
datasets.fetch_openml现在是线程安全的。数据首先下载到临时子文件夹,然后重命名。由 Siavash Rezazadeh 提交的 #21833。
sklearn.decomposition#
修复 修复了
decomposition.DictionaryLearning、decomposition.MiniBatchDictionaryLearning、decomposition.SparsePCA和decomposition.MiniBatchSparsePCA目标函数的约束,使其为凸且与参考文章匹配。由 Jérémie du Boisberranger 提交的 #19210。
sklearn.ensemble#
修复
ensemble.RandomForestClassifier、ensemble.RandomForestRegressor、ensemble.ExtraTreesClassifier、ensemble.ExtraTreesRegressor和ensemble.RandomTreesEmbedding在bootstrap=False且max_samples不为None时,现在会引发ValueError。由 Haoyin Xu 提交的 #21295。修复 解决了
ensemble.GradientBoostingClassifier中的一个错误,即指数损失计算的是正梯度而不是负梯度。由 Guillaume Lemaitre 提交的 #22050。
sklearn.feature_selection#
修复 修复了
feature_selection.SelectFromModel,改进了对未设置feature_names_in_的基本估计器的支持。由 Thomas Fan 提交的 #21991。
sklearn.impute#
修复 修复了
linear_model.RidgeClassifierCV中的一个错误,即predict方法对从decision_function获得的分数执行argmax,而不是返回多标签指示矩阵。由 Guillaume Lemaitre 提交的 #19869。
sklearn.linear_model#
修复
linear_model.LassoLarsIC现在正确计算 AIC 和 BIC。当n_features > n_samples且未提供噪声方差时,现在会引发错误。由 Guillaume Lemaitre 和 Andrés Babino 提交的 #21481。
sklearn.manifold#
修复 修复了当使用预计算的稠密距离矩阵拟合
manifold.Isomap时,如果邻居图有多个不连通分量,会引发不必要的错误的问题。由 Tom Dupre la Tour 提交的 #21915。
sklearn.metrics#
修复 所有
sklearn.metrics.DistanceMetric子类现在都正确支持只读缓冲区属性。这修复了 1.0.0 相对于 0.24.2 引入的回归。由 Julien Jerphanion 提交的 #21694。修复 所有
sklearn.metrics.MinkowskiDistance现在都接受一个权重参数,这使得编写在 scipy 1.8 和早期版本中行为一致的代码成为可能。反过来,这意味着所有基于邻居的估计器(除了使用algorithm="kd_tree"的估计器)现在都接受带有metric="minkowski"的权重参数,以产生始终与scipy.spatial.distance.cdist一致的结果。由 Olivier Grisel 提交的 #21741。
sklearn.multiclass#
修复
multiclass.OneVsRestClassifier.predict_proba在拟合常量整数目标时不再报错。由 Thomas Fan 提交的 #21871。
sklearn.neighbors#
修复
neighbors.KDTree和neighbors.BallTree正确支持只读缓冲区属性。由 Thomas Fan 提交的 #21845。
sklearn.preprocessing#
修复 修复了与 NumPy 1.22 在
preprocessing.OneHotEncoder中的兼容性错误。由 Thomas Fan 提交的 #21517。
sklearn.tree#
修复 防止
tree.plot_tree绘制超出图形边界。由 Thomas Fan 提交的 #21917。修复 支持加载决策树模型的 pickle 文件,即使该 pickle 文件是在不同位数平台上生成的。一个典型的例子是在 64 位机器上训练和 pickle 模型,然后在 32 位机器上加载模型进行预测。由 Loïc Estève 提交的 #21552。
sklearn.utils#
修复
utils.estimator_html_repr现在对生成的 HTML 中的所有估计器描述进行转义。由 Aurélien Geron 提交的 #21493。
版本 1.0.1#
2021 年 10 月
修复的模型#
修复 以下类中的非拟合方法在拟合具有有效特征名称的 DataFrame 时不再引发 UserWarning:
covariance.EllipticEnvelope、ensemble.IsolationForest、ensemble.AdaBoostClassifier、neighbors.KNeighborsClassifier、neighbors.KNeighborsRegressor、neighbors.RadiusNeighborsClassifier、neighbors.RadiusNeighborsRegressor。由 Thomas Fan 提交的 #21199。
sklearn.calibration#
修复 修复了
calibration.CalibratedClassifierCV,使其在ensemble=False时,计算基本估计器预测时考虑sample_weight。由 Julien Bohné 提交的 #20638。修复 修复了
calibration.CalibratedClassifierCV在method="sigmoid"时,计算贝叶斯先验时忽略sample_weight的错误。由 Guillaume Lemaitre 提交的 #21179。
sklearn.cluster#
修复 修复了
cluster.KMeans中的一个错误,确保了稀疏和密集输入之间的可重现性和等效性。由 Jérémie du Boisberranger 提交的 #21195。
sklearn.ensemble#
修复 修复了一个错误,该错误在极少数情况下可能导致
ensemble.HistGradientBoostingClassifier和ensemble.HistGradientBoostingRegressor出现段错误。由 Christian Lorentzen 提交的 #21130。
sklearn.gaussian_process#
修复 在
sklearn.gaussian_process.GaussianProcessRegressor中,通过多目标正确计算y_std,从而在多目标场景中实现适当的标准化。由 Patrick de C. T. R. Ferreira 提交的 #20761。
sklearn.feature_extraction#
效率 修复了 1.0.0 版本中
feature_extraction.text.CountVectorizer的transform方法中引入的效率回归,该方法不再检查提供的词汇表中的大写字符。由 Jérémie du Boisberranger 提交的 #21251。修复 修复了
feature_extraction.text.CountVectorizer和feature_extraction.text.TfidfVectorizer中的一个错误,通过在“min_idf”或“max_idf”是大于 1 的浮点数时引发错误。由 Alek Lefebvre 提交的 #20752。
sklearn.linear_model#
修复 提高了
linear_model.LassoLars在不同 openblas 版本下的稳定性。由 Thomas Fan 提交的 #21340。修复
linear_model.LogisticRegression现在在求解器不支持带有 int64 索引的稀疏矩阵时会引发更好的错误消息。由 Tom Dupre la Tour 提交的 #21093。
sklearn.neighbors#
修复
neighbors.KNeighborsClassifier、neighbors.KNeighborsRegressor、neighbors.RadiusNeighborsClassifier、neighbors.RadiusNeighborsRegressor在metric="precomputed"且在fit、kneighbors和radius_neighbors方法中遇到bsr和dok稀疏矩阵时会引发错误,原因在于bsr和dok稀疏图 格式中显式零的处理。由 Thomas Fan 提交的 #21199。
sklearn.pipeline#
修复
pipeline.Pipeline.get_feature_names_out正确地将特征名称从管道的一个步骤传递到下一个步骤。由 Thomas Fan 提交的 #21351。
sklearn.svm#
修复
svm.SVC和svm.SVR检查其内部表示中的不一致性,并引发错误而不是段错误。此修复还解决了 CVE-2020-28975。由 Thomas Fan 提交的 #21336。
sklearn.utils#
增强
utils.validation._check_sample_weight可以对样本权重执行非负性检查。可以使用 only_non_negative 布尔参数开启此功能。检查非负权重的估计器已更新:linear_model.LinearRegression(此处之前的错误消息具有误导性)、ensemble.AdaBoostClassifier、ensemble.AdaBoostRegressor、neighbors.KernelDensity。由 Guillaume Lemaitre 和 András Simon 提交的 #20880。修复 解决了
sklearn.utils.metaestimators.if_delegate_has_method中的一个错误,其中对属性的底层检查不适用于 NumPy 数组。由 Zahlii 提交的 #21145。
杂项#
修复 在没有特征名称的数据集上拟合估计器,并且之前在有特征名称的数据集上拟合过,不再保留存储在
feature_names_in_属性中的旧特征名称。由 Jérémie du Boisberranger 提交的 #21389。
版本 1.0.0#
2021 年 9 月
最低依赖项#
scikit-learn 1.0.0 版本需要 python 3.7+、numpy 1.14.6+ 和 scipy 1.1.0+。可选的最低依赖项是 matplotlib 2.2.2+。
强制使用仅限关键字参数#
为了促进库的清晰和明确使用,大多数构造函数和函数参数现在必须作为关键字参数传递(即使用 param=value 语法),而不是位置参数。如果仅限关键字参数作为位置参数使用,则现在会引发 TypeError。由 Joel Nothman、Adrin Jalali、Thomas Fan、Nicolas Hug 和 Tom Dupre la Tour 提交的 #15005 #20002。有关更多详细信息,请参阅 SLEP009。
变更模型#
以下估计器和函数在用相同数据和参数拟合时,可能会产生与上一个版本不同的模型。这通常是由于建模逻辑(bug 修复或增强)或随机采样过程的更改所致。
修复
manifold.TSNE现在避免了亲和力矩阵计算期间的数值下溢问题。修复
manifold.Isomap现在沿着一些最小距离对连接邻居图的不连通分量,而不是将每个无限距离更改为零。修复
tree.DecisionTreeClassifier和tree.DecisionTreeRegressor的分裂准则可能会受到处理舍入误差的修复的影响。以前可能会出现一些额外的虚假分裂。修复
model_selection.train_test_split带有stratify参数和model_selection.StratifiedShuffleSplit可能会导致略有不同的结果。
详细信息列在下面的更改日志中。
(虽然我们正试图通过提供此信息来更好地告知用户,但我们不能保证此列表完整。)
更新日志#
API 更改 通过
loss和criterion参数使用平方误差的选项变得更加一致。首选方式是将其值设置为"squared_error"。旧的选项名称仍然有效,生成相同的模型,但已被弃用,并将在 1.2 版本中删除。由 Christian Lorentzen 提交的 #19310。对于
ensemble.ExtraTreesRegressor,criterion="mse"已弃用,请改用"squared_error",它现在是默认值。对于
ensemble.GradientBoostingRegressor,loss="ls"已弃用,请改用"squared_error",它现在是默认值。对于
ensemble.RandomForestRegressor,criterion="mse"已弃用,请改用"squared_error",它现在是默认值。对于
ensemble.HistGradientBoostingRegressor,loss="least_squares"已弃用,请改用"squared_error",它现在是默认值。对于
linear_model.RANSACRegressor,loss="squared_loss"已弃用,请改用"squared_error"。对于
linear_model.SGDRegressor,loss="squared_loss"已弃用,请改用"squared_error",它现在是默认值。对于
tree.DecisionTreeRegressor,criterion="mse"已弃用,请改用"squared_error",它现在是默认值。对于
tree.ExtraTreeRegressor,criterion="mse"已弃用,请改用"squared_error",它现在是默认值。
API 更改 通过
loss和criterion参数使用绝对误差的选项变得更加一致。首选方式是将其值设置为"absolute_error"。旧的选项名称仍然有效,生成相同的模型,但已被弃用,并将在 1.2 版本中删除。由 Christian Lorentzen 提交的 #19733。对于
ensemble.ExtraTreesRegressor,criterion="mae"已弃用,请改用"absolute_error"。对于
ensemble.GradientBoostingRegressor,loss="lad"已弃用,请改用"absolute_error"。对于
ensemble.RandomForestRegressor,criterion="mae"已弃用,请改用"absolute_error"。对于
ensemble.HistGradientBoostingRegressor,loss="least_absolute_deviation"已弃用,请改用"absolute_error"。对于
linear_model.RANSACRegressor,loss="absolute_loss"已弃用,请改用"absolute_error",它现在是默认值。对于
tree.DecisionTreeRegressor,criterion="mae"已弃用,请改用"absolute_error"。对于
tree.ExtraTreeRegressor,criterion="mae"已弃用,请改用"absolute_error"。
API 更改
np.matrix的使用在 1.0 中已弃用,并将在 1.2 中引发TypeError。由 Thomas Fan 提交的 #20165。API 更改 get_feature_names_out 已添加到转换器 API 中,用于获取输出特征的名称。
get_feature_names已被弃用。由 Thomas Fan 提交的 #18444。API 更改 所有估计器在拟合 Pandas Dataframe 时都会存储
feature_names_in_。这些特征名称会与非fit方法(例如transform)中看到的名称进行比较,如果不一致,则会引发FutureWarning,另请参见 scikit-learn 1.0 版本亮点。这些FutureWarning将在 1.2 中变为ValueError。由 Thomas Fan 提交的 #18010。
sklearn.base#
修复
config_context现在是线程安全的。由 Thomas Fan 提交的 #18736。
sklearn.calibration#
特性 添加了
calibration.CalibrationDisplay来绘制校准曲线。由 Lucy Liu 提交的 #17443。修复
calibration.CalibratedClassifierCV的predict和predict_proba方法现在可以正确地用于预拟合的管道。由 Alek Lefebvre 提交的 #19641。修复 修复了在
calibration.CalibratedClassifierCV中使用ensemble.VotingClassifier作为base_estimator时发生的错误。由 Clément Fauchereau 提交的 #20087。
sklearn.cluster#
效率
cluster.KMeans和cluster.MiniBatchKMeans的"k-means++"初始化现在更快,特别是在多核设置中。由 Jon Crall 和 Jérémie du Boisberranger 提交的 #19002。效率 使用
algorithm='elkan'的cluster.KMeans在多核设置中现在更快。由 Yusuke Nagasaka 提交的 #19052。效率
cluster.MiniBatchKMeans在多核设置中现在更快。由 Jérémie du Boisberranger 提交的 #17622。效率
cluster.OPTICS现在可以使用memory参数缓存树计算的输出。由 Frankie Robertson 提交的 #19024。增强
cluster.AffinityPropagation的predict和fit_predict方法现在接受稀疏数据类型作为输入数据。由 Venkatachalam Natchiappan 提交的 #20117。修复 修复了
cluster.MiniBatchKMeans中的一个错误,当输入是稀疏时,样本权重被部分忽略。由 Jérémie du Boisberranger 提交的 #17622。修复 改进了
cluster.MiniBatchKMeans中基于中心变化的收敛检测,该检测几乎从未实现过。由 Jérémie du Boisberranger 提交的 #17622。修复
cluster.AgglomerativeClustering现在支持只读内存映射数据集。由 Julien Jerphanion 提交的 #19883。修复 当连接性和亲和度都预计算且连通分量数大于 1 时,
cluster.AgglomerativeClustering正确连接分量。由 Thomas Fan 提交的 #20597。修复
cluster.FeatureAgglomeration不再在fit函数中接受**paramskwarg,从而产生更简洁的错误消息。由 Adam Li 提交的 #20899。修复 修复了
cluster.KMeans中的一个错误,确保了稀疏和密集输入之间的可重现性和等效性。由 Jérémie du Boisberranger 提交的 #20200。API 更改
cluster.Birch属性fit_和partial_fit_已弃用,并将在 1.2 版本中删除。由 Thomas Fan 提交的 #19297。API 更改
cluster.MiniBatchKMeans的batch_size参数的默认值已从 100 更改为 1024,原因在于效率考虑。cluster.MiniBatchKMeans的n_iter_属性现在报告已启动的 epoch 数,n_steps_属性报告已处理的 mini batch 数。由 Jérémie du Boisberranger 提交的 #17622。API 更改
cluster.spectral_clustering在传递np.matrix时会引发改进的错误。由 Thomas Fan 提交的 #20560。
sklearn.compose#
增强
compose.ColumnTransformer现在将每个转换器的输出记录在output_indices_中。由 Luca Bittarello 提交的 #18393。增强
compose.ColumnTransformer现在允许 DataFrame 输入在transform中更改其列的顺序。此外,如果remainder='drop',则在转换中不再需要已删除的列,并且将忽略额外的列。由 Thomas Fan 提交的 #19263。增强 将
**predict_params关键字参数添加到compose.TransformedTargetRegressor.predict,该参数将关键字参数传递给回归器。由 Ricardo 提交的 #19244。修复
compose.ColumnTransformer.get_feature_names支持其任何转换器返回的非字符串特征名称。但是,请注意get_feature_names已弃用,请改用get_feature_names_out。由 Albert Villanova del Moral 和 Alonso Silva Allende 提交的 #18459。修复
compose.TransformedTargetRegressor现在接受带有适当转换器的 nD 目标。由 Oras Phongpanagnam 提交的 #18898。API 更改 将
verbose_feature_names_out添加到compose.ColumnTransformer。此标志控制 get_feature_names_out 中特征名称输出的前缀。由 Thomas Fan 提交的 #18444 和 #21080。
sklearn.covariance#
修复 添加了对
covariance.ledoit_wolf和covariance.ledoit_wolf_shrinkage的数组检查。由 Hugo Defois 提交的 #20416。API 更改 弃用了
cv_results_中的以下键:'mean_score'、'std_score'和'split(k)_score',转而使用'mean_test_score'、'std_test_score'和'split(k)_test_score'。由 Thomas Fan 提交的 #20583。
sklearn.datasets#
增强
datasets.fetch_openml现在在返回 pandas dataframe 时支持带有缺失值的类别。由 Thomas Fan、Amanda Dsouza 和 EL-ATEIF Sara 提交的 #19365。增强
datasets.fetch_kddcup99在缓存文件无效时会引发更好的消息。由 Thomas Fan 提交的 #19669。增强 将与资源文件 I/O 相关的
__file__用法替换为importlib.resources,以避免假定这些资源文件(例如iris.csv)已存在于文件系统上,并以此启用与PyOxidizer等工具的兼容性。由 Jack Liu 提交的 #20297。修复 缩短了 openml 测试中的数据文件名,以更好地支持在 Windows 上安装及其默认 260 字符的文件名限制。由 Thomas Fan 提交的 #20209。
修复 当
return_X_y=True和as_frame=True时,datasets.fetch_kddcup99返回数据帧。由 Thomas Fan 提交的 #19011。API 更改
datasets.load_boston在 1.0 中已弃用,并将在 1.2 中删除。提供了加载类似数据集的替代代码片段。详情请参阅函数的 docstring。由 Guillaume Lemaitre 提交的 #20729。
sklearn.decomposition#
增强 为
decomposition.KernelPCA添加了一个新的近似求解器(随机 SVD,可通过eigen_solver='randomized'获得)。当样本数量远大于所需分量数量时,这显著加快了计算速度。由 Sylvain Marié 提交的 #12069。修复 修复了聚类布尔数据时多个数据转换警告不正确的问题。由 Surya Prakash 提交的 #19046。
修复 修复了
decomposition.dict_learning(由decomposition.DictionaryLearning使用)中的一个错误,以确保输出的确定性。通过翻转用于初始化代码的 SVD 输出的符号来实现。由 Bruno Charron 提交的 #18433。修复 修复了
decomposition.MiniBatchDictionaryLearning、decomposition.MiniBatchSparsePCA和decomposition.dict_learning_online中的一个错误,其中字典的更新不正确。由 Jérémie du Boisberranger 提交的 #19198。修复 修复了
decomposition.DictionaryLearning、decomposition.SparsePCA、decomposition.MiniBatchDictionaryLearning、decomposition.MiniBatchSparsePCA、decomposition.dict_learning和decomposition.dict_learning_online中的一个错误,其中字典更新期间未使用的原子重新启动未按预期工作。由 Jérémie du Boisberranger 提交的 #19198。API 更改 在
decomposition.DictionaryLearning、decomposition.MiniBatchDictionaryLearning、decomposition.dict_learning和decomposition.dict_learning_online中,从 1.2 版本开始,transform_alpha将默认等于alpha,而不是 1.0。由 Benoît Malézieux 提交的 #19159。API 更改 在
decomposition.KernelPCA中重命名变量名以提高可读性。lambdas_和alphas_分别重命名为eigenvalues_和eigenvectors_。lambdas_和alphas_已弃用,并将在 1.2 中删除。由 Kei Ishikawa 提交的 #19908。API 更改
decomposition.NMF和decomposition.non_negative_factorization的alpha和regularization参数已弃用,并将在 1.2 中删除。请改用新参数alpha_W和alpha_H。由 Jérémie du Boisberranger 提交的 #20512。
sklearn.dummy#
API 更改
dummy.DummyRegressor和dummy.DummyRegressor中的属性n_features_in_已弃用,并将在 1.2 中删除。由 Thomas Fan 提交的 #20960。
sklearn.ensemble#
增强
HistGradientBoostingClassifier和HistGradientBoostingRegressor在决定 OpenMP 使用的线程数时考虑 cgroups 配额。这避免了在 Docker 容器中使用这些类时因过度订阅造成的性能问题。由 Thomas Fan 提交的 #20477。增强
HistGradientBoostingClassifier和HistGradientBoostingRegressor不再是实验性的。它们现在被认为是稳定的,并受所有其他估计器相同的弃用周期的约束。由 Nicolas Hug 提交的 #19799。增强 改进了
ensemble.StackingClassifier和ensemble.StackingRegressor的 HTML 渲染。由 Thomas Fan 提交的 #19564。增强 为
ensemble.RandomForestRegressor添加了 Poisson 准则。由 Brian Sun 提交的 #19836。修复 不允许在
ensemble.RandomForestClassifier和ensemble.ExtraTreesClassifier中计算袋外 (OOB) 分数与多类多输出目标,因为 scikit-learn 不提供任何支持此类目标的指标。进行了额外的私有重构。由 Guillaume Lemaitre 提交的 #19162。修复 提高了
ensemble.AdaBoostClassifier和ensemble.AdaBoostRegressor中权重增强的数值精度,以避免下溢。 #10096 由 Fenil Suchak 提交。修复 修复了
ensemble.RandomForestClassifier和ensemble.RandomForestRegressor中参数max_samples的范围为(0.0, 1.0]的问题,其中max_samples=1.0被解释为使用所有n_samples进行引导。 #20159 由 @murata-yu 提交。修复 修复了
ensemble.AdaBoostClassifier和ensemble.AdaBoostRegressor中的一个错误,即sample_weight参数在fit期间被覆盖。 #20534 由 Guillaume Lemaitre 提交。API 变更 移除了
ensemble.HistGradientBoostingClassifier和ensemble.HistGradientBoostingRegressor中的tol=None选项。请使用tol=0来获得相同的行为。 #19296 由 Thomas Fan 提交。
sklearn.feature_extraction#
修复 修复了
feature_extraction.text.HashingVectorizer中的一个错误,其中某些输入字符串会在转换后的数据中导致负索引。 #19035 由 Liu Yu 提交。修复 修复了
feature_extraction.DictVectorizer中的一个错误,通过对不支持的值类型引发错误。 #19520 由 Jeff Zhao 提交。修复 修复了
feature_extraction.image.img_to_graph和feature_extraction.image.grid_to_graph中的一个错误,即单例连通分量没有得到正确处理,导致错误的顶点索引。 #18964 由 Bertrand Thirion 提交。修复 在
feature_extraction.text.CountVectorizer中使用lowercase=True时,如果词汇表条目中包含大写字符,则会引发警告,以避免结果特征向量中出现静默缺失。 #19401 由 Zito Relova 提交。
sklearn.feature_selection#
新功能
feature_selection.r_regression计算特征与目标之间的 Pearson R 相关系数。 #17169 由 Dmytro Lituiev 和 Julien Jerphanion 提交。增强
feature_selection.RFE.fit接受额外的估计器参数,这些参数直接传递给估计器的fit方法。 #20380 由 Iván Pulido、Felipe Bidu、Gil Rutter 和 Adrin Jalali 提交。修复 修复了
isotonic.isotonic_regression中的一个错误,即用户传入的sample_weight在fit期间被覆盖。 #20515 由 Carsten Allefeld 提交。修复 更改
feature_selection.SequentialFeatureSelector以允许无监督建模,这样fit签名就不需要进行任何y验证,并允许y=None。 #19568 由 Shyam Desai 提交。API 变更 当方差阈值为负时,在
feature_selection.VarianceThreshold中引发错误。 #20207 由 Tomohiro Endo 提交。API 变更 在
feature_selection.RFECV中,弃用grid_scores_,转而使用cv_results_中的拆分分数。grid_scores_将在 1.2 版本中移除。 #20161 由 Shuhei Kayawari 和 @arka204 提交。
sklearn.inspection#
增强 在
inspection.permutation_importance中添加max_samples参数。它允许抽取样本子集来计算排列重要性。这对于在大型数据集上评估特征重要性时保持方法可行性很有用。 #20431 由 Oliver Pfaffel 提交。增强 在偏依赖图
inspection.plot_partial_dependence和inspection.PartialDependenceDisplay.plot中添加 kwargs,以单独格式化 ICE 和 PD 线。 #19428 由 Mehdi Hamoumi 提交。修复 允许将多个评分器作为输入传递给
inspection.permutation_importance。 #19411 由 Simona Maggio 提交。API 变更
inspection.PartialDependenceDisplay公开了一个类方法:from_estimator。inspection.plot_partial_dependence已被弃用,转而使用该类方法,并将于 1.2 版本中移除。 #20959 由 Thomas Fan 提交。
sklearn.kernel_approximation#
修复 修复了
kernel_approximation.Nystroem中的一个错误,其中属性component_indices_未与用于生成近似核的样本索引子集对应。 #20554 由 Xiangyin Kong 提交。
sklearn.linear_model#
重大功能 添加了
linear_model.QuantileRegressor,它实现了带 L1 惩罚的线性分位数回归。 #9978 由 David Dale 和 Christian Lorentzen 提交。新功能 新的
linear_model.SGDOneClassSVM提供了线性 One-Class SVM 的 SGD 实现。结合核近似技术,此实现近似了核化 One Class SVM 的解,同时受益于样本数量的线性复杂度。 #10027 由 Albert Thomas 提交。新功能 添加了
sample_weight参数到linear_model.LassoCV和linear_model.ElasticNetCV。 #16449 由 Christian Lorentzen 提交。新功能 添加了新的求解器
lbfgs(可用solver="lbfgs") 和positive参数到linear_model.Ridge。当positive设置为True时,强制系数为正(仅由lbfgs支持)。 #20231 由 Toshihiro Nakae 提交。效率 在使用
solver='newton-cg'和multi_class!='multinomial'时,linear_model.LogisticRegression的密集矩阵实现已得到优化。 #19571 由 Julien Jerphanion 提交。增强
fit方法在linear_model.Lars、linear_model.LassoLars、linear_model.LassoLars、linear_model.LarsCV和linear_model.LassoLarsCV中保留 numpy.float32 的 dtype。 #20155 由 Takeshi Oura 提交。增强 验证通过
precompute参数传递给线性模型的用户提供的 Gram 矩阵。 #19004 由 Adam Midvidy 提交。修复
linear_model.ElasticNet.fit不再原地修改sample_weight。 #19055 由 Thomas Fan 提交。修复
linear_model.Lasso和linear_model.ElasticNet不再具有与其目标不对应的dual_gap_。 #19172 由 Mathurin Massias 提交。修复 当线性模型中
normalize=True时,sample_weight在特征中心化和特征缩放方面都已得到充分考虑。 #19426 由 Alexandre Gramfort 和 Maria Telenczuk 提交。修复 对于
linear_model.RANSACRegressor,残差等于residual_threshold的点现在被视为内点。这允许在residual_threshold=0时在某些数据集上完美拟合模型。 #19499 由 Gregory Strubel 提交。修复 #19616 修复了
linear_model.Ridge的样本权重不变性问题,由 Oliver Grisel 和 Christian Lorentzen 提交。修复
linear_model.enet_path和linear_model.lasso_path中的字典params应只包含坐标下降求解器的参数。否则,将引发错误。 #19391 由 Shao Yang Hong 提交。API 变更 在
linear_model.RANSACRegressor中发出警告,从 1.2 版本开始,对于linear_model.LinearRegression以外的模型,需要显式设置min_samples。 #19390 由 Shao Yang Hong 提交。API 变更 :
linear_model.LinearRegression的参数normalize已被弃用,并将在 1.2 版本中移除。弃用此参数的原因:如果fit_intercept设置为 False,则normalize参数不起作用,因此被认为具有混淆性。已弃用的LinearModel(normalize=True)的行为可以通过Pipeline重现,其中LinearModel是LinearRegression、Ridge、RidgeClassifier、RidgeCV或RidgeClassifierCV,如下所示:make_pipeline(StandardScaler(with_mean=False), LinearModel())。LinearRegression中的normalize参数已在 #17743 中被 Maria Telenczuk 和 Alexandre Gramfort 弃用。对于Ridge、RidgeClassifier、RidgeCV和RidgeClassifierCV,在 #17772 中也一样,由 Maria Telenczuk 和 Alexandre Gramfort 提交。对于BayesianRidge、ARDRegression,在 #17746 中也一样,由 Maria Telenczuk 提交。对于Lasso、LassoCV、ElasticNet、ElasticNetCV、MultiTaskLasso、MultiTaskLassoCV、MultiTaskElasticNet、MultiTaskElasticNetCV,在 #17785 中也一样,由 Maria Telenczuk 和 Alexandre Gramfort 提交。API 变更
OrthogonalMatchingPursuit和OrthogonalMatchingPursuitCV的normalize参数将在 1.2 版本中默认为 False,并将在 1.4 版本中移除。 #17750 由 Maria Telenczuk 和 Alexandre Gramfort 提交。对于Lars、LarsCV、LassoLars、LassoLarsCV、LassoLarsIC,在 #17769 中也一样,由 Maria Telenczuk 和 Alexandre Gramfort 提交。API 变更 针对以下符合 scikit-learn 约定的估计器,关键字验证已从
__init__和set_params移至fit:SGDClassifier、SGDRegressor、SGDOneClassSVM、PassiveAggressiveClassifier和PassiveAggressiveRegressor。 #20683 由 Guillaume Lemaitre 提交。
sklearn.manifold#
增强 在
manifold.TSNE中实现了'auto'启发式学习率。它将在 1.2 版本中成为默认值。默认初始化将在 1.2 版本中更改为pca。PCA 初始化将在 1.2 版本中缩放到标准差为 1e-4。 #19491 由 Dmitry Kobak 提交。修复 更改数值精度以防止
manifold.TSNE在亲和矩阵计算过程中出现下溢问题。 #19472 由 Dmitry Kobak 提交。修复
manifold.Isomap现在使用scipy.sparse.csgraph.shortest_path计算图最短路径。它还沿着一些最小距离对连接邻居图的断开分量,而不是将所有无限距离更改为零。 #20531 由 Roman Yurchak 和 Tom Dupre la Tour 提交。修复 降低
manifold.spectral_embedding中 lobpcg 调用的默认数值容差,以防止数值不稳定。 #21194 由 Andrew Knyazev 提交。
sklearn.metrics#
新功能
metrics.mean_pinball_loss公开了分位数回归的弹球损失。 #19415 由 Xavier Dupré 和 Oliver Grisel 提交。新功能
metrics.d2_tweedie_score计算带幂参数power的 Tweedie 偏差的 D^2 回归分数。这是r2_score的推广,可解释为 Tweedie 偏差解释的百分比。 #17036 由 Christian Lorentzen 提交。新功能
metrics.mean_squared_log_error现在支持squared=False。 #20326 由 Uttam kumar 提交。效率 当标签是整数时,
metrics.confusion_matrix的速度得到提高。 #9843 由 Jon Crall 提交。增强 修复了
metrics.hinge_loss中的一个错误,当pred_decision是一维而却是多类分类时,或者当pred_decision参数与labels参数不一致时,会引发错误。 #19643 由 Pierre Attard 提交。修复
metrics.ConfusionMatrixDisplay.plot使用正确的颜色图最大值。 #19784 由 Thomas Fan 提交。修复 样本权重为零的样本不会影响
metrics.det_curve、metrics.precision_recall_curve和metrics.roc_curve的结果。 #18328 由 Albert Villanova del Moral 和 Alonso Silva Allende 提交。修复 避免在
metrics.adjusted_rand_score中因数据量过大而导致过早溢出。 #20312 由 Divyanshu Deoli 提交。API 变更
metrics.ConfusionMatrixDisplay公开了两个类方法from_estimator和from_predictions,允许使用估计器或预测结果创建混淆矩阵图。metrics.plot_confusion_matrix已被弃用,转而使用这两个类方法,并将于 1.2 版本中移除。 #18543 由 Guillaume Lemaitre 提交。API 变更
metrics.PrecisionRecallDisplay公开了两个类方法from_estimator和from_predictions,允许使用估计器或预测结果创建精确召回曲线。metrics.plot_precision_recall_curve已被弃用,转而使用这两个类方法,并将于 1.2 版本中移除。 #20552 由 Guillaume Lemaitre 提交。API 变更
metrics.DetCurveDisplay公开了两个类方法from_estimator和from_predictions,允许使用估计器或预测结果创建混淆矩阵图。metrics.plot_det_curve已被弃用,转而使用这两个类方法,并将于 1.2 版本中移除。 #19278 由 Guillaume Lemaitre 提交。
sklearn.mixture#
修复 确保在
mixture.GaussianMixture和mixture.BayesianGaussianMixture发散的情况下,最佳参数得到适当设置。 #20030 由 Tingshan Liu 和 Benjamin Pedigo 提交。
sklearn.model_selection#
新功能 添加了
model_selection.StratifiedGroupKFold,它结合了model_selection.StratifiedKFold和model_selection.GroupKFold,提供了在每个拆分中保留类别分布同时将每个组保持在单个拆分中的能力。 #18649 由 Leandro Hermida 和 Rodion Martynov 提交。增强 交叉验证中,每个拆分拟合失败时,主进程只警告一次。 #20619 由 Loïc Estève 提交。
增强
model_selection.BaseShuffleSplit基类现在是公共的。 #20056 由 @pabloduque0 提交。修复 避免在
model_selection.train_test_split中过早溢出。 #20904 由 Tomasz Jakubek 提交。
sklearn.naive_bayes#
修复 离散朴素贝叶斯分类器(
naive_bayes.BernoulliNB、naive_bayes.CategoricalNB、naive_bayes.ComplementNB和naive_bayes.MultinomialNB)的fit和partial_fit方法现在正确处理训练集中单个类别的退化情况。 #18925 由 David Poznik 提交。API 变更
naive_bayes.GaussianNB中的属性sigma_已被弃用,并将于 1.2 版本中移除。请使用var_替代。 #18842 由 Hong Shao Yang 提交。
sklearn.neighbors#
增强
neighbors.KDTree和neighbors.BallTree的创建已得到改进,其最坏情况时间复杂度从 \(\mathcal{O}(n^2)\) 提高到 \(\mathcal{O}(n)\)。 #19473 由 jiefangxuanyan 和 Julien Jerphanion 提交。修复
neighbors.DistanceMetric子类现在支持只读内存映射数据集。 #19883 由 Julien Jerphanion 提交。修复
neighbors.NearestNeighbors、neighbors.KNeighborsClassifier、neighbors.RadiusNeighborsClassifier、neighbors.KNeighborsRegressor和neighbors.RadiusNeighborsRegressor不再在__init__中验证weights,而是在fit中验证weights。 #20072 由 Juan Carlos Alfaro Jiménez 提交。API 变更
neighbors.RadiusNeighborsClassifier的参数kwargs已被弃用,并将在 1.2 版本中移除。 #20842 由 Juan Martín Loyola 提交。
sklearn.neural_network#
修复
neural_network.MLPClassifier和neural_network.MLPRegressor现在在从 pickled 文件加载时正确支持持续训练。 #19631 由 Thomas Fan 提交。
sklearn.pipeline#
API 变更
pipeline.Pipeline的predict_proba和predict_log_proba方法现在支持将预测 kwargs 传递给最终估计器。 #19790 由 Christopher Flynn 提交。
sklearn.preprocessing#
新功能 新的
preprocessing.SplineTransformer是一种特征预处理工具,用于生成 B 样条,由样条的多项式degree、结点数量n_knots和结点定位策略knots参数化。 #18368 由 Christian Lorentzen 提交。preprocessing.SplineTransformer还通过extrapolation参数支持周期性样条。 #19483 由 Malte Londschien 提交。preprocessing.SplineTransformer支持"quantile"结点定位策略的样本权重。 #20526 由 Malte Londschien 提交。新功能
preprocessing.OrdinalEncoder默认支持传递缺失值。 #19069 由 Thomas Fan 提交。新功能
preprocessing.OneHotEncoder现在支持handle_unknown='ignore'和删除类别。 #19041 由 Thomas Fan 提交。新功能
preprocessing.PolynomialFeatures现在支持将元组传递给degree,即degree=(min_degree, max_degree)。 #20250 由 Christian Lorentzen 提交。效率
preprocessing.StandardScaler更快且内存效率更高。 #20652 由 Thomas Fan 提交。效率
preprocessing.KBinsDiscretizer中cluster.KMeans的algorithm参数已从auto更改为full。 #19934 由 Hleb Levitski 提交。效率
preprocessing.PolynomialFeatures转换器的fit方法实现现在更快。这在大型稀疏输入上尤其明显。 #19734 由 Fred Robinson 提交。修复
preprocessing.StandardScaler.inverse_transform方法现在在输入数据为 1D 时引发错误。 #19752 由 Zhehao Liu 提交。修复
preprocessing.scale、preprocessing.StandardScaler和类似的缩放器检测接近常量的特征,以避免将它们缩放到非常大的值。此问题特别发生在使用带样本权重的稀疏数据和常量列的缩放器时,在这种情况下通常禁用中心化。 #19527 由 Oliver Grisel 和 Maria Telenczuk 提交,以及 #19788 由 Jérémie du Boisberranger 提交。修复
preprocessing.StandardScaler.inverse_transform现在正确处理整数 dtype。 #19356 由 @makoeppel 提交。修复
preprocessing.OrdinalEncoder.inverse_transform不支持稀疏矩阵,并引发适当的错误消息。 #19879 由 Guillaume Lemaitre 提交。修复 当
handle_unknown='ignore'且fit收到未知类别时,preprocessing.OrdinalEncoder的fit方法不会再引发错误。 #19906 由 Zhehao Liu 提交。修复 修复了
preprocessing.OrdinalEncoder中的一个回归错误,即大型 Python 数值在转换为 C 类型(np.float64或np.int64)时会因溢出而引发错误。 #20727 由 Guillaume Lemaitre 提交。修复
preprocessing.FunctionTransformer不会根据inverse_transform的输入设置n_features_in_。 #20961 由 Thomas Fan 提交。API 变更
preprocessing.PolynomialFeatures的n_input_features_属性已弃用,转而使用n_features_in_,并将于 1.2 版本中移除。 #20240 由 Jérémie du Boisberranger 提交。
sklearn.svm#
API 变更
svm.OneClassSVM.fit的参数**params已被弃用,并将于 1.2 版本中移除。 #20843 由 Juan Martín Loyola 提交。
sklearn.tree#
增强 在
tree.export_graphviz中添加fontname参数,用于非英文字符。 #18959 由 Zero 和 wstates 提交。修复 提高了
tree.plot_tree与高 DPI 屏幕的兼容性。 #20023 由 Thomas Fan 提交。修复 修复了
tree.DecisionTreeClassifier和tree.DecisionTreeRegressor中的一个错误,即由于舍入误差处理不正确,某个节点可能会被分割,而实际上不应该被分割。 #19336 由 Jérémie du Boisberranger 提交。API 变更
tree.DecisionTreeClassifier、tree.DecisionTreeRegressor、tree.ExtraTreeClassifier和tree.ExtraTreeRegressor的n_features_属性已弃用,转而使用n_features_in_,并将于 1.2 版本中移除。 #20272 由 Jérémie du Boisberranger 提交。
sklearn.utils#
Enhancement
randomized_svd中random_state=0的默认值已弃用。从 1.2 版本开始,random_state的默认值将设置为None。由 #19459 的 Cindy Bezuidenhout 和 Clifford Akai-Nettey 完成。Enhancement 添加了辅助装饰器
utils.metaestimators.available_if,以更易读的方式在元估计器中提供基于状态的方法可用性或不可用性。由 #19948 的 Joel Nothman 完成。Enhancement
utils.validation.check_is_fitted现在使用__sklearn_is_fitted__(如果可用),而不是检查以下划线结尾的属性。这还使得pipeline.Pipeline和preprocessing.FunctionTransformer通过check_is_fitted(estimator)。由 #20657 的 Adrin Jalali 完成。Fix 修复了
utils.sparsefuncs.mean_variance_axis中的一个错误,当实际方差恰好为零时,计算方差的精度非常差。由 #19766 的 Jérémie du Boisberranger 完成。Fix 用
utils.deprecated装饰的属性的文档字符串现在已正确包装。由 #20385 的 Thomas Fan 完成。Fix
utils.stats._weighted_percentile现在正确忽略了对于percentile=0,权重为零且小于具有正权重的最小观测值的观测。受影响的类是对于quantile=0的dummy.DummyRegressor,以及对于alpha=0的ensemble.HuberLossFunction和ensemble.HuberLossFunction。由 #20528 的 Malte Londschien 完成。Fix
utils._safe_indexing在提供整数索引时明确获取数据帧副本,避免引发 Pandas 警告。此警告以前在重采样实用程序和使用这些实用程序的函数(例如model_selection.train_test_split、model_selection.cross_validate、model_selection.cross_val_score、model_selection.cross_val_predict)中引发。由 #20673 的 Joris Van den Bossche 完成。Fix 修复了
utils.is_scalar_nan中的回归错误,其中大的 Python 数字会由于 C 类型(np.float64或np.int64)溢出而引发错误。由 #20727 的 Guillaume Lemaitre 完成。Fix 在 1.0 版本中,
check_array中对np.matrix的支持已弃用,并将在 1.2 版本中引发TypeError。由 #20165 的 Thomas Fan 完成。API Change
utils._testing.assert_warns和utils._testing.assert_warns_message在 1.0 版本中已弃用,并将在 1.2 版本中删除。请改用pytest.warns上下文管理器。请注意,这些函数未文档化,并且不属于公共 API。由 #20521 的 Olivier Grisel 完成。API Change 修复了
utils.graph.graph_shortest_path中的几个错误,该函数现已弃用。请改用scipy.sparse.csgraph.shortest_path。由 #20531 的 Tom Dupre la Tour 完成。
代码和文档贡献者
感谢自 0.24 版本以来为项目的维护和改进做出贡献的每个人,包括
Abdulelah S. Al Mesfer, Abhinav Gupta, Adam J. Stewart, Adam Li, Adam Midvidy, Adrian Garcia Badaracco, Adrian Sadłocha, Adrin Jalali, Agamemnon Krasoulis, Alberto Rubiales, Albert Thomas, Albert Villanova del Moral, Alek Lefebvre, Alessia Marcolini, Alexandr Fonari, Alihan Zihna, Aline Ribeiro de Almeida, Amanda, Amanda Dsouza, Amol Deshmukh, Ana Pessoa, Anavelyz, Andreas Mueller, Andrew Delong, Ashish, Ashvith Shetty, Atsushi Nukariya, Aurélien Geron, Avi Gupta, Ayush Singh, baam, BaptBillard, Benjamin Pedigo, Bertrand Thirion, Bharat Raghunathan, bmalezieux, Brian Rice, Brian Sun, Bruno Charron, Bryan Chen, bumblebee, caherrera-meli, Carsten Allefeld, CeeThinwa, Chiara Marmo, chrissobel, Christian Lorentzen, Christopher Yeh, Chuliang Xiao, Clément Fauchereau, cliffordEmmanuel, Conner Shen, Connor Tann, David Dale, David Katz, David Poznik, Dimitri Papadopoulos Orfanos, Divyanshu Deoli, dmallia17, Dmitry Kobak, DS_anas, Eduardo Jardim, EdwinWenink, EL-ATEIF Sara, Eleni Markou, EricEllwanger, Eric Fiegel, Erich Schubert, Ezri-Mudde, Fatos Morina, Felipe Rodrigues, Felix Hafner, Fenil Suchak, flyingdutchman23, Flynn, Fortune Uwha, Francois Berenger, Frankie Robertson, Frans Larsson, Frederick Robinson, frellwan, Gabriel S Vicente, Gael Varoquaux, genvalen, Geoffrey Thomas, geroldcsendes, Hleb Levitski, Glen, Glòria Macià Muñoz, gregorystrubel, groceryheist, Guillaume Lemaitre, guiweber, Haidar Almubarak, Hans Moritz Günther, Haoyin Xu, Harris Mirza, Harry Wei, Harutaka Kawamura, Hassan Alsawadi, Helder Geovane Gomes de Lima, Hugo DEFOIS, Igor Ilic, Ikko Ashimine, Isaack Mungui, Ishaan Bhat, Ishan Mishra, Iván Pulido, iwhalvic, J Alexander, Jack Liu, James Alan Preiss, James Budarz, James Lamb, Jannik, Jeff Zhao, Jennifer Maldonado, Jérémie du Boisberranger, Jesse Lima, Jianzhu Guo, jnboehm, Joel Nothman, JohanWork, John Paton, Jonathan Schneider, Jon Crall, Jon Haitz Legarreta Gorroño, Joris Van den Bossche, José Manuel Nápoles Duarte, Juan Carlos Alfaro Jiménez, Juan Martin Loyola, Julien Jerphanion, Julio Batista Silva, julyrashchenko, JVM, Kadatatlu Kishore, Karen Palacio, Kei Ishikawa, kmatt10, kobaski, Kot271828, Kunj, KurumeYuta, kxytim, lacrosse91, LalliAcqua, Laveen Bagai, Leonardo Rocco, Leonardo Uieda, Leopoldo Corona, Loic Esteve, LSturtew, Luca Bittarello, Luccas Quadros, Lucy Jiménez, Lucy Liu, ly648499246, Mabu Manaileng, Manimaran, makoeppel, Marco Gorelli, Maren Westermann, Mariangela, Maria Telenczuk, marielaraj, Martin Hirzel, Mateo Noreña, Mathieu Blondel, Mathis Batoul, mathurinm, Matthew Calcote, Maxime Prieur, Maxwell, Mehdi Hamoumi, Mehmet Ali Özer, Miao Cai, Michal Karbownik, michalkrawczyk, Mitzi, mlondschien, Mohamed Haseeb, Mohamed Khoualed, Muhammad Jarir Kanji, murata-yu, Nadim Kawwa, Nanshan Li, naozin555, Nate Parsons, Neal Fultz, Nic Annau, Nicolas Hug, Nicolas Miller, Nico Stefani, Nigel Bosch, Nikita Titov, Nodar Okroshiashvili, Norbert Preining, novaya, Ogbonna Chibuike Stephen, OGordon100, Oliver Pfaffel, Olivier Grisel, Oras Phongpanangam, Pablo Duque, Pablo Ibieta-Jimenez, Patric Lacouth, Paulo S. Costa, Paweł Olszewski, Peter Dye, PierreAttard, Pierre-Yves Le Borgne, PranayAnchuri, Prince Canuma, putschblos, qdeffense, RamyaNP, ranjanikrishnan, Ray Bell, Rene Jean Corneille, Reshama Shaikh, ricardojnf, RichardScottOZ, Rodion Martynov, Rohan Paul, Roman Lutz, Roman Yurchak, Samuel Brice, Sandy Khosasi, Sean Benhur J, Sebastian Flores, Sebastian Pölsterl, Shao Yang Hong, shinehide, shinnar, shivamgargsya, Shooter23, Shuhei Kayawari, Shyam Desai, simonamaggio, Sina Tootoonian, solosilence, Steven Kolawole, Steve Stagg, Surya Prakash, swpease, Sylvain Marié, Takeshi Oura, Terence Honles, TFiFiE, Thomas A Caswell, Thomas J. Fan, Tim Gates, TimotheeMathieu, Timothy Wolodzko, Tim Vink, t-jakubek, t-kusanagi, tliu68, Tobias Uhmann, tom1092, Tomás Moreyra, Tomás Ronald Hughes, Tom Dupré la Tour, Tommaso Di Noto, Tomohiro Endo, TONY GEORGE, Toshihiro NAKAE, tsuga, Uttam kumar, vadim-ushtanit, Vangelis Gkiastas, Venkatachalam N, Vilém Zouhar, Vinicius Rios Fuck, Vlasovets, waijean, Whidou, xavier dupré, xiaoyuchai, Yasmeen Alsaedy, yoch, Yosuke KOBAYASHI, Yu Feng, YusukeNagasaka, yzhenman, Zero, ZeyuSun, ZhaoweiWang, Zito, Zito Relova