我有两个数据集(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;
答案 0 :(得分:0)
这是统计和机器学习中的well-known problem:给定一些标记的数据点,确定新数据点的最可能标签。在1D的情况下,它通常归结为确定阈值x并且说“x以下的任何东西都有标签A”和“x以上的任何东西都有标签B”。
有许多算法:您可以使用例如logistic regression,neural networks或support vector machines。算法的选择取决于数据的假设以及您可用的工具和库;例如,SVM显然很难实现自己。
如果您告诉数据是如何生成的,或者它是否来自众所周知的统计分布,那么解决方案的快捷方式可能不那么复杂但仍然足够。