初探DBSCAN聚類演算法

2022-09-09 09:27:10 字數 2352 閱讀 6359

一種基於密度的聚類演算法

他最大的優勢是可以發現任意形狀的聚類簇,而傳統的聚類演算法只能使用凸的樣本聚集類

鄰域半徑r和最少點數目minpoints。

當鄰域半徑r內的點的個數大於最少點數目minpoints時,就是密集。

補充:根據經驗計算半徑r

根據得到的所有點的k-距離集合e,對集合e進行公升序排序後得到k-距離集合e』,需要擬合一條排序後的e』集合中k-距離的變化曲線圖,然後繪出曲線,通過觀察,將急劇發生變化的位置所對應的k-距離的值,確定為半徑eps的值。

鄰域半徑r內樣本點的數量大於等於minpoints的點叫做核心點。不屬於核心點但在某個核心點的鄰域內的點叫做邊界點。既不是核心點也不是邊界點的是雜訊點。

官方文件

<---

生成樣本點

import numpy as np

import pandas as pd

from sklearn import datasets

%matplotlib inline

x,_ = datasets.make_moons(500,noise = 0.1,random_state=1)

df = pd.dataframe(x,columns = ['feature1','feature2'])

df.plot.scatter('feature1','feature2', s = 100,alpha = 0.6, title = 'dataset by make_moon')

呼叫dbscan介面完成聚類

from sklearn.cluster import dbscan

# eps為鄰域半徑,min_samples為最少點數目

core_samples,cluster_ids = dbscan(x, eps = 0.2, min_samples=20)

# cluster_ids中-1表示對應的點為雜訊點

df = pd.dataframe(np.c_[x,cluster_ids],columns = ['feature1','feature2','cluster_id'])

df['cluster_id'] = df['cluster_id'].astype('i2')

df.plot.scatter('feature1','feature2', s = 100,

c = list(df['cluster_id']),cmap = 'rainbow',colorbar = false,

alpha = 0.6,title = 'dbscan cluster result')

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn import datasets

%matplotlib inline

#生成資料

x=np.empty((100,2))

x[:,0]=np.random.uniform(0.,100.,size=100)

x[:,1]=0.75*x[:,0]+3+np.random.normal(0,10,size=100)

plt.scatter(x[:,0],x[:,1])

plt.show()

df=pd.dataframe(x,columns=['feature1','feature2'])

df.plot.scatter('feature1','feature2')

print(df)

#呼叫dbscan介面完成聚類

from sklearn.cluster import dbscan

# eps為鄰域半徑,min_samples為最少點數目

core_samples,cluster_ids = dbscan(x, eps = 10, min_samples=3)

df = pd.dataframe(np.c_[x,cluster_ids],columns = ['feature1','feature2','cluster_id'])

# df['cluster_id'] = df['cluster_id'].astype('i2') #這個有啥用啊

df.plot.scatter('feature1','feature2', s = 100,

c = list(df['cluster_id']),cmap = 'rainbow',colorbar = false,

alpha = 0.6,title = 'dbscan cluster result')

聚類演算法 DBSCAN

dbscan 是一種簡單的,基於密度的聚類演算法。本次實現中,dbscan 使用了基於中心的方法。在基於中心的方法中,每個資料點的密度通過對以該點為中心以邊長為 2 eps 的網格 鄰域 內的其他資料點的個數來度量。根據資料點的密度分為三類點 1 核心點 該點在鄰域內的密度超過給定的閥值 minps...

DBSCAN聚類演算法

基於密度定義,我們將點分為 dbscan演算法的本質就是隨大流,邊界點緊緊圍繞著核心點,他們抱團,不帶噪點玩兒 小團體多了,聯絡比較密切的小團體之間聚成了同個類 比較偏遠的小團體想要加入這個圈子,進不去,就單幹,我們自己玩自己的,聚成了另外的乙個類 一開始就被孤立的噪點吧,自然有自己的傲骨,接著孤芳...

DBSCAN 聚類演算法

dbscan演算法是一種基於密度聚類的演算法。核心概念 核心點 若某個點的密度達到演算法設定的閾值 即 r 鄰域內點的數量不小於 minpts 則其為核心點。直接密度可達 若某點p在點q的 r 鄰域內,且q是核心點,則稱p從q出發直接密度可達。密度可達 若有乙個點的序列q0 q1 qk,對任意qi從...