【问题标题】:DBSCAN detects outliers based on what ? and what are the criteria of the outliersDBSCAN 根据什么检测异常值?异常值的标准是什么
【发布时间】:2019-01-20 05:03:01
【问题描述】:

假设我有这段代码

df= rn.read_sql(sql,conn)
data = df.as_matrix(['TOT_CLM_GROSS_AMT','Gross_Amt_per_SRV','TOT_CLM_NET_AMT'])
db = DBSCAN(eps=15, min_samples=200).fit(data)

异常值是:

outliers_df= pd.DataFrame(data) 
outliers = outliers_df[db.labels_==-1]

我能知道为什么 DBSCAN 会考虑异常值吗?它们的标准是什么?我可以通过 DBSCAN 知道吗?

【问题讨论】:

    标签: python scikit-learn cluster-analysis outliers dbscan


    【解决方案1】:

    DBSCAN 算法是一种基于密度 的算法。它查看邻域中数据点的密度,以确定它们是否属于同一个集群。如果一个点与所有其他点相距太远,则将其视为异常值,并为其分配标签-1

    基本上你有一个半径和一些邻居。该算法会找到距离给定点更接近半径的所有点,如果它们大于邻居的数量,则将它们视为与核心点相同的集群的一部分。您还可以拥有非核心点集群成员,前提是它们距离核心点的距离小于半径,但其邻域包含的邻域数量少于指定数量。

    算法随机开始检查数据点上的这些条件,创建集群并可能将紧密的集群合并在一起。

    你可以看看wikipedia page on DBSCANthis blog post

    该算法的另一个变体是 HDBSCAN,它是分层版本。在包hdbscan 中调用了一个优化的python 实现,您可能想尝试一下。


    这表示您的问题可能更适合ComputerScience StackExchange 或与数据科学相关的 StackExchanges 之一。

    【讨论】:

      【解决方案2】:

      噪声与异常值相同。

      噪声点是低密度点。形式上,没有相邻点足够密集的点(否则它们将成为边界点)。

      与异常值的区别在于:异常值应该是稀有。根据参数,所有点都可能是噪声

      【讨论】:

        猜你喜欢
        • 2020-04-03
        • 2016-05-02
        • 2019-09-05
        • 2020-08-27
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 2017-07-18
        相关资源
        最近更新 更多