基础求解器类#

#

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 (intarrayint, 可选) – 稀疏度级别,即最优解中非零元素的数量,表示为 \(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_estimated_params()[来源]#

获取目标函数的最优参数。

Returns:

parameters – 优化的最优解。

Return type:

形状为(维度,)的数组

get_result()[来源]#

获取优化的结果。

Returns:

results – 优化的结果,包括以下键:

  • params形状为 (dimensionality,) 的数组

    最优参数。

  • support_set整数数组

    最优参数的支持集。

  • objective_value浮点数

    在最优参数处的目标函数值。

  • eval_objective浮点数

    信息准则的值或交叉验证的平均损失。

Return type:

字典

get_support()[来源]#

获取最优参数的支持集。

Returns:

support_set – 所选变量的索引,按升序排序。

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 Layer objects, 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) – 如果 objectivegradient 是用 JAX 编写的,可以将 jit 设置为 True 以加速优化。

Returns:

parameters – 优化的最优解。

Return type:

形状为(维度,)的数组