我有一组数据。 对于简单的情况:
value: 0, 3, 6, 8, 10, 13, 14
type: o, o, x, x, x, o, o
计划是使用一个简单的“阈值”来分类。 这个想法是应用 mod + shift 来更好地分类: 例如,x = x mod 12 那么该对的集合就变成了
(value) % 12: 0, 1(13), 2(14), 3, 6, 8, 10
type: o, o, o, o, x, x, x
现在我们可以使用阈值 = 5 进行分类而不会出现错误。
这种 mod & shift 分类算法有正式的算法吗?
最佳答案
警告:我在这方面有点生疏。
一些初步想法:
有Kernels隐含地做类似的事情。
径向基函数内核 RBF是我能想到的一件事。或者也许只是一个Polynomial Kernel .
模数不能作为内核使用,因为它必须是对偶(-->内核技巧)并且必须是双射函数。但模数会丢失信息并且无法“撤消”。
我 fork 了 Karpathy 的 SVM-JS demo并将数据更改为上面的示例数据。这提供了一个非常简单的可视化,在您的示例中,到以 8 为中心的 (1D-) 圆的径向距离将成为一个很好的分类器。
但是考虑到您想要表示模数,并且由于您可能还有 (6+12=) 18、20 或 22 处的“x”值,这让我想起了周期信号。对于周期性信号,您只需将输入数据转换到“傅里叶空间”并对其进行分类。我将其放在引号中,因为近似值可能就可以了。
所以,让我们尝试将核函数设为(模数,余数)映射。 (大约类似于幅度和相位)。 (旁注:谷歌搜索“傅立叶变换核机器学习”表明这可能是一件事。)
Phi(x) = (x mod N, x rem N)
。
据我所知,这是一个有效的特征映射函数。然后您可以将其应用到 SVM 上。
关于machine-learning - 应用 mod 运算进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59940958/