开发者快速入门#

在这里,我们解释机器学习开发者如何利用skscope来促进新机器学习方法的开发。

简化实现#

skscope 实现了多种强大的稀疏约束优化算法,这些算法在机器学习社区中得到了广泛应用,并持续为机器学习问题带来新的见解。当开发者旨在实现一个新的学习器时,skscope 使他们能够最小化数学推导和编程所需的工作量。对于一些问题,实现一个新方法可能只需要几行代码。这种便利性使开发者能够专注于他们遇到的问题的表述,并快速使用 skscope 验证其表述的有效性。以下是一个示例。

考虑以下2023年发表的论文:

  • 温灿红, 王雪琴, 和张爱军. L0趋势过滤. INFORMS计算杂志 35.6 (2023): 1491-1510.

本文考虑的L0趋势滤波是一个具体的稀疏约束优化问题,其公式为:

\[\arg\min_{\boldsymbol{\theta} \in \mathbb{R}^n} \| \mathbf{y} - \mathbf{D}\boldsymbol{\theta} \|_2^2 \; \textup{ subject to: } \| \boldsymbol{\theta} \|_0 \leq s,\]

其中 \(\mathbf{y} \in \mathbb{R}^n\) 并且

\[\begin{split}\mathbf{D} = \begin{bmatrix} 1,& 0,& 0,& \cdots, &0 \\ 1,& 1,& 0,& \cdots, &0 \\ \cdots \\ \cdots \\ 1,& 1,& 1,& \cdots, &1 \\ \end{bmatrix}.\end{split}\]

从作者提供的开源仓库中,解决这个优化问题需要超过2400行代码来实现核心算法(参见INFORMSJoC/2021.0313)。然而,使用skscope,解决这个问题变得非常简单;实际上,正如后面可以看到的,不超过十行代码就可以解决同样的问题。

我们用一个包含500个正态增量随机游走实现的数据集来举例说明。

import numpy as np
np.random.seed(2023)
x = np.cumsum(np.random.randn(500))

解决问题的代码可以用以下6行代码实现:

import jax.numpy as jnp
from skscope import PDASSolver
def tf_objective(params):
    return jnp.linalg.norm(x - jnp.cumsum(params))
solver = PDASSolver(len(x), 15)
params = solver.solve(tf_objective)

请注意,在我们的实现中,我们利用了\(\mathbf{D}\boldsymbol{\theta}\)等同于\(\boldsymbol{\theta}\)的累积求和这一事实,以进一步简化。

高计算效率#

skscope 的高计算效率使用户无需高度定制和优化其特定方法。为了展示 skscope 的计算能力,我们在两个回归任务上提供了一个包含 10000 个样本和 10000 维度的数据集的计算性能和统计性能。下表展示了 scopesolverompsolver 的数值结果。

The numerical experiment results on two specific big scale SCO problems. Accuracy is equal to \(\frac{|\operatorname{supp}(\boldsymbol{\theta}^*) \cap \operatorname{supp}(\boldsymbol{\theta})|}{|\operatorname{supp}(\boldsymbol{\theta}^*)|}\) and the runtime is measured by seconds. The results are the average of 100 replications, and the parentheses record standard deviation.#

方法

线性回归准确率

线性回归运行时间

逻辑回归准确率

逻辑回归运行时间

FobaSolver

1.00(0.00)

118.07(21.00)

1.00(0.00)

108.77(26.25)

GraspSolver

1.00(0.00)

31.66(6.68)

1.00(0.00)

46.16(15.10)

HTPSolver

1.00(0.00)

38.97(8.67)

1.00(0.00)

38.97(10.85)

IHTSolver

1.00(0.00)

39.61(10.50)

1.00(0.00)

39.61(11.45)

OMPSolver

1.00(0.00)

80.43(15.35)

1.00(0.00)

78.69(23.49)

ScopeSolver

1.00(0.00)

35.24(7.55)

1.00(0.00)

33.16(9.42)

对于大多数任务,skscope 可以在个人电脑上在两分钟内返回结果。凭借这种高计算效率,机器学习开发者可以专注于问题表述,而不是优化他们的实现。

基准解决方案#

话虽如此,即使在需要优化开发者的特定方法的情况下,skscope 也可以帮助开发者。通过使用 skscope 作为基准实现,开发者可以将他们高度优化的实现与 skscope 的结果进行比较,确保他们的实现是正确的。