我有N个绿点和M个红点(其中没有三个是共线的)。我想告诉我们是否可以用一条线来划分这些点,这样所有绿点都在一侧,所有红点都在另一侧。如果有这样的线我想找到它的等式。该线无法通过这些点。解决此问题的最快算法是什么?这不是家庭作业,只是我最近想到的一个问题。
答案 0 :(得分:3)
为这两个集构建convex hulls。如果它们相交,则没有这样的分界线
如果它们是两个模式集Xi和Xj,则称它们是线性可分的 凸壳是不相交的
当船体脱节时,将might be found与rotating 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)。