相似参数分组逻辑

2021-09-27 07:02:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出在一定公差范围内对参数进行分组的最佳逻辑。用一个例子来解释比较容易。。。你知道吗

Task1: parameter1=140
Task2: parameter1=137
Task3: parameter1=142
Task4: parameter1=139
Task5: parameter1=143

如果我想分组任务,如果他们彼此在2以内,我想我需要做几个通行证。例如,预期结果如下: 任务4包括任务1、任务2和任务4 任务3包括任务3和任务5

有多种可能性,因为Task1也可以覆盖3和4,但是2和5是另外两个单独的任务。基本上,我会希望最少的任务数量是在2个彼此。你知道吗

我目前正试图在excelvba中实现这一点,但我可能会在以后将代码移植到php。我真的不知道从哪里开始,因为它看起来很复杂。你知道吗

2条回答
网友
1楼 ·

我想你需要一个聚类算法。考虑以下参数-

Task1: parameter1=140
Task2: parameter1=142
Task3: parameter1=144
Task4: parameter1=146
Task5: parameter1=148

根据你的逻辑,集群在这里会变得很奇怪。如果您只需检查每个数字附近的数字,所有这些都将聚集在一起。但是140和148应该属于同一个集群吗?试试kmeans集群。会有一些灰色区域,但结果会相对准确。你知道吗

http://en.wikipedia.org/wiki/K-means_clustering

网友
2楼 ·

如果在查看任务之前确定了组边界,则可以在一个过程中对任务进行分组。下面是一个简单的示例,使用宽度为4的桶,根据您的目标将任务分组在+/-2范围内:

Dim bucket As Integer

For Each parameter In parameters
    bucket = Round(parameter / 4, 0)

    ' ... do something now that you know what bucket the task is in
Next parameter

如果固定bucket提供的组不能很好地满足您的需要,那么您需要使用一种算法来进行多次传递。因为示例中的数据是一维的,所以您可以(而且应该!)use simpler techniques than k-means clustering。你知道吗

下一个好地方可能是Literate Jenks Natural Breaks and How The Idea Of Code is Lost,在JavaScript中有一个非常好的注释Jenks Natural Breaks优化。你知道吗

相关问题