这样做需要哪种算法?

时间:2010-08-14 18:35:14

标签: algorithm optimization noise

我有这种形式的数据:

  • 对于x = 1,y是{1,4,6,7,9,18,16,19}
  • 之一
  • 对于x = 2,y是{1,5,7,4}
  • 之一
  • 对于x = 3,y是{2,6,4,8,2}
  • 之一
  • ....
  • 对于x = 100,y是{2,7,89,4,5}
  • 之一

每组中只有一个值是正确的值,其余的是随机噪声。

我知道正确的值描述了参数未知的正弦函数。如何找到正确的值组合,每组一个? 我看起来像“旅行推销员”组合优化算法

4 个答案:

答案 0 :(得分:2)

您正在尝试执行curve fitting,根据您想要适合曲线的曲线类型(线性,多项式等),有几种算法。我不知道是否有一个特定的正弦曲线算法(傅立叶近似),但我的第一个想法是使用多项式拟合算法和正弦的多项式近似。

我想知道您是否需要在另一个更大的程序中执行此操作,或者您是否尝试单独执行此任务。如果是这样,那么你最好使用统计软件包,我首选的是R。它允许您导入数据和拟合曲线并在几行中绘制图形,您也可以在批处理模式下使用R从脚本甚至程序中调用它(这是我倾向于这样做的)。 / p>

答案 1 :(得分:2)

这取决于你的“完全”是什么意思,以及你事先知道的。如果您知道频率w,并且正弦曲线是无偏的,那么您就有了一个等式

cos(w * x)+ b sin(w * x)

在不同的x值处有两个(x,y)点,你可以找到a和b,然后检查生成的曲线对所有其他点。选择具有最小y个观测值的两个x值,并对所有y进行尝试。如果存在偏差,即您的等式为

a cos(w * x) + b sin(w * x) + c

您需要查看三个x值。

如果你不知道频率,你可以尝试相同的技术,不幸的是解决方案可能不是唯一的,可能有多个适合。

编辑根据我的理解你的问题,每个x都有一个真正的y值和一堆不正确的值。你想找到真正的价值观。执行此操作的最佳方法是通过少量点拟合曲线,并检查曲线是否适合其他集合中的y值。

如果并非所有x值都具有有效的y值,则应用相同的技术,但是您需要查看更大的对,三元组或四元组(基本上每对,三元组或四元组具有不同的y值)

如果你的问题是别的,我怀疑它是,请指明它。

  1. 定义正弦曲线。大多数人认为这意味着a cos(w * x) + b sin(w * x) + c形式的功能。如果您的意思不同,请指定它。
  2. 2准确指出成功的样子。比如说10分而不是100分的例子会很好。

    目前还不清楚这与组合优化有什么关系。

答案 2 :(得分:0)

正弦方程是如此通用,如果你取所有y的任意随机值,这些值可以拟合为正弦函数,除非你给出条件,例如。频率<100或所有参数都是整数,它不可能在理论上区分噪声和数据,因此首先要从数据源/实验中找到这样的条件。

答案 3 :(得分:0)

通过正弦曲线,你的意思是一个函数是增加n步,然后减少n步,等等?如果是这样,您可以将数据建模为由上行链路和下行链路连接的节点序列。对于每个节点(y的可能值),记录仅升序或降序链的链的长度和结束值(每个节点将有多个链)。然后扫描相等长度和相反方向的连续运行,以一些初始偏移为模。