scikit-learn 1.6版本亮点#

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

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

pip install --upgrade scikit-learn

或使用conda

conda install -c conda-forge scikit-learn

FrozenEstimator:冻结估计器#

此元估计器允许您获取一个估计器并冻结其拟合方法,这意味着调用fit不会执行任何操作;此外,fit_predictfit_transform分别调用predicttransform,而无需调用fit。原始估计器的其他方法和属性保持不变。一个有趣的用例是使用预先拟合的模型作为管道中的转换步骤,或将预先拟合的模型传递给某些元估计器。这是一个简短的示例

import time
from sklearn.datasets import make_classification
from sklearn.frozen import FrozenEstimator
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import FixedThresholdClassifier

X, y = make_classification(n_samples=1000, random_state=0)

start = time.time()
classifier = SGDClassifier().fit(X, y)
print(f"Fitting the classifier took {(time.time() - start) * 1_000:.2f} milliseconds")

start = time.time()
threshold_classifier = FixedThresholdClassifier(
    estimator=FrozenEstimator(classifier), threshold=0.9
).fit(X, y)
print(
    f"Fitting the threshold classifier took {(time.time() - start) * 1_000:.2f} "
    "milliseconds"
)
Fitting the classifier took 3.67 milliseconds
Fitting the threshold classifier took 0.62 milliseconds

拟合阈值分类器跳过了内部SGDClassifier的拟合。有关更多详细信息,请参阅示例使用FrozenEstimator的示例

在管道中转换除X以外的数据#

Pipeline现在支持根据需要转换传递的数据(非X)。这可以通过设置新的transform_input参数来完成。当通过管道传递验证集时,这尤其有用。

例如,假设EstimatorWithValidationSet是一个接受验证集的估计器。我们现在可以拥有一个管道,它将转换验证集并将其传递给估计器

sklearn.set_config(enable_metadata_routing=True)
est_gs = GridSearchCV(
    Pipeline(
        (
            StandardScaler(),
            EstimatorWithValidationSet(...).set_fit_request(X_val=True, y_val=True),
        ),
        # telling pipeline to transform these inputs up to the step which is
        # requesting them.
        transform_input=["X_val"],
    ),
    param_grid={"estimatorwithvalidationset__param_to_optimize": list(range(5))},
    cv=5,
).fit(X, y, X_val, y_val)

在上面的代码中,关键部分是调用set_fit_request以指定X_valy_val是由EstimatorWithValidationSet.fit方法所需的,以及transform_input参数,用于告诉管道在将X_val传递给EstimatorWithValidationSet.fit之前对其进行转换。

请注意,目前scikit-learn估计器尚未扩展为接受用户指定的验证集。此功能提前发布是为了收集可能从中受益的第三方库的反馈。

LogisticRegression(solver="newton-cholesky")的多类支持#

"newton-cholesky"求解器(最初在scikit-learn 1.2版本中引入)以前仅限于二元LogisticRegression和一些其他广义线性回归估计器(即PoissonRegressorGammaRegressorTweedieRegressor)。

此新版本包括对多类(多项式)LogisticRegression的支持。

当特征数量较少到中等时,此求解器特别有用。经验证明,在某些具有独热编码分类特征的中等大小的数据集上,它的收敛性比其他求解器更可靠且更快,如拉取请求的基准结果所示。

对Extra Trees的缺失值支持#

ensemble.ExtraTreesClassifierensemble.ExtraTreesRegressor现在支持缺失值。更多详情请见用户指南

import numpy as np
from sklearn.ensemble import ExtraTreesClassifier

X = np.array([0, 1, 6, np.nan]).reshape(-1, 1)
y = [0, 0, 1, 1]

forest = ExtraTreesClassifier(random_state=0).fit(X, y)
forest.predict(X)
array([0, 0, 1, 1])

从网络下载任何数据集#

函数datasets.fetch_file允许从任何给定的URL下载文件。此便捷函数提供内置的本地磁盘缓存、sha256摘要完整性检查和网络错误时的自动重试机制。

目标是提供与数据集获取器相同的便利性和可靠性,同时提供灵活地处理来自任意在线资源和文件格式的数据。

然后可以使用通用函数或特定领域的函数(例如pandas.read_csvpandas.read_parquet等)加载下载的文件。

数组API支持#

自1.5版本以来,更多估计器和函数已更新为支持与数组API兼容的输入,特别是来自sklearn.model_selection模块的超参数调整元估计器和来自sklearn.metrics模块的指标。

请参考数组API支持页面,了解如何使用与数组API兼容的库(如PyTorch或CuPy)使用scikit-learn。

几乎完整的元数据路由支持#

元数据路由支持已添加到所有剩余的估计器和函数中,除了AdaBoost。有关更多详细信息,请参阅元数据路由用户指南

支持多线程CPython 3.13#

scikit-learn初步支持多线程CPython,特别是为我们所有支持的平台提供了多线程轮子。

多线程(也称为nogil)CPython 3.13是CPython 3.13的实验版本,其目标是通过移除全局解释器锁(GIL)来支持高效的多线程用例。

有关多线程CPython的更多详细信息,请参阅py-free-threading文档,特别是如何安装多线程CPython生态系统兼容性跟踪

请随意在您的用例中尝试多线程CPython并报告任何问题!

第三方库开发者API改进#

我们一直在努力改进第三方库的开发者API。这仍在进行中,但在这个版本中已经完成相当多的工作。此版本包括

  • sklearn.utils.validation.validate_data已引入,并取代了之前的私有方法BaseEstimator._validate_data。此函数扩展了check_array并增加了支持记住输入特征计数和名称的功能。

  • 估计器标签现已改进,并通过sklearn.utils.Tags成为公共API的一部分。估计器现在应该重写BaseEstimator.__sklearn_tags__方法,而不是实现_more_tags方法。如果您想支持多个scikit-learn版本,可以在您的类中实现这两种方法。

  • 由于开发了公共标签API,我们已删除_xfail_checks标签,并且预期会失败的测试直接传递给check_estimatorparametrize_with_checks。有关更多详细信息,请参阅其对应的API文档。

  • 通用测试套件中的许多测试都已更新,并会发出更有帮助的错误消息。我们还添加了一些新的测试,这应该可以帮助您更轻松地解决估计器中的潜在问题。

我们还提供了一个更新版本的scikit-learn估计器的开发,我们建议您查看。

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

相关示例

scikit-learn 1.2 版本亮点

scikit-learn 1.2 版本亮点

scikit-learn 0.22 版本亮点

scikit-learn 0.22 版本亮点

scikit-learn 1.3 版本亮点

scikit-learn 1.3 版本亮点

scikit-learn 1.4 版本亮点

scikit-learn 1.4 版本亮点

由Sphinx-Gallery生成的图库