Python 3.x 选择ε有什么问题;具体数据是什么?

Python 3.x 选择ε有什么问题;具体数据是什么?,python-3.x,scikit-learn,Python 3.x,Scikit Learn,当我使用DBSCAN对数据进行聚类时,一组数据是异常的 下面的大整数是一组时间戳的时间戳。 我尝试在40秒内对所有记录进行聚类 当我尝试eps=20时,得到异常组: ->array([0,0,0,1,1,1,1],dtype=int64) 当我尝试eps=23时,得到正确的答案: ->array([0,0,0,0,0,0,0],dtype=int64) 有人能告诉我我的eps选择有什么问题吗?为什么?然后是文档: 每股收益: 两个样本之间的最大距离,其中一个样本被视为在另一个样本的邻域中。这不是

当我使用DBSCAN对数据进行聚类时,一组数据是异常的

下面的大整数是一组时间戳的时间戳。 我尝试在40秒内对所有记录进行聚类

当我尝试eps=20时,得到异常组: ->
array([0,0,0,1,1,1,1],dtype=int64)
当我尝试eps=23时,得到正确的答案: ->
array([0,0,0,0,0,0,0],dtype=int64)


有人能告诉我我的eps选择有什么问题吗?为什么?

然后是文档:

每股收益: 两个样本之间的最大距离,其中一个样本被视为在另一个样本的邻域中。这不是簇内点距离的最大界限。这是为数据集和距离函数选择的最重要的DBSCAN参数

根据维基百科上的解释:

考虑在某个空间中要聚集的一组点。设ε为指定邻域相对于某点的半径的参数。为了进行DBSCAN聚类,这些点被分类为核心点、(密度)可达点和异常值,如下所示:

如果至少有minPts点在距离ε内(包括p),则点p为核心点

如果点q在距离核心点pε的范围内,则点q可直接从p到达。点只能说是从核心点直接到达的 . 如果存在路径p1,…,pn且p1=p和pn=q,则点q可从p到达,其中每个pi+1可从pi直接到达。注意,这意味着路径上的所有点都必须是核心点,q可能是例外

所有无法从任何其他点到达的点都是异常值或噪声点

现在,如果p是一个核心点,那么它和所有可以从它访问的点(核心点或非核心点)一起形成一个集群。每个集群至少包含一个核心点;非核心点可以是集群的一部分,但它们形成了集群的“边缘”,因为它们不能用于到达更多的点


因此,在您的案例中,随着e的增加,您只需减少到一个核心点(0级),您的集群就变得更广泛了。

接下来是文档:

每股收益: 两个样本之间的最大距离,其中一个样本被视为在另一个样本的邻域中。这不是簇内点距离的最大界限。这是为数据集和距离函数选择的最重要的DBSCAN参数

根据维基百科上的解释:

考虑在某个空间中要聚集的一组点。设ε为指定邻域相对于某点的半径的参数。为了进行DBSCAN聚类,这些点被分类为核心点、(密度)可达点和异常值,如下所示:

如果至少有minPts点在距离ε内(包括p),则点p为核心点

如果点q在距离核心点pε的范围内,则点q可直接从p到达。点只能说是从核心点直接到达的 . 如果存在路径p1,…,pn且p1=p和pn=q,则点q可从p到达,其中每个pi+1可从pi直接到达。注意,这意味着路径上的所有点都必须是核心点,q可能是例外

所有无法从任何其他点到达的点都是异常值或噪声点

现在,如果p是一个核心点,那么它和所有可以从它访问的点(核心点或非核心点)一起形成一个集群。每个集群至少包含一个核心点;非核心点可以是集群的一部分,但它们形成了集群的“边缘”,因为它们不能用于到达更多的点


因此,在您的情况下,随着e的增加,您只会减少到一个核心点(0级),您的集群将变得更广泛。

谢谢您的回复。我的数据是1565541521.0中的3个和1565541522.0中的4个。因此,第三个1565541521.0是一个核心点(最小值为3)。由于eps为20,其他4个(距离仅为1)在距离上述核心点eps的范围内,因此可从上述核心点直接到达。因此,数据集位于一个组中。但是我们可以把他们分成两组。谢谢你的回复。我的数据是1565541521.0中的3个和1565541522.0中的4个。因此,第三个1565541521.0是一个核心点(最小值为3)。由于eps为20,其他4个(距离仅为1)在距离上述核心点eps的范围内,因此可从上述核心点直接到达。因此,数据集位于一个组中。但可将其分为两组。
data=[1565541521.0,
    1565541521.0,
    1565541521.0,
    1565541522.0,
    1565541522.0,
    1565541522.0,
    1565541522.0]

df=pd.DataFrame([data],index=['A']).T    
dbscan=DBSCAN(eps=20,min_samples=3).fit(df)
print(dbscan.labels_)