用一条线在一个平面上划分点

时间:2017-02-03 10:19:21

标签: algorithm computational-geometry

我有N个绿点和M个红点(其中没有三个是共线的)。我想告诉我们是否可以用一条线来划分这些点,这样所有绿点都在一侧,所有红点都在另一侧。如果有这样的线我想找到它的等式。该线无法通过这些点。解决此问题的最快算法是什么?这不是家庭作业,只是我最近想到的一个问题。

3 个答案:

答案 0 :(得分:3)

为这两个集构建convex hulls。如果它们相交,则没有这样的分界线

Citation:

  

如果它们是两个模式集Xi和Xj,则称它们是线性可分的   凸壳是不相交的

当船体脱节时,将might be foundrotating calipers

对齐

答案 1 :(得分:1)

这正是SVMs所做的。更具体地说,如果SVM碰巧是linearly separable,则SVM会找到距离两组点更远的线;否则,可以调整算法以找到某种“尽力而为”的解决方案。

有很多资源可以让您更详细地了解SVM,但基本上您需要使用线性内核。例如,这里是the SVM implementation in scikit-learn,带有一些图像。

答案 2 :(得分:0)

通过将问题视为二元分类问题,使用(单层)perceptron来学习separating hyperplane(二维直线)。

如果两组点为linearly separable,则存在一个这样的超平面,感知器算法保证收敛,解决方案将为您提供hyperplane(二维直线)分离两个班级(绿色和蓝色)。

如果解决方案不存在,算法将不会收敛,我们可以在有限次数的迭代后停止。

在任何一种情况下,在算法停止后(无论是收敛还是超过最大迭代),我们都可以检查输出线两侧的所有点是否都是单色的(即,一侧仅包含红色,另一侧side只包含绿点),如果是,则返回行的等式,否则输出不存在这样的行。

我们也可以使用perceptron pocket algorithm而不是使用天真的实现,但是为了我们的目标,天真的实现也会起作用(https://en.wikipedia.org/wiki/Perceptron)。