DBSCAN eps 不正确的行为
DBSCAN eps incorrect behaviour
from sklearn.cluster import DBSCAN
import numpy as np
X=np.array([1,9,11,13,14,15,19]).reshape(-1, 1)
db=DBSCAN(eps=3, min_samples=1).fit(X)
print(db.labels_)
打印:
[0 1 1 1 1 1 2]
而医生说:
eps : float, optional
The maximum distance between two samples for them to be considered
as in the same neighborhood.
这里 9 和 15 在同一个簇中,而它们之间的欧氏距离为 6,即 >3
我错过了什么?
为了指出为什么它们在同一个集群中,让我给你一个关于 DBSCAN 做什么的高级解释。
- 通过连接数据点构建图表
- 测量每个连通分量的大小
- 丢弃小于阈值的成分,在
sklearn
中是min_sample
参数。
esp
控制连接两个数据点的最大距离。对于您的数据集,使用 [a-b] 表示连接的符号,您有:
[9-11]、[11-13]、[13-14]、[14-15]
所以这些点都在同一个组件中,并且组件比你的min_sample
参数大,所以它被认为是一个有效的集群。
这是因为点链在一起。 15 小于 14 的 eps
,因此它包含在该簇中。
您可以在此处查看行为:
X=np.array([1,9,11,13,14,15,17,19]).reshape(-1, 1)
db=DBSCAN(eps=3, min_samples=1).fit(X)
print(db.labels_)
给出:[0 1 1 1 1 1 1 1]
社区与集群不同。
集群是许多社区的联合体。 Epsilon 是距一个社区中心的最大距离;但是如果你合并多个社区,如果你的数据是 dense.
,那么距离可以变得任意大
但是sklearn中对参数的描述也是错误的,不仅仅是误导。当三角不等式成立时,同一邻域中的点 可以 相隔两个 epsilon(如果不使用度量则更多)。
from sklearn.cluster import DBSCAN
import numpy as np
X=np.array([1,9,11,13,14,15,19]).reshape(-1, 1)
db=DBSCAN(eps=3, min_samples=1).fit(X)
print(db.labels_)
打印:
[0 1 1 1 1 1 2]
而医生说:
eps : float, optional The maximum distance between two samples for them to be considered as in the same neighborhood.
这里 9 和 15 在同一个簇中,而它们之间的欧氏距离为 6,即 >3
我错过了什么?
为了指出为什么它们在同一个集群中,让我给你一个关于 DBSCAN 做什么的高级解释。
- 通过连接数据点构建图表
- 测量每个连通分量的大小
- 丢弃小于阈值的成分,在
sklearn
中是min_sample
参数。
esp
控制连接两个数据点的最大距离。对于您的数据集,使用 [a-b] 表示连接的符号,您有:
[9-11]、[11-13]、[13-14]、[14-15]
所以这些点都在同一个组件中,并且组件比你的min_sample
参数大,所以它被认为是一个有效的集群。
这是因为点链在一起。 15 小于 14 的 eps
,因此它包含在该簇中。
您可以在此处查看行为:
X=np.array([1,9,11,13,14,15,17,19]).reshape(-1, 1)
db=DBSCAN(eps=3, min_samples=1).fit(X)
print(db.labels_)
给出:[0 1 1 1 1 1 1 1]
社区与集群不同。
集群是许多社区的联合体。 Epsilon 是距一个社区中心的最大距离;但是如果你合并多个社区,如果你的数据是 dense.
,那么距离可以变得任意大但是sklearn中对参数的描述也是错误的,不仅仅是误导。当三角不等式成立时,同一邻域中的点 可以 相隔两个 epsilon(如果不使用度量则更多)。