scikit-learn 1.2版本发布亮点

很高兴地宣布scikit-learn 1.2版本的发布!这个版本包含了许多bug修复和改进,以及一些关键的新特性。以下是这个版本的主要亮点。如需查看所有更改的详尽列表,请参考发布说明。

要安装最新版本,可以使用pip:

pip install --upgradescikit-learn

或者使用conda:

conda install -c conda-forgescikit-learn

Pandas输出支持

scikit-learn的转换器现在支持使用set_output API输出Pandas格式的数据。想了解更多关于set_output API的信息,请查看示例:。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler, KBinsDiscretizer
from sklearn.compose import ColumnTransformer

X, y = load_iris(as_frame=True, return_X_y=True)
sepal_cols = ["sepal length (cm)", "sepal width (cm)"]
petal_cols = ["petal length (cm)", "petal width (cm)"]

preprocessor = ColumnTransformer([
    ("scaler", StandardScaler(), sepal_cols),
    ("kbin", KBinsDiscretizer(encode="ordinal"), petal_cols),
], verbose_feature_names_out=False).set_output(transform="pandas")

X_out = preprocessor.fit_transform(X)
print(X_out.sample(n=5, random_state=0))

输出示例:

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
114 -0.052506 -0.592373 3.0 4.0

直方图梯度提升树的交互约束

HistGradientBoostingRegressor和HistGradientBoostingClassifier现在支持使用interaction_cst参数设置交互约束。

from sklearn.datasets import load_diabetes
from sklearn.ensemble import HistGradientBoostingRegressor

X, y = load_diabetes(return_X_y=True, as_frame=True)
hist_no_interact = HistGradientBoostingRegressor(
    interaction_cst=[[i] for i in range(X.shape[1])], random_state=0
)
hist_no_interact.fit(X, y)

在Jupyter环境中,请重新运行此单元格以显示HTML表示,或信任笔记本。在GitHub上,HTML表示无法渲染,请尝试使用nbviewer.org加载此页面。

新的和增强的显示功能

PredictionErrorDisplay提供了一种定性分析回归模型的方法。

import matplotlib.pyplot as plt
from sklearn.metrics import PredictionErrorDisplay

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
PredictionErrorDisplay.from_estimator(
    hist_no_interact, X, y, kind="actual_vs_predicted", ax=axs[0]
)
PredictionErrorDisplay.from_estimator(
    hist_no_interact, X, y, kind="residual_vs_predicted", ax=axs[1]
)

LearningCurveDisplay现在可以用来绘制learning_curve的结果。

from sklearn.model_selection import LearningCurveDisplay

LearningCurveDisplay.from_estimator(
    hist_no_interact, X, y, cv=5, n_jobs=2, train_sizes=np.linspace(0.1, 1, 5)
)

PartialDependenceDisplay引入了一个新的参数categorical_features,用于使用条形图和热图显示分类特征的部分依赖。

from sklearn.datasets import fetch_openml
from sklearn.preprocessing import OrdinalEncoder
from sklearn.pipeline import make_pipeline
from sklearn.inspection import PartialDependenceDisplay

X, y = fetch_openml("titanic", version=1, as_frame=True, return_X_y=True, parser="pandas")
X = X.select_dtypes(["number", "category"]).drop(columns=["body"])
categorical_features = ["pclass", "sex", "embarked"]
model = make_pipeline(
    ColumnTransformer(
        transformers=[("cat", OrdinalEncoder(), categorical_features)], remainder="passthrough"
    ),
    HistGradientBoostingRegressor(random_state=0),
).fit(X, y)

fig, ax = plt.subplots(figsize=(14, 4), constrained_layout=True)
PartialDependenceDisplay.from_estimator(
    model, X, features=["age", "sex", ("pclass", "sex")], categorical_features=categorical_features, ax=ax
)

fetch_openml的更快解析器

fetch_openml现在支持一个新的"pandas"解析器,它在内存和CPU效率上更高。在v1.4中,默认将更改为parser="auto",它将自动为密集数据使用"pandas"解析器,为稀疏数据使用"liac-arff"。

X, y = fetch_openml("titanic", version=1, as_frame=True, return_X_y=True, parser="pandas")
print(X.head())

输出示例:

pclass name sex age sibsp parch ticket fare cabin embarked boat body home.dest
1 Allen, Miss. Elisabeth Walton female 29.0000 0 0 24160 211.3375 B5 S 2 NaN St Louis, MO

LinearDiscriminantAnalysis的实验性数组API支持

LinearDiscriminantAnalysis添加了对Array API规范的实验性支持。该估计器现在可以在任何符合Array API的库上运行,例如CuPy,这是一个GPU加速的数组库。

在1.1版本中,依赖于成对距离计算的许多估计器(基本上是与聚类、流形学习和邻居搜索算法相关的估计器)对于float64密集输入的效率得到了极大的提升。特别是在1.2版本中,这些估计器对于所有密集和稀疏输入的组合在float32和float64数据集上的效率进一步提升,除了Euclidean和Squared Euclidean距离度量的稀疏-密集和密集-稀疏组合。

受影响的估计器的详细列表可以在变更日志中找到。

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

下载Jupyter笔记本:

下载Python源代码:

下载压缩包:

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