Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何根据值的出现频率对其进行聚类?_Algorithm_Statistics_Cluster Analysis_Frequency_Similarity - Fatal编程技术网

Algorithm 如何根据值的出现频率对其进行聚类?

Algorithm 如何根据值的出现频率对其进行聚类?,algorithm,statistics,cluster-analysis,frequency,similarity,Algorithm,Statistics,Cluster Analysis,Frequency,Similarity,我正在研究一种聚类算法,我需要根据数据中的频率对值进行聚类。这将表明哪些值不重要,并且将被视为比单个实体更大的集群的一部分 我是数据科学新手,想知道实现这一点的最佳算法/方法 例如,我有以下数据集。第一列是特性值,第二列表示它们的出现频率 Value = [1, 1.5, 2, 3, 4, 6, 8, 16, 32, 128] Frequency = [207, 19, 169, 92, 36, 7, 12, 5, 2, 2] Here, Frequency[i] corresponds to

我正在研究一种聚类算法,我需要根据数据中的频率对值进行聚类。这将表明哪些值不重要,并且将被视为比单个实体更大的集群的一部分

我是数据科学新手,想知道实现这一点的最佳算法/方法

例如,我有以下数据集。第一列是特性值,第二列表示它们的出现频率

Value = [1, 1.5, 2, 3, 4, 6, 8, 16, 32, 128]
Frequency = [207, 19, 169, 92, 36, 7, 12, 5, 2, 2]

Here, Frequency[i] corresponds to Value[i]
频率可以被认为是一个值的重要性。表示值重要性的另一个因素是数组中元素之间的距离。例如,与32或128相比,1.5并没有那么重要,因为它有更接近的元素,如1和2

在对这些值进行聚类时,我需要查看值之间的距离以及它们出现的频率。上述问题的可能输出为

Clust_value = [(1, 1.5), 2, 3, 4, (6, 8), 16, (32, 128)]
这不是最好的集群,而是一个可能的答案。我需要知道解决这个问题的最佳算法

首先,我试图在不考虑值数组中元素的分布的情况下解决这个问题,但在某些情况下给出了错误的答案。我们再次尝试使用均值和中位数对值进行聚类,但没有成功的结果

我们尝试比较邻居的频率,然后将这些值合并到一个簇中。我们还试图找到值数组元素之间的最小距离,如果它们之间的差异大于阈值,则将它们放入一个簇中,但如果它们的频率较低,则无法对值进行聚类。我还在线寻找聚类算法,但没有得到任何与上面定义的问题相关的有用资源


有什么更好的方法来解决这个问题吗?

你需要拿出一些数学质量标准来衡量是什么让一个解决方案比另一个更好。除非您有数千个数字,否则您可以采用一种相当“暴力”的方法:从第一个数字开始,在质量提高的情况下添加下一个数字,否则就开始一个新的集群。因为您的数据是经过排序的,所以这将非常有效,并找到一个相当好的解决方案(您可以尝试其他拆分以进一步提高质量)

因此,这一切归结为您需要指定质量


不要假设现有标准(如k-均值方差)适用于您。最多,您可能能够找到一种数据转换,使您的需求变成差异,但这也是您的问题所特有的。

您需要提出一些数学质量标准,说明是什么使一个解决方案优于另一个解决方案。除非您有数千个数字,否则您可以采用一种相当“暴力”的方法:从第一个数字开始,在质量提高的情况下添加下一个数字,否则就开始一个新的集群。因为您的数据是经过排序的,所以这将非常有效,并找到一个相当好的解决方案(您可以尝试其他拆分以进一步提高质量)

因此,这一切归结为您需要指定质量


不要假设现有标准(如k-均值方差)适用于您。最多,您可能能够找到一种数据转换,使您的需求变为差异,但这也是您的问题所特有的。

这不是最好的集群,而是一个可能的答案。
-问题似乎没有很好地定义。例如,为什么群集32、128在这里,但单独留下16个比群集16和32更好<代码>给出了错误答案-您如何准确判断什么是对的还是错的?对于仅基于频率的聚类,我可能会建议采用Shannon Fano或Huffman编码的方法。@500内部服务器错误我无法正确地描述问题。问题是要根据两个因素从值集群数组中删除值—它们的频率和节点之间的距离。32、128形成集群,基本形成频率为4的集群。如果加入16,集群频率将为7,128的集群频率将为2。因此,为了在集群中实现可比频率,32与128配对,而不是16配对,但是32比128更接近16。希望我现在明白了
这不是最好的集群,但可能是一个答案。
-问题似乎没有很好地定义。例如,为什么群集32、128在这里,但单独留下16个比群集16和32更好<代码>给出了错误答案-您如何准确判断什么是对的还是错的?对于仅基于频率的聚类,我可能会建议采用Shannon Fano或Huffman编码的方法。@500内部服务器错误我无法正确地描述问题。问题是要根据两个因素从值集群数组中删除值—它们的频率和节点之间的距离。32、128形成集群,基本形成频率为4的集群。如果加入16,集群频率将为7,128的集群频率将为2。因此,为了在集群中实现可比频率,32与128配对,而不是16配对,但是32比128更接近16。希望我现在明白了!