代码之家  ›  专栏  ›  技术社区  ›  Matt

求乘积和多项式最佳权的快速算法?

  •  2
  • Matt  · 技术社区  · 8 年前

    我正在寻找一种比暴力算法更快的算法,用于在这样的问题中找到最佳系数(又称权重):

    定义 样品 作为一系列 不

    S_0_0  S_0_1 S_0_2 ... S_0_N
    S_1_0  S_1_1 S_1_2 ... S_1_N
    ...
    S_M_0  S_M_1 S_M_2 ... S_M_N
    

    第 ,也是巨大的,比如P=2000000。这是另一个P行X N列的矩阵。它看起来类似于示例集:

    W_0_0  W_0_1 S_0_2 ... W_0_N
    W_1_0  W_1_1 S_1_2 ... W_1_N
    ...
    W_P_0  W_P_1 S_P_2 ... W_P_N
    

    我试图找到一系列的权重(即权重集中的右边一行)来最大化下面的总和(即哪一行) 十

    W_x_0 * S_0_0  +  W_x_1 * S_0_1  + ... +  W_x_N * S_0_N +
    W_x_0 * S_1_0  +  W_x_1 * S_1_1  + ... +  W_x_N * S_1_N +
    ...
    W_x_0 * S_M_0  +  W_x_1 * S_M_1  + ... +  W_x_N * S_M_N
    

    两组数据 W型 S码 s) 从文件加载。这个 S码 是x86 CPU支持的整个范围内的双精度浮点数(从负到正)。这个 W型 我们可以假设s是整数。

    蛮力方法非常简单:对于每个权重行,将其乘以样本集中的每个样本行,同时保持一个运行总和。记录每行重量的总和,并在最后选出最好的。

    现在,我认为更聪明/更快的算法的空间在于权重集的组成。我们可以假设每行的权重集中只有一个数字发生变化。因此,权重集可能如下所示(为了简洁起见,这里N=5):

    1 1 1 1 1
    1 1 1 1 2
    1 1 1 2 2
    1 1 2 2 2
    1 2 2 2 2
    2 2 2 2 2
    2 2 2 2 1
    2 2 2 1 1
    2 2 1 1 1
    

    有人知道一个适合这里的算法或库吗?

    编辑1: 我在原来的帖子中有一个输入错误:权重设置错误地显示了从一行到下一行的两个变化。实际上,每行应该只有一个变化。此外,不要过多地解读更改的“模式”:主要思想是每行只有一个更改,但是如何修改这些更改以适应特定的算法。

    编辑2: 我 示例权重集现在真正只显示每行一个更改。

    1 回复  |  直到 8 年前
        1
  •  5
  •   גלעד ברקן    8 年前

    至少要注意

    W_x_0 * S_0_0  +  W_x_1 * S_0_1  + ... +  W_x_N * S_0_N +
    W_x_0 * S_1_0  +  W_x_1 * S_1_1  + ... +  W_x_N * S_1_N +
    ...
    W_x_0 * S_M_0  +  W_x_1 * S_M_1  + ... +  W_x_N * S_M_N
    

    等于

    W_x_0 * (S_0_0 + S_1_0 +...S_M_0) +
    W_x_1 * (S_0_1 + S_1_1 +...S_M_1) +
    ...
    W_x_N * (S_0_N + S_1_N +...S_M_N)
    

    也就是说我们可以把 S ,然后对列表中的每个权重向量运行该操作。

    可能会有一个基于“最远点查询”(在多个维度)的优化,我不是那么了解,但会尝试调查。