开发者快速入门#
在这里,我们解释机器学习开发者如何利用skscope来促进新机器学习方法的开发。
简化实现#
skscope 实现了多种强大的稀疏约束优化算法,这些算法在机器学习社区中得到了广泛应用,并持续为机器学习问题带来新的见解。当开发者旨在实现一个新的学习器时,skscope 使他们能够最小化数学推导和编程所需的工作量。对于一些问题,实现一个新方法可能只需要几行代码。这种便利性使开发者能够专注于他们遇到的问题的表述,并快速使用 skscope 验证其表述的有效性。以下是一个示例。
考虑以下2023年发表的论文:
温灿红, 王雪琴, 和张爱军. L0趋势过滤. INFORMS计算杂志 35.6 (2023): 1491-1510.
本文考虑的L0趋势滤波是一个具体的稀疏约束优化问题,其公式为:
其中 \(\mathbf{y} \in \mathbb{R}^n\) 并且
从作者提供的开源仓库中,解决这个优化问题需要超过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 维度的数据集的计算性能和统计性能。下表展示了 scopesolver 和 ompsolver 的数值结果。
方法 |
线性回归准确率 |
线性回归运行时间 |
逻辑回归准确率 |
逻辑回归运行时间 |
|---|---|---|---|---|
|
1.00(0.00) |
118.07(21.00) |
1.00(0.00) |
108.77(26.25) |
|
1.00(0.00) |
31.66(6.68) |
1.00(0.00) |
46.16(15.10) |
|
1.00(0.00) |
38.97(8.67) |
1.00(0.00) |
38.97(10.85) |
|
1.00(0.00) |
39.61(10.50) |
1.00(0.00) |
39.61(11.45) |
|
1.00(0.00) |
80.43(15.35) |
1.00(0.00) |
78.69(23.49) |
|
1.00(0.00) |
35.24(7.55) |
1.00(0.00) |
33.16(9.42) |
对于大多数任务,skscope 可以在个人电脑上在两分钟内返回结果。凭借这种高计算效率,机器学习开发者可以专注于问题表述,而不是优化他们的实现。
基准解决方案#
话虽如此,即使在需要优化开发者的特定方法的情况下,skscope 也可以帮助开发者。通过使用 skscope 作为基准实现,开发者可以将他们高度优化的实现与 skscope 的结果进行比较,确保他们的实现是正确的。