DBSCAN方法及應用
1.DBSCAN密度聚類簡介
DBSCAN 算法是一種基於密度的聚類算法:
1.聚類的時候不需要預先指定簇的個數
2.最終的簇的個數不確定
DBSCAN算法將數據點分為三類:
1.核心點:在半徑Eps內含有超過MinPts數目的點。
2.邊界點:在半徑Eps內點的數量小於MinPts,但是落在核心點的鄰域內的點。
3.噪音點:既不是核心點也不是邊界點的點。
如下圖所示:圖中黃色的點為邊界點,因為在半徑Eps內,它領域內的點不超過MinPts個,我們這里設置的MinPts為5;而中間白色的點之所以為核心點,是因為它鄰域內的點是超過MinPts(5)個點的,它鄰域內的點就是那些黃色的點!
2.DBSCAN算法的流程
1.將所有點標記為核心點、邊界點或噪聲點;
2.刪除噪聲點;
3.為距離在Eps之內的所有核心點之間賦予一條邊;
4.每組連通的核心點形成一個簇;
5.將每個邊界點指派到一個與之關聯的核心點的簇中(哪一個核心點的半徑范圍之內)。
3.應用實例
數據介紹
現有大學校園網的日志數據,290條大學生的校園網使用情況數據,數據包括用戶ID,設備的MAC地址,IP地址,開始上網時間,停止上網時間,上網時長,校園網套餐等。利用已有數據,分析學生上網的模式。
實驗目的
通過DBSCAN聚類,分析學生上網時間和上網時長的模式。
技術路線
采用:sklearn.cluster.DBSCAN 模塊
下圖為一個數據的實例展示:
通過上述上網時間的聚類分析和上網時長的聚類分析得出我們想要的同學們上網的時間和時長的分布結果!
1.建立工程,導入sklearn相關包
import numpy as np
from sklearn.cluster import DBSCAN
注意:DBSCAN主要參數:
1.eps:兩個樣本被看作鄰居節點的最大距離
2.min_samples:簇的樣本數
3.metric:距離計算方式
例:sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean') #euclidean表明我們要采用歐氏距離計算樣本點的距離!
3-1.上網時間聚類,創建DBSCAN算法實例,並進行訓練,獲得標簽:
4.輸出標簽,查看結果
為了更好的展示結果,我們可以把它畫成直方圖的形式,便於我們分析;如下我們使用 matplotlib庫中的hist函數來進行直方圖的展示:
5.畫直方圖,分析實驗結果:
6.數據分布 vs 聚類
這里就是機器學習的一個小技巧了,左邊的數據分布不適用於聚類分析的,如果我們想對這類數據進行聚類分析,需要對這些數據進行一些數學變換,通常我們采用取對數的變換方法,將這種數據變換之后,變換后的數據就比較適合用於聚類分析了;
3-2.上網時長聚類,創建DBSCAN算法實例,並進行訓練,獲得標簽:
4-2.輸出標簽,查看結果
我們也可以看到:時長的聚類效果是不如時間的聚類效果明顯的!