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 2]
而医生说:
eps : float, optional The maximum distance between two samples for them to be considered as in the same neighborhood.
这里9和15在同一集群中,而它们之间的欧式距离是6,即> 3
我想念什么?
答案 0 :(得分:1)
要指出为什么它们位于同一集群中,让我对DBSCAN的功能进行高级解释。
sklearn
中是min_sample
参数。 esp
控制连接两个数据点的最大距离。对于数据集,使用[a-b]表示连接的符号,您具有:
[9-11],[11-13],[13-14],[14-15]
因此这些点都在同一组件中,并且该组件大于您的min_sample
参数,因此它被认为是有效的群集。
答案 1 :(得分:1)
这是因为这些点链接在一起。 15小于14中的GrandChild.objects.filter(parent__parent__id=1).update(parent=None)
,因此它包含在该群集中。
您可以在此处查看行为:
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_)
答案 2 :(得分:1)
邻居与集群不一样。
集群是许多社区的联盟。 Epsilon是距一个邻域中心的最大距离;但是如果您合并多个邻域,并且数据密集,则距离可能会变得任意大。
但是sklearn中的参数描述也是错误的,不仅仅是误导。当三角形不等式成立时,同一邻域中的点 可以相隔两个epsilon(如果不使用度量标准则可以相差更多)。