我正在研究一种聚类算法,我需要根据数据中的频率对值进行聚类。这将表明哪些值不重要,并且将被视为比单个实体更大的集群的一部分。
我是数据科学的新手,想知道实现这一目标的最佳算法/方法。
例如,我有以下数据集。第一列是属性值,第二列表示它们的出现频率。
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]
频率可以被认为是价值的重要性。表示值的重要性的另一件事是数组中元素之间的距离。例如,1.5与32或128相比并不重要,因为它具有更接近的元素,如1和2。
当接近聚类这些值时,我需要查看值之间的距离以及它们出现的频率。上述问题的可能输出是
Clust_value = [(1, 1.5), 2, 3, 4, (6, 8), 16, (32, 128)]
这不是最好的群集,而是一个可能的答案。我需要知道解决这个问题的最佳算法。
首先,我尝试在不考虑值数组中元素的扩散的情况下解决此问题,但在某些情况下这给出了错误的答案。我们尝试再次使用均值和中位数来聚类值,但没有成功的结果。
我们尝试比较邻居的频率,然后将值分成一个群集。我们还试图找到值数组的元素之间的最小距离,然后如果它们的差异大于阈值则将它们放入一个簇中,但如果它们具有低频率则不能聚集值。我还在线查找了聚类算法,但没有获得与上面定义的问题相关的任何有用资源。
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
你需要提出一些数学质量标准,以确定一种解决方案比另一种解决方案更好。除非你有数千个数字,否则你可以买得起一种相当“强力”的方法:从第一个数字开始,只要你的质量提高就添加下一个数字,否则开始一个新的集群。因为您的数据排序,这将非常有效并找到一个相当不错的解决方案(您可以尝试额外的拆分以进一步提高质量)。
所以这一切归结为你需要指定质量。
不要认为现有标准(例如k-means的差异)对您有用。最多,您可以找到一个数据转换,使您的需求变为差异,但这也将特定于您的问题。