在 dbscan 中查找值差异 <0.1 的集群
Finding clusters with difference in value <0.1 in dbscan
您好,我需要对值小于或等于 0 的点进行聚类。1.My 用例是这样的。
0 1649.500000
1 0.864556
2 0.944651
3 0.922754
4 0.829045
5 0.838665
6 1.323263
7 1.397340
8 1.560655
.. .......
27 1.315072
28 1.593657
29 1.222322
... .......
... .......
2890 0.151328
2891 0.149963
2892 0.149285
2893 0.146318
2894 0.147668
2895 0.141159
这里我需要聚类以下几点。我在 dbscan
中给出了如下数据
X = X.reshape(-1,1)
db = DBSCAN(eps=0.1,min_samples=3,metric='manhattan',n_jobs=-1).fit(X)
labels = db.labels_
现在当我打印对应于以下点的点时
for i in range(n_clusters_):
print("Cluster {0} include {1}".format(i,list(np.where(labels==i))))
我的输出如下:
Cluster 0 include [array([ 1, 2, 3, ..., 2893, 2894, 2895])]
如果你能看到我提供的上述数据,第 1 个位置有 0.8 ...,第 2895 个位置有 0.141 ...但是当我给出 eps =0.1 和 metric=[=24 时,它们如何聚类=](取绝对差值)。我在这里缺少什么,我应该使用其他一些 distance.Is 我对 eps 的理解错误吗?我应该怎么做才能按照我的意愿将其聚类。
这正是 DBSCAN 的工作方式。
DBSCAN 是一种基于密度的聚类算法。简单来说,就是从一个随机点p
开始,如果p
周围epsilon
范围内有min_points
个点,那么它就成为核心点。如果两个核心点在 epsilon
范围内,它们将被放在同一个集群中。
这意味着:相距较远(例如,大于epsilon)的两个点可以通过其间的其他核心点连接,因此属于同一簇
您选择的 epsilon 和 min_points 参数似乎会产生一个大簇(点 0 除外)
DBSCAN epsilon 不是 最大簇半径,而是步长 大小。集群是通过许多这样的步骤构建的,因此距离可以更大。
你要找的可能是Leader集群。一种较旧且更简单的算法,但并未特别广泛使用 - 聚类的目的是了解数据的结构,而不是强加预定义的结构。
由于您的数据是一维的,为什么不直接对数据进行排序,然后确定您喜欢的阈值。或者只是在你想要的任何阈值处进行切割,例如在 0、0.1、0.2、0.3 处使用简单的 x < 0.1
掩码,一个 numpy 内置功能。
您好,我需要对值小于或等于 0 的点进行聚类。1.My 用例是这样的。
0 1649.500000
1 0.864556
2 0.944651
3 0.922754
4 0.829045
5 0.838665
6 1.323263
7 1.397340
8 1.560655
.. .......
27 1.315072
28 1.593657
29 1.222322
... .......
... .......
2890 0.151328
2891 0.149963
2892 0.149285
2893 0.146318
2894 0.147668
2895 0.141159
这里我需要聚类以下几点。我在 dbscan
中给出了如下数据X = X.reshape(-1,1)
db = DBSCAN(eps=0.1,min_samples=3,metric='manhattan',n_jobs=-1).fit(X)
labels = db.labels_
现在当我打印对应于以下点的点时
for i in range(n_clusters_):
print("Cluster {0} include {1}".format(i,list(np.where(labels==i))))
我的输出如下:
Cluster 0 include [array([ 1, 2, 3, ..., 2893, 2894, 2895])]
如果你能看到我提供的上述数据,第 1 个位置有 0.8 ...,第 2895 个位置有 0.141 ...但是当我给出 eps =0.1 和 metric=[=24 时,它们如何聚类=](取绝对差值)。我在这里缺少什么,我应该使用其他一些 distance.Is 我对 eps 的理解错误吗?我应该怎么做才能按照我的意愿将其聚类。
这正是 DBSCAN 的工作方式。
DBSCAN 是一种基于密度的聚类算法。简单来说,就是从一个随机点p
开始,如果p
周围epsilon
范围内有min_points
个点,那么它就成为核心点。如果两个核心点在 epsilon
范围内,它们将被放在同一个集群中。
这意味着:相距较远(例如,大于epsilon)的两个点可以通过其间的其他核心点连接,因此属于同一簇
您选择的 epsilon 和 min_points 参数似乎会产生一个大簇(点 0 除外)
DBSCAN epsilon 不是 最大簇半径,而是步长 大小。集群是通过许多这样的步骤构建的,因此距离可以更大。
你要找的可能是Leader集群。一种较旧且更简单的算法,但并未特别广泛使用 - 聚类的目的是了解数据的结构,而不是强加预定义的结构。
由于您的数据是一维的,为什么不直接对数据进行排序,然后确定您喜欢的阈值。或者只是在你想要的任何阈值处进行切割,例如在 0、0.1、0.2、0.3 处使用简单的 x < 0.1
掩码,一个 numpy 内置功能。