线分隔两组点


19

是否有办法确定两条点是否可以用一条线分开?

我们有两套分的和是否有分开的线路和,使得所有的点,只有上线的一侧,所有的点,只有在另一边。B A B A A B BABABAABB

我想到的最幼稚的算法是为和构建凸多边形,并测试它们的交集。看起来时间像构造凸多边形一样,其时间复杂度应为。实际上,我不希望时间复杂度有任何改善,我不确定它是否可以改善。但是,至少应该有一种更漂亮的方法来确定是否有这样一条线。B O n log h ABO(nlogh)

Answers:


19

uli和Dave Clarke都正确地观察到这是一个线性规划问题,即使在更高的维度上(这两个点集可以被超平面分开吗?),因此可以在多项式时间内解决。但是因为您的点位于平面上,所以您的问题实际上可以在时间内解决,其中是点的总数。nO(n)n

最简单的解决方案可能是Seidel的随机算法。随机均匀地选择一个输入点,然后递归计算以外的所有点的分隔线。pp p

  • 如果不存在这样的线,则原始点是不可分离的。

  • 如果在的正确一侧,则分离原始点。p

  • 如果在的错误一侧,则原始点可以通过分隔一条线,或者原始点根本不可分离。这种情况很容易检查时间[运动]。p ø Ñ ppO(n)

该算法以时间高概率运行(相对于算法的随机选择)。有关更多详细信息,请参见原始论文或任意数量的在线讲义。O(n)


非常感谢您,我将深入研究本文。
com 2012年

在您的第三种情况下,您指出可能会使得该行通过,这对知道有什么帮助?p
Tarrasch 2013年

10

您的两个数据集的属性是 线性可分离性,简单来说,就是有一条线将它们分开。许多机器学习致力于查找线性分类器,这些线性分类器执行您感兴趣的分离。

当您谈论线条时,我将假设您的点在平面上。你想要做的就是找到价值观,和,使得对所有点在集,和所有点中,。因此,不等式可以看作是集合的分类器。w1w2w3(a1,a2)Aw1a1+w2a2w3(b1,b2)Bw1b1+w2b2<w3w1x+w2yw3A

有很多机器学习算法可用于确定最佳线(线性回归,逻辑回归等)。这些将基于某些错误度量找到值。然后,您可以测试是否所有点均已正确分类。也就是说,所有值是否都满足上面的方程式,并且对于是否类似。w1,w2,w3AB

由于您仅对是否存在这样的行感兴趣,因此需要使用现有技术(尽管这可能会更简单)。只需根据自由变量设置以下。w1,w2,w3

w1a1i+w2a2iw3每个,其中。i=1,..,|A|A={(a11,a21),,(a1|A|,a2|A|)}

Ĵ = 1 | B | B = { b 1 1b 1 2b | B | 1b | B | 2}w1b1j+w2b2j<w3对于每个,其中。j=1,..,|B|B={(b11,b21),,(b1|B|,b2|B|)}

如果这些约束是一致的,则存在一行。


5

如果我没记错的话,支持向量机构造分离的超平面。如果选择尺寸则超平面当然会变成一条线。您可能必须检查是否需要满足其他假设。在两个方面,整个方法可能会大大简化,因此运行时可能比常规方法更好。2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.