【问题标题】:Lineary separate two sets线性分离两组
【发布时间】:2009-11-08 02:21:56
【问题描述】:

我有三个数组(它是用 C 编写的,但这并不重要,它可以是任何语言):

  float x[] = {
        0.72, 0.91, 0.46, 0.03, 0.12, 0.96, 0.79, 0.46, 0.66, 0.72, 0.35, -0.16,
        -0.04, -0.11, 0.31, 0.00, -0.43, 0.57, -0.47, -0.72, -0.57, -0.25,
        0.47, -0.12, -0.58, -0.48, -0.79, -0.42, -0.76, -0.77
  };

  float y[] = {
        0.82, -0.69, 0.80, 0.93, 0.25, 0.47, -0.75, 0.98, 0.24, -0.15, 0.01,
        0.84, 0.68, 0.10, -0.96, -0.26, -0.65, -0.97, -0.03, -0.64, 0.15, -0.43,
        -0.88, -0.90, 0.62, 0.05, -0.92, -0.09, 0.65, -0.76      
  };

  int outputs[] = {
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  };

前两个数组是二维平面上一个点的 X 和 Y 坐标。

第三个数组决定点是来自集合 1 还是集合 -1。

我需要一个算法来线性地分离这两组点。 IE。它应该从这个方程返回 a 和 b 系数:

y = a*x + b

这是一个一般的直线方程。

看这里的第一张图片:

http://dynamicnotions.blogspot.com/2008/09/single-layer-perceptron.html

为了更好地了解我需要什么。

【问题讨论】:

    标签: c# c algorithm


    【解决方案1】:

    我已经查看了您在第一页上的图表,但我仍然不清楚您真正想要的结果是什么。我的猜测是您想要“最适合”两组点的线性线的近似值的最佳系数?看来你的感知器“神经网络”已经做到了。可能有助于澄清?

    【讨论】:

    • 是的,感知器可以工作,并且在学习算法之后,它可以判断一个点是来自集合 1 还是 -1。但我不知道如何获得将两组与感知器输出分开的实际线。我知道这与它的重量有关。
    • 如果您训练了一个感知器来执行此操作,您可以恢复斜率并截取。斜率将是 x 输入上的系数超过 y 输入上的系数。截距将是您用于偏差的常数乘以偏差的权重。简单吗?
    • x 输入的哪个系数?有更多的 x 输入和 y 输入。
    • 你有一个 x 输入,一个 y 输入,一个偏置输入。优化所有数据点。
    • 谢谢。我想我现在明白了,我已经使用 GD 绘制了一个漂亮的图形,并且我计算出的线将这两组分开。
    【解决方案2】:

    Support Vector Machines 会做你想做的事(虽然有点难以实现)

    【讨论】:

      【解决方案3】:

      如果您想从感知器解决方案返回,只需输入“零”作为目标,并在感知器公式中求解哪些输入给出零,这就是答案。

      更一般地说,您可能想要这个:http://en.wikipedia.org/wiki/Linear_discriminant_analysis

      【讨论】:

        【解决方案4】:

        如果您尝试其中一个集合的convex hull 的所有线性边(外推到无穷大),那么这应该会为您提供一条分隔这两个集合的线,否则无法将它们线性分开。

        【讨论】:

          猜你喜欢
          • 2020-09-14
          • 1970-01-01
          • 2014-06-29
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 2016-07-04
          • 2018-07-30
          • 2015-12-30
          相关资源
          最近更新 更多