我想根据数字与其邻居相比的“大”程度对列表中的数字进行分组,但我想尽可能地通过聚类连续进行。为了澄清,让我举个例子:
假设你有列表
lst = [10, 11.1, 30.4, 30.0, 32.9, 4.5, 7.2]
然后,如果我们有 3 个组,那么如何进行聚类就很明显了。从 sklearn 运行 k-means 算法(见代码)证实了这一点。但是,当列表中的数字不是那么“方便”时,我就遇到了麻烦。假设您有以下列表:
lst = [10, 11.1, 30.4, 30.0, 32.9, 6.2, 31.2, 29.8, 12.3, 10.5]
我现在的问题有两个:
我想要某种“保留顺序的线性”聚类,它会考虑数据的顺序。对于上面的列表,聚类算法应该给我一个所需的形式输出
lst = [0,0,1,1,1,1,1,1,2,2]
如果您查看上面的输出,您还会看到我希望将值 6.2 聚集在第二个集群中,即我希望集群算法将其视为异常值,而不是一个全新的集群。
编辑为了澄清起见,我希望能够指定线性聚类过程中的聚类数量,即聚类的“最终总数”。
代码:
import numpy as np
from sklearn.cluster import KMeans
lst = [10, 11.1, 30.4, 30.0, 32.9, 4.5, 7.2]
km = KMeans(3,).fit(np.array(lst).reshape(-1,1))
print(km.labels_)
# [0 0 1 1 1 2 2]: OK output
lst = [10, 11.1, 30.4, 30.0, 32.9, 6.2, 31.2, 29.8, 12.3, 10.5]
km = KMeans(3,).fit(np.array(lst).reshape(-1,1))
print(km.labels_)
# [0 0 1 1 1 2 1 1 0 0]. Desired output: [0 0 1 1 1 1 1 1 2 2]
慕田峪4524236
达令说
相关分类