scikit-learn 1.2 版本亮点#

我们很高兴地宣布发布 scikit-learn 1.2!添加了许多错误修复和改进,以及一些新的关键功能。下面我们将详细介绍此版本的一些主要功能。有关所有更改的详尽列表,请参阅发行说明

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

pip install --upgrade scikit-learn

或使用 conda

conda install -c conda-forge scikit-learn

使用 set_output API 的 Pandas 输出#

scikit-learn 的转换器现在支持使用 set_output API 的 pandas 输出。要了解有关 set_output API 的更多信息,请参阅示例:介绍 set_output API 和 # 这个视频,scikit-learn 转换器的 pandas DataFrame 输出(一些示例)

import numpy as np

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

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", quantile_method="averaged_inverted_cdf"),
            petal_cols,
        ),
    ],
    verbose_feature_names_out=False,
).set_output(transform="pandas")

X_out = preprocessor.fit_transform(X)
X_out.sample(n=5, random_state=0)
萼片长度 (cm) 萼片宽度 (cm) 花瓣长度 (cm) 花瓣宽度 (cm)
114 -0.052506 -0.592373 3.0 4.0
62 0.189830 -1.973554 2.0 1.0
33 -0.416010 2.630382 0.0 1.0
107 1.765012 -0.362176 4.0 3.0
7 -1.021849 0.788808 1.0 1.0


基于直方图的梯度提升树中的交互约束#

HistGradientBoostingRegressorHistGradientBoostingClassifier 现在支持使用 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)
HistGradientBoostingRegressor(interaction_cst=[[0], [1], [2], [3], [4], [5],
                                               [6], [7], [8], [9]],
                              random_state=0)
在 Jupyter 环境中,请重新运行此单元格以显示 HTML 表示形式或信任 notebook。
在 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]
)
plot release highlights 1 2 0

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)
)
plot release highlights 1 2 0

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

from sklearn.datasets import fetch_openml

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"])
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OrdinalEncoder

categorical_features = ["pclass", "sex", "embarked"]
model = make_pipeline(
    ColumnTransformer(
        transformers=[("cat", OrdinalEncoder(), categorical_features)],
        remainder="passthrough",
    ),
    HistGradientBoostingRegressor(random_state=0),
).fit(X, y)
from sklearn.inspection import PartialDependenceDisplay

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,
)
plot release highlights 1 2 0

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"
)
X.head()
pclass 名称 性别 age sibsp parch ticket fare cabin embarked boat body home.dest
0 1 Allen, Miss. Elisabeth Walton female 29.0000 0 0 24160 211.3375 B5 S 2 NaN St Louis, MO
1 1 Allison, Master. Hudson Trevor male 0.9167 1 2 113781 151.5500 C22 C26 S 11 NaN Montreal, PQ / Chesterville, ON
2 1 Allison, Miss. Helen Loraine female 2.0000 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON
3 1 Allison, Mr. Hudson Joshua Creighton male 30.0000 1 2 113781 151.5500 C22 C26 S NaN 135.0 Montreal, PQ / Chesterville, ON
4 1 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female 25.0000 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON


LinearDiscriminantAnalysis 中的实验性 Array API 支持#

LinearDiscriminantAnalysis 添加了对 Array API 规范的实验性支持。该估计器现在可以在任何符合 Array API 的库上运行,例如 CuPy,一个 GPU 加速的数组库。有关详细信息,请参阅用户指南

许多估计器的效率提高#

在版本 1.1 中,许多依赖于成对距离计算的估计器(主要是与聚类、流形学习和邻域搜索算法相关的估计器)对于 float64 密集输入进行了大幅改进。效率改进尤其是内存占用减少和在多核机器上更好的可扩展性。在版本 1.2 中,这些估计器在 float32 和 float64 数据集上对密集和稀疏输入的所有组合进行了进一步改进,除了欧几里得距离和平方欧几里得距离指标的稀疏-密集和密集-稀疏组合。受影响估计器的详细列表可在更新日志中找到。

脚本总运行时间: (0 minutes 5.676 seconds)

相关示例

scikit-learn 1.7 发布亮点

scikit-learn 1.7 发布亮点

scikit-learn 1.4 发布亮点

scikit-learn 1.4 发布亮点

介绍 set_output API

介绍 set_output API

scikit-learn 1.0 发布亮点

scikit-learn 1.0 发布亮点

由 Sphinx-Gallery 生成的图库