稀疏约束优化求解器#
当前支持的稀疏约束优化求解器。这些求解器继承自BaseSolver。
类#
通过稀疏约束优化拼接迭代(SCOPE)算法获取凸目标函数的稀疏最优解,该算法也可用于变量选择。 |
|
通过梯度硬阈值追踪(GraHTP)算法获取凸目标函数的稀疏最优解。 |
|
通过迭代硬阈值(IHT)算法获取凸目标函数的稀疏最优解。 |
|
通过梯度支持追踪(GraSP)算法获取凸目标函数的稀疏最优解。 |
|
通过前向-后向贪婪(FoBa)算法获取凸目标函数的稀疏最优解。 |
|
通过前向选择算法获取凸目标函数的稀疏最优解。 |
|
通过正交匹配追踪(OMP)算法获取凸目标函数的稀疏最优解。 |
|
通过原始-对偶活动集(PDAS)算法解决具有子集大小\(k\)的最佳子集选择问题。 |
- class skscope.solver.FobaSolver(dimensionality, sparsity=None, sample_size=1, *, use_gradient=True, threshold=0.0, foba_threshold_ratio=0.5, strict_sparsity=True, 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)[来源]#
通过前向-后向贪心(FoBa)算法获取凸目标函数的稀疏最优解。 具体来说,
FobaSolver旨在解决这个问题:\(\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\)。
use_gradient (bool, default=True) – 是否使用梯度信息来衡量变量的重要性。 使用梯度信息将加速算法,但解决方案可能不准确。
threshold (float, default=0.0) – 用于确定是否选择变量的阈值。
foba_threshold_ratio (float, default=0.5) – 用于确定是否删除变量的阈值将设置为
threshold*foba_threshold_ratio。strict_sparsity (bool, default=True) – 是否严格控制稀疏级别为
sparsity。preselect (array of int, default=[]) – 一个包含必须选择的变量索引的数组。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
FobaSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
刘杰, 叶杰, 藤卷亮. 针对基数约束下的一般凸光滑函数的前后向贪心算法[C]//国际机器学习会议. PMLR, 2014: 503-511.
- class skscope.solver.ForwardSolver(dimensionality, sparsity=None, sample_size=1, *, threshold=0.0, strict_sparsity=True, 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)[来源]#
通过前向选择算法获取凸目标函数的稀疏最优解。 具体来说,
ForwardSolver旨在解决这个问题:\(\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\)。
threshold (float, default=0.0) – 用于确定是否选择变量的阈值。
strict_sparsity (bool, default=True) – 是否严格控制稀疏级别为
sparsity。preselect (array of int, default=[]) – 一个包含必须选择的变量索引的数组。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
ForwardSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
- class skscope.solver.GraspSolver(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)[来源]#
通过梯度支持追踪(GraSP)算法获取凸目标函数的稀疏最优解。 具体来说,
GraspSolver旨在解决这个问题:\(\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) – 用于解决凸优化问题的求解器。
GraspSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
Bahmani S, Raj B, Boufounos P T. 贪婪稀疏约束优化[J]. 机器学习研究杂志, 2013, 14(1): 807-841.
- class skscope.solver.HTPSolver(dimensionality, sparsity=None, sample_size=1, *, preselect=[], step_size=0.005, 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)[来源]#
通过梯度硬阈值追踪(GraHTP)算法获取凸目标函数的稀疏最优解。 具体来说,
HTPSolver旨在解决这个问题:\(\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=[]) – 一个包含必须选择的变量索引的数组。
step_size (float, default=0.005) – 梯度下降的步长。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
HTPSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
袁晓彤, 李平, 张涛. 梯度硬阈值追踪[J]. 机器学习研究杂志, 2017, 18(1): 6027-6069.
- class skscope.solver.IHTSolver(dimensionality, sparsity=None, sample_size=1, *, preselect=[], step_size=0.005, 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)[来源]#
通过迭代硬阈值(IHT)算法获取凸目标函数的稀疏最优解。 具体来说,
IHTSolver旨在解决这个问题:\(\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=[]) – 一个包含必须选择的变量索引的数组。
step_size (float, default=0.005) – 梯度下降的步长。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
IHTSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
袁晓彤, 李平, 张涛. 梯度硬阈值追踪[J]. 机器学习研究杂志, 2017, 18(1): 6027-6069.
- class skscope.solver.OMPSolver(dimensionality, sparsity=None, sample_size=1, *, threshold=0.0, strict_sparsity=True, 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)[来源]#
通过正交匹配追踪(OMP)算法获取凸目标函数的稀疏最优解。 具体来说,
OMPSolver旨在解决这个问题:\(\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\)。
threshold (float, default=0.0) – 用于确定是否选择变量的阈值。
strict_sparsity (bool, default=True) – 是否严格控制稀疏级别为
sparsity。preselect (array of int, default=[]) – 一个包含必须选择的变量索引的数组。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
OMPSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
Shalev-Shwartz S, Srebro N, Zhang T. 在稀疏约束优化问题中以精度换取稀疏性[J]. SIAM Journal on Optimization, 2010, 20(6): 2807-2832.Shalev-Shwartz S, Srebro N, Zhang T. 在稀疏约束优化问题中以精度换取稀疏性[J]. SIAM Journal on Optimization, 2010, 20(6): 2807-2832.
- class skscope.solver.PDASSolver(dimensionality, sparsity=None, sample_size=1, *, preselect=[], numeric_solver=convex_solver_LBFGS, max_iter=100, group=None, cv=1, cv_fold_id=None, split_method=None, random_state=None)[来源]#
使用原始-对偶活动集(PDAS)算法解决子集大小为\(k\)的最佳子集选择问题。 具体来说,
PDASSolver旨在解决这个问题:\(\min_{\beta \in R^p} l(\beta) \text{ s.t. } ||\beta||_0 = k\),其中\(l(\beta)\)是一个凸目标函数,\(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=[]) – 一个包含必须选择的变量索引的数组。
step_size (float, default=0.005) – 梯度下降的步长。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
HTPSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与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组必须被选择。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, optional) – 用于交叉验证的随机种子。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
参考文献
Wen C H, Zhang A J, Quan S J, Wang X Q. BeSS: 一个用于线性、逻辑和Cox比例风险模型中最优子集选择的R包[J]. 统计软件杂志, 2020, 94(4): 1-24.
- class skscope.solver.ScopeSolver(dimensionality, sparsity=None, sample_size=1, *, preselect=[], numeric_solver=convex_solver_LBFGS, max_iter=20, ic_method=None, cv=1, split_method=None, cv_fold_id=None, group=None, important_search=128, screening_size=-1, max_exchange_num=5, is_dynamic_max_exchange_num=True, greedy=True, splicing_type='halve', path_type='seq', gs_lower_bound=None, gs_upper_bound=None, thread=1, random_state=None, console_log_level='off', file_log_level='off', log_file_name='logs/skscope.log')[来源]#
通过拼接迭代的稀疏约束优化(SCOPE)算法获取凸目标函数的稀疏最优解,该算法也可用于变量选择。 具体来说,
ScopeSolver旨在解决以下问题:\(\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)))。 仅在path_type为“seq”时使用。sample_size (int, default=1) – 样本大小,表示为 \(n\)。
preselect (array of int, default=[]) – 一个包含必须选择的变量索引的数组。
numeric_solver (callable, optional) – 用于凸优化问题的求解器。
ScopeSolver将在每次迭代中调用此函数来解决凸优化问题。 它应具有与skscope.convex_solver_LBFGS相同的接口。max_iter (int, default=20) – 收敛所需的最大迭代次数。
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时使用。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组必须被选择。important_search (int, default=128) – 需要拼接的重要变量的数量。 这用于减少计算成本。如果它太大,将大大增加运行时间。
screening_size (int, default=-1) – 筛选后剩余的变量数量,筛选用于减少计算成本。
screening_size应该是一个小于 p 但大于 sparsity 中任何值的非负数。如果screening_size为 -1,则不使用筛选。如果screening_size为 0,screening_size将被设置为int(p/log(log(p))/log(p))。max_exchange_num (int, optional, default=5) – 拼接时的最大交换次数。
is_dynamic_max_exchange_num (bool, default=True) – 如果
is_dynamic_max_exchange_num为 True,max_exchange_num将根据上一次迭代中交换的变量数量动态减少。greedy (bool, default=True,) – 如果
greedy为 True,将选择第一个能够减少目标函数值的交换编号。 否则,将选择能够最大程度减少目标函数值的交换编号。splicing_type ({"halve", "taper"}, default="halve") – 每次迭代中减少交换次数的类型,从
max_exchange_num开始。 “halve”表示每次减少一半,“taper”表示每次减少一个。path_type ({"seq", "gs"}, default="seq") – 用于选择最佳稀疏度水平的方法。对于 path_type = “seq”,我们依次解决 sparsity 中所有大小的问题。对于 path_type = “gs”,我们解决稀疏度水平在 gs_lower_bound 和 gs_upper_bound 之间的问题,其中要考虑的具体稀疏度水平由黄金分割法确定。
gs_lower_bound (int, default=0) – 用于稀疏搜索的黄金分割搜索的下限。 仅在 path_type = "gs" 时使用。
gs_upper_bound (int, optional) – 用于稀疏搜索的黄金分割搜索的上界。 默认值为
int(p/log(log(p))/log(p))。 仅在 path_type = “gs” 时使用。thread (int, default=1) – 用于交叉验证的最大多线程数。如果 thread = 0,将使用设备支持的最大线程数。
random_state (int, optional) – 用于交叉验证的随机种子。
console_log_level (str, default="off") – 控制台输出日志的级别,可以是“off”、“error”、“warning”、“debug”。 例如,如果
console_log_level是“warning”,则只有错误和警告日志会输出到控制台。file_log_level (str, default="off") – 输出日志到文件的级别,可以是“off”、“error”、“warning”、“debug”。 例如,如果
file_log_level是“off”,则不会将日志输出到文件。log_file_name (str, default="logs/skscope.log") – 日志文件的名称(相对路径),用于存储日志信息。
- params#
稀疏最优解。
- Type:
形状为(dimensionality,)的数组
- objective_value#
解的目标函数值。
- Type:
浮点数
- support_set#
所选变量的索引,按升序排序。
- Type:
整数数组
- information_criterion#
信息准则的值。
- Type:
浮点数
- cross_validation_loss#
交叉验证的平均损失。
- Type:
浮点数
参考文献
朱俊贤,温灿红,朱进,张和平,王雪琴。 最佳子集选择问题的多项式算法。 美国国家科学院院刊, 117(52):33117-33123, 2020.
- get_config(deep=True)[来源]#
获取此求解器的参数。
- Parameters:
deep (bool, default=True) – 如果为True,将返回此求解器的参数以及包含的子对象(如果它们是估计器)。
- Returns:
params – 参数名称映射到它们的值。
- Return type:
字典
- get_result()[来源]#
获取优化的结果。
- Returns:
results – 优化的结果,包括以下键:
params形状为 (dimensionality,) 的数组最优参数。
support_set整数数组最优参数的支持集。
objective_value浮点数在最优参数处的目标函数值。
information_criterion浮点数信息准则的值。
cross_validation_loss浮点数交叉验证的平均损失。
- Return type:
字典
- set_config(**params)[来源]#
设置此求解器的参数。
- Parameters:
**params (dict) – 求解器参数。
- Returns:
求解器实例。
- Return type:
自身
- solve(objective, data=None, layers=[], init_support_set=None, init_params=None, gradient=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:
形状为(维度,)的数组