线性分离两组

时间:2009-11-08 02:21:57

标签: c# c algorithm

我有三个数组(用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。

我需要一种能够线性分离这两组点的算法。即它应该从这个等式返回a和b系数:

y = a*x + b

这是一般线方程。

请看这里的第一张图片:

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

更好地了解我需要的东西。

5 个答案:

答案 0 :(得分:2)

我在第一页看了你的图表,但我仍然不清楚你真正想要的结果。我的猜测是你想要一个近似线性线的最佳系数,它最适合两组点?对于Perceptron而言,你的“神经网络”似乎就是这样。可能有助于澄清?

答案 1 :(得分:2)

为一组数据点找到最佳拟合线(或多项式曲线)的简单方法是使用Least Squares method。该页面和与其链接的其他页面描述了数学,并且用于拟合直线的线性最小二乘计算的公式是here。但是,这些页面并没有以您喜欢的编程语言为您提供封装解决方案。

答案 2 :(得分:1)

Support Vector Machines会做你想要的(尽管有点难以实现)

答案 3 :(得分:1)

如果你想从感知器解决方案回来,只需输入“零”作为目标并解决感知器公式中输入为零的问题,这就是答案。

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

答案 4 :(得分:0)

如果你尝试其中一个集合的convex hull的所有线性边缘(外推到无穷大),那么这应该给你一条线来分隔这两个集合,否则就不可能将它们线性分开。“ / p>