DBSCAN基于什么检测异常值?以及异常值的标准是什么

时间:2018-08-13 12:49:10

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

假设我有此代码

_enter_dir() {
    local git_root
    git_root=$(git rev-parse --show-toplevel 2>/dev/null)

    if [[ "$git_root" == "$PREV_PWD" ]]; then
        return
    elif [[ -n "$git_root" && -f "$git_root/.nvmrc" ]]; then
        nvm use
        NVM_DIRTY=1
    elif [[ "$NVM_DIRTY" == 1 ]]; then
        nvm use default
        NVM_DIRTY=0
    fi
    PREV_PWD="$git_root"
}

export PROMPT_COMMAND=_enter_dir
#export PROMPT_COMMAND="$PROMPT_COMMAND;_enter_dir"  # use this if PROMPT_COMMAND already defined

和离群值是:

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)

我可以知道为什么DBSCAN考虑离群值以及它们的标准是什么?我可以通过DBSCAN知道吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

您可以看看wikipedia page on DBSCANthis blog post

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


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

答案 1 :(得分:0)

噪声与异常值不同

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

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