Scikit-learn提供了一个全局配置管理器,它允许用户在代码执行期间临时修改库的配置。这个管理器通过上下文管理器的方式工作,可以在代码块中设置特定的参数,这些参数在代码块执行完毕后会恢复到原来的值。
全局配置管理器接受多个参数,以下是一些关键参数的说明:
assume_finite=bool, default=None
如果设置为 True,则跳过有限性验证,这可以节省时间,但可能导致潜在的崩溃。如果设置为 False,则执行有限性验证,避免错误。如果设置为 None,则保持现有值不变。默认值为 False。
working_memory=int, default=None
如果设置,Scikit-learn将尝试将临时数组的大小限制为这个 MiB 数(当并行化时每个作业)。这通常可以在执行可以分块执行的昂贵操作时节省计算时间和内存。如果设置为 None,则保持现有值不变。默认值为 1024。
print_changed_only=bool, default=None
如果设置为 True,则在打印估计器时只打印设置为非默认值的参数。例如,如果设置为 False,则会打印所有参数,包括未更改的参数。如果设置为 None,则保持现有值不变。默认值为 True。
display={'text', 'diagram'}, default=None
如果设置为 'diagram',则在 Jupyter lab 或笔记本环境中将估计器显示为图表。如果设置为 'text',则将估计器显示为文本。如果设置为 None,则保持现有值不变。默认值为 'diagram'。
pairwise_dist_chunk_size=int, default=None
这是加速的成对距离减少后端的每块行向量数。默认值为 256,适用于大多数现代笔记本电脑的缓存和架构。这个设置主要用于内部测试和基准测试,普通用户不需要自定义这个配置。
enable_cython_pairwise_dist=bool, default=None
如果可能,使用加速的成对距离减少后端。全局默认值为 True。这个设置主要用于内部测试和基准测试,普通用户不需要自定义这个配置。
array_api_dispatch=bool, default=None
如果输入遵循数组 API 标准,则使用数组 API 分派。默认值为 False。有关详细信息,请参见用户指南。
transform_output=str, default=None
配置 transform 和 fit_transform 的输出。有关如何使用 API 的示例,请参见“引入 set_output API”。选项包括 "default"(转换器的默认输出格式)、"pandas"(DataFrame 输出)和 "polars"(Polars 输出)。如果设置为 None,则转换配置保持不变。
enable_metadata_routing=bool, default=None
启用元数据路由。默认情况下,此功能处于禁用状态。有关详细信息,请参见元数据路由用户指南。如果设置为 True,则启用元数据路由;如果设置为 False,则禁用元数据路由并使用旧语法;如果设置为 None,则配置保持不变。
skip_parameter_validation=bool, default=None
如果设置为 True,则禁用估计器的 fit 方法中超参数类型和值的验证,以及传递给公共辅助函数的参数的验证。这可以在某些情况下节省时间,但可能导致底层崩溃和异常,以及令人困惑的错误消息。注意,对于数据参数(如 X 和 y),仅跳过类型验证,但 check_array 的验证将继续运行。
以下是如何使用全局配置管理器的示例:
import sklearn
from sklearn.utils.validation import assert_all_finite
with sklearn.config_context(assume_finite=True):
# 在这里执行代码,假设所有输入都是有限值
assert_all_finite([float('nan')])
with sklearn.config_context(assume_finite=False):
# 在这里执行代码,将执行有限性验证
assert_all_finite([float('nan')])
ValueError: Input contains NaN...
在这个示例中,首先在全局配置管理器中设置 assume_finite 参数为 True,然后尝试验证包含 NaN 值的输入。由于跳过了有限性验证,所以没有抛出错误。然后,将 assume_finite 参数设置为 False,并再次尝试验证相同的输入,这次由于执行了有限性验证,所以抛出了 ValueError。