注意
转到末尾下载完整的示例代码。或者通过JupyterLite或Binder在浏览器中运行此示例
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_predict
和fit_transform
分别调用predict
和transform
,而无需调用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_val
和y_val
是由EstimatorWithValidationSet.fit
方法所需的,以及transform_input
参数,用于告诉管道在将X_val
传递给EstimatorWithValidationSet.fit
之前对其进行转换。
请注意,目前scikit-learn估计器尚未扩展为接受用户指定的验证集。此功能提前发布是为了收集可能从中受益的第三方库的反馈。
对LogisticRegression(solver="newton-cholesky")
的多类支持#
"newton-cholesky"
求解器(最初在scikit-learn 1.2版本中引入)以前仅限于二元LogisticRegression
和一些其他广义线性回归估计器(即PoissonRegressor
,GammaRegressor
和TweedieRegressor
)。
此新版本包括对多类(多项式)LogisticRegression
的支持。
当特征数量较少到中等时,此求解器特别有用。经验证明,在某些具有独热编码分类特征的中等大小的数据集上,它的收敛性比其他求解器更可靠且更快,如拉取请求的基准结果所示。
对Extra Trees的缺失值支持#
类ensemble.ExtraTreesClassifier
和ensemble.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_csv
、pandas.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_estimator
和parametrize_with_checks
。有关更多详细信息,请参阅其对应的API文档。通用测试套件中的许多测试都已更新,并会发出更有帮助的错误消息。我们还添加了一些新的测试,这应该可以帮助您更轻松地解决估计器中的潜在问题。
我们还提供了一个更新版本的scikit-learn估计器的开发,我们建议您查看。
脚本总运行时间:(0分钟0.098秒)
相关示例