基础求解器类#
类#
- class skscope.base_solver.BaseSolver(dimensionality, sparsity=None, sample_size=1, *, preselect=[], numeric_solver=convex_solver_LBFGS, max_iter=100, group=None, ic_method=None, cv=1, cv_fold_id=None, split_method=None, random_state=None)[来源]#
通过搜索所有可能的变量组合来获取凸目标函数的稀疏最优解。 具体来说,
BaseSolver旨在解决这个问题:\(\min_{x \in R^p} f(x) \text{ s.t. } ||x||_0 \leq s\),其中\(f(x)\)是一个凸目标函数,\(s\)是稀疏水平。\(x\)的每个元素可以看作是一个变量,\(x\)的非零元素是选定的变量。- Parameters:
dimensionality (int) – 优化问题的维度,也是将被考虑选择或不选择的总变量数,表示为 \(p\)。
sparsity (int 或 array 的 int, 可选) – 稀疏度级别,即最优解中非零元素的数量,表示为 \(s\)。 默认值为
range(int(p/log(log(p))/log(p)))。sample_size (int, default=1) – 样本大小,表示为 \(n\)。
preselect (array of int, default=[]) – 一个包含必须选择的变量索引的数组。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
BaseSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与skscope.convex_solver_LBFGS相同的接口。max_iter (int, default=100) – 收敛所需的最大迭代次数。
group (array of shape (dimensionality,), default=range(dimensionality)) – 每个变量的组索引,它必须是一个从0开始且没有间隔的递增整数数组。 同一组中的变量必须是相邻的,它们将一起被选择或不选择。 以下是一些错误的例子:
[0,2,1,2](不是递增的),[1,2,3,3](不是从0开始),[0,2,2,3](有间隔)。 值得一提的是,“一个变量”的概念实际上意味着“一组变量”。例如,``sparsity=[3]`` 意味着将选择3组变量而不是3个变量, 而always_include=[0,3]意味着第0组和第3组必须被选择。ic_method (callable, optional) – 用于计算信息准则以选择稀疏度级别的函数。
ic(loss, p, s, n) -> ic_value,其中loss是目标函数的值,p是维度,s是稀疏度级别,n是样本大小。 仅在sparsity为数组且cv为 1 时使用。 请注意,使用ic_method时必须提供sample_size。cv (int, default=1) – 使用交叉验证方法时的折叠次数。 - 如果
cv= 1,稀疏级别将通过信息准则选择。 - 如果cv> 1,稀疏级别将通过交叉验证方法选择。split_method (callable, optional) – 一个用于获取交叉验证每一折中使用的数据部分的函数。 其接口应为
(data, index) -> part_data,其中index是一个整数数组。cv_fold_id (array of shape (sample_size,), optional) – 一个数组,表示交叉验证中的不同折叠,同一折叠中的样本应赋予相同的编号。 不同元素的数量应等于
cv。 仅在cv > 1时使用。 random_state : int, 可选 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
- get_config(deep=True)[来源]#
获取此求解器的参数。
- Parameters:
deep (bool, default=True) – 如果为True,将返回此求解器的参数以及包含的子对象(如果它们是估计器)。
- Returns:
params – 参数名称映射到它们的值。
- Return type:
字典
- get_result()[来源]#
获取优化的结果。
- Returns:
results – 优化的结果,包括以下键:
params形状为 (dimensionality,) 的数组最优参数。
support_set整数数组最优参数的支持集。
objective_value浮点数在最优参数处的目标函数值。
eval_objective浮点数信息准则的值或交叉验证的平均损失。
- Return type:
字典
- set_config(**params)[来源]#
设置此求解器的参数。
- Parameters:
**params (dict) – 求解器参数。
- Returns:
求解器实例。
- Return type:
自身
- solve(objective, data=None, layers=[], gradient=None, init_support_set=None, init_params=None, jit=False)[来源]#
优化优化目标函数。
- Parameters:
目标 (可调用) – 需要最小化的目标函数:
objective(params, data) -> loss其中params是一个形状为 (dimensionality,) 的一维数组,data是完全指定函数所需的固定参数。 如果未提供gradient,则objective必须使用JAX库编写。data (可选) – 传递给目标函数及其导数(如果存在)的额外参数。
layers (list of
Layerobjects, default=[]) –Layer是目标函数的“装饰器”。 参数在进入目标函数之前会由Layer进行处理。 不同的层可以实现不同的效果, 并且它们可以顺序连接在一起形成一个更大的层, 从而实现更复杂的功能。Layer对象可以在skscope.layers中找到。 如果layers不为空,objective必须用JAX库编写。init_support_set (array of int, default=[]) – 初始活动集中变量的索引。
init_params (array of shape (dimensionality,), optional) – 参数的初始值,默认是一个全零向量。
gradient (callable, optional) – 一个返回参数梯度向量的函数:
gradient(params, data) -> array of shape (dimensionality,), 其中params是一个形状为 (dimensionality,) 的一维数组,data是完全指定函数所需的固定参数。 如果未提供gradient,则objective必须用JAX库编写。jit (bool, default=False) – 如果
objective或gradient是用 JAX 编写的,可以将jit设置为 True 以加速优化。
- Returns:
parameters – 优化的最优解。
- Return type:
形状为(维度,)的数组