我有三个数组(用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
更好地了解我需要的东西。
答案 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>