scikit-learn 1.0版本发布亮点

非常高兴地宣布scikit-learn1.0版本的发布!这个库已经稳定运行了一段时间,发布1.0版本是为了向用户表明这一点。这个版本除了常规的两次发布废弃周期外,不包含任何破坏性变更。在未来,将尽力保持这种模式。

此版本包括一些新的关键特性以及许多改进和bug修复。将在下面详细说明这个版本的一些主要功能。有关所有更改的详尽列表,请参考发布说明。

要安装最新版本(使用pip):

pip install --upgradescikit-learn

或者使用conda:

conda install -c conda-forge scikit-learn

关键字和位置参数

scikit-learnAPI公开了许多函数和方法,这些函数和方法有很多输入参数。例如,在本版本发布之前,可以这样实例化一个HistGradientBoostingRegressor:

HistGradientBoostingRegressor("squared_error", 0.1, 100, 31, None, 20, 0.0, 255, None, None, False, "auto", "loss", 0.1, 10, 1e-7, 0, None)

理解上述代码需要读者查阅API文档,并检查每个参数的位置和含义。为了提高基于scikit-learn编写的代码的可读性,现在用户需要提供大多数参数的名称,作为关键字参数,而不是位置参数。例如,上述代码将变为:

HistGradientBoostingRegressor(loss="squared_error", learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_bins=255, categorical_features=None, monotonic_cst=None, warm_start=False, early_stopping="auto", scoring="loss", validation_fraction=0.1, n_iter_no_change=10, tol=1e-7, verbose=0, random_state=None)

这样更易于阅读。位置参数自0.23版本以来已被废弃,现在将引发TypeError。在某些情况下,仍然允许使用有限数量的位置参数,例如在PCA中,PCA(10)仍然被允许,但PCA(10, False)不被允许。

样条变换器

向数据集的特征集添加非线性项的一种方法是为连续/数值特征生成样条基函数。新的SplineTransformer实现了B样条基。样条是分段多项式,由它们的多项式度数和结点位置参数化。以下代码展示了样条的实际应用,更多信息请参考用户指南。

import numpy as np from sklearn.preprocessing import SplineTransformer X = np.arange(5).reshape(5, 1) spline = SplineTransformer(degree=2, n_knots=3) spline.fit_transform(X) array([[0.5 , 0.5 , 0. , 0. ], [0.125, 0.75 , 0.125, 0. ], [0. , 0.5 , 0.5 , 0. ], [0. , 0.125, 0.75 , 0.125], [0. , 0. , 0.5 , 0.5 ]])

分位数回归

分位数回归估计的是给定X条件下y的中位数或其他分位数,而普通最小二乘法(OLS)估计的是条件均值。作为一种线性模型,新的QuantileRegressor为第q个分位数提供线性预测\(\hat{y}(w, X) = Xw\),其中\(q \in (0, 1)\)。然后通过以下最小化问题找到权重或系数w:

min_w {frac{1}{n_samples} sum_i PB_q(y_i - X_i w) + alpha ||w||_1}.

这包括pinball损失(也称为线性损失),另见mean_pinball_loss,

PB_q(t) = q max(t, 0) + (1 - q) max(-t, 0) = begin{cases} q t, & t > 0, \\ 0, & t = 0, \\ (1-q) t, & t < 0 end{cases}

以及由参数alpha控制的L1惩罚,类似于linear_model.Lasso。

特征名称支持

当估计器在fit期间传递了pandas的dataframe时,估计器将设置一个feature_names_in_属性,包含特征名称。请注意,只有当dataframe的列名全部为字符串时,才启用特征名称支持。feature_names_in_用于检查传递给非fit方法(如predict)的dataframe的列名是否与fit中的特征一致:

from sklearn.preprocessing import StandardScaler import pandas as pd X = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=["a", "b", "c"]) scalar = StandardScaler().fit(X) scalar.feature_names_in_ array(['a', 'b', 'c'], dtype=object)

更灵活的绘图API

metrics.ConfusionMatrixDisplay、metrics.PrecisionRecallDisplay、metrics.DetCurveDisplay和inspection.PartialDependenceDisplay现在公开了两个类方法:from_estimator和from_predictions,允许用户根据预测或估计器创建图表。这意味着相应的plot_*函数已被弃用。请查看示例一和示例二了解如何使用新的绘图功能。

在线单类SVM

新类SGDOneClassSVM实现了使用随机梯度下降的在线线性版本的单类SVM。结合核近似技术,SGDOneClassSVM可以用来近似解决核化单类SVM的解,该解在OneClassSVM中实现,具有线性的拟合时间复杂度。请注意,核化单类SVM的复杂度最多是样本数量的二次方。因此,SGDOneClassSVM非常适合用于训练样本数量大(> 10,000)的数据集,其中SGD变体可以快几个数量级。请查看此示例了解其使用方法,以及用户指南了解更多细节。

基于直方图的梯度提升模型现在是稳定的

HistGradientBoostingRegressor和HistGradientBoostingClassifier不再是实验性的,可以简单地导入和使用:

from sklearn.ensemble import HistGradientBoostingClassifier

此版本包括许多文档改进。在超过2100个合并的拉取请求中,大约有800个是对文档的改进。

脚本的总运行时间:(0分钟0.016秒)

下载Jupyter笔记本:

下载Python源代码:

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485