如何有效地识别两组数字之间的自然分割点?

时间:2013-08-26 13:09:47

标签: php arrays math categories intersection

我有两个数据集(A& B)。它们每个都有1000个数字。

99%的时间:A< 5< = B

然而,1%的时间B <1。 5&lt;甲

如果分割点未知 - x - 如何使用任何给定的数据集确定x

显然Max(A)Min(B)具有误导性。而且我宁愿不在整个范围内(甚至只是在Min(B)和Max(A)之间)猜测并确定最大可能的分割点。

Sample Dataset

A 1
A 1
A 1
A 2
B 2 <--anomoly
A 3
A 3
A 3
A 4
A 5 <--anomoly
B 5 <--division, or `x`
B 5
B 5
B 5
A 6 <--anomoly
B 7
B 8
B 8
B 8
B 9
B 9
B 10
B 10

假设存在另一对数据集(C&amp; D)。在允许某个异常阈值后,如何找到C变为D的点。

你推荐什么?

这是一个粗略的“猜测”策略。我想在没有“猜测”循环的情况下得到相同的结果。

$maxProbable = 0;
$pointOfDivision = 0;
for ($i = Min($b); $i <= Max($a); $i++) {
    // get probability $i is in_array($a)
    $countBelow = below($i,$a); // assume function returns count of $a items below $i
    $countAbove = above($i,$b); // assume function returns count of $b items above $i
    $probBelow = $countBelow/count($a);
    $probAbove = $countAbove/count($b);
    if (($probBelow+$probAbove) > $maxProbable) {
        $maxProbable = $probBelow+$probAbove;
        $pointOfDivision = $i;
    }
}
echo $pointOfDivision;

1 个答案:

答案 0 :(得分:0)

这是统计和机器学习中的well-known problem:给定一些标记的数据点,确定新数据点的最可能标签。在1D的情况下,它通常归结为确定阈值x并且说“x以下的任何东西都有标签A”和“x以上的任何东西都有标签B”。

有许多算法:您可以使用例如logistic regressionneural networkssupport vector machines。算法的选择取决于数据的假设以及您可用的工具和库;例如,SVM显然很难实现自己。

如果您告诉数据是如何生成的,或者它是否来自众所周知的统计分布,那么解决方案的快捷方式可能不那么复杂但仍然足够。