SVM Kernel 的 O(n) 时间

SVM Kernel's O(n) time

我无法理解尽管在 O(n^d) 维 space 中工作,但计算内核 K(x,z) 只需要线性时间。 请解释一下。我是ML的新手。

为了计算 K(x, z),您必须:

  • 执行 O(n) 乘法 x1 * z1x2 * x2、...、xn * zn
  • 执行 O(n) 加法 (x1 * z1) + (x2 * x2) + ... + (xn * zn),
  • 执行两个 O(1) 操作 _ + c_ ^ d

因此,计算 K(x, z) = (dot(x, z) + c)^d 需要 O(n) 时间。

特征 space 的维度比计算内核所需的时间高得多是完全正常的:否则我们一开始就不需要内核,因为我们可以只计算特征直接向量。

如果您想要一个更极端的例子,请查看 K(x, y) = min(x, y) 非负实数 x, y。评估 min(x, y) 需要常数时间。但是,特征space是L^2(R)(实线上的平方可积函数,与标准的Hilbert-space标量积),特征映射是phi(x) = chi_{[0, x]},其中chi_{[0, x]}表示区间[0, x]的特征函数。因此,特征 space 是无限维的,但计算内核所需的时间是常数。