
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 必備技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 侷限性
- ML - 真實案例
- ML - 資料結構
- ML - 數學基礎
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習 vs. 無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML中的聚類演算法
- ML - 聚類演算法
- ML - 基於中心點的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚層次聚類
- ML中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 向後消除法
- ML - 前向特徵構造
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流程
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精確率和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 輪次
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的貨幣化
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試題
- ML - 有用資源
- ML - 討論
機器學習 - DBSCAN 聚類
DBSCAN 聚類演算法的工作原理如下:
隨機選擇一個尚未訪問的資料點。
如果該資料點在距離 eps 內至少有 minPts 個鄰居,則建立一個新的聚類並將該資料點及其鄰居新增到該聚類。
如果該資料點在距離 eps 內至少沒有 minPts 個鄰居,則將該資料點標記為噪聲並繼續下一個資料點。
重複步驟 1-3,直到訪問所有資料點。
Python 實現
我們可以使用 scikit-learn 庫在 Python 中實現 DBSCAN 演算法。以下是操作步驟:
載入資料集
第一步是載入資料集。我們將使用 scikitlearn 庫中的 make_moons 函式生成一個具有兩個月亮的玩具資料集。
from sklearn.datasets import make_moons X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
執行 DBSCAN 聚類
下一步是在資料集上執行 DBSCAN 聚類。我們將使用 scikit-learn 庫中的 DBSCAN 類。我們將 minPts 引數設定為 5,“eps”引數設定為 0.2。
from sklearn.cluster import DBSCAN clustering = DBSCAN(eps=0.2, min_samples=5) clustering.fit(X)
視覺化結果
最後一步是視覺化聚類結果。我們將使用 Matplotlib 庫建立一個數據集的散點圖,並按聚類分配著色。
import matplotlib.pyplot as plt plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow') plt.show()
示例
以下是 DBSCAN 聚類在 Python 中的完整實現:
from sklearn.datasets import make_moons X, y = make_moons(n_samples=200, noise=0.05, random_state=0) from sklearn.cluster import DBSCAN clustering = DBSCAN(eps=0.2, min_samples=5) clustering.fit(X) import matplotlib.pyplot as plt plt.figure(figsize=(7.5, 3.5)) plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow') plt.show()
輸出
生成的散點圖應顯示兩個不同的聚類,每個聚類對應於資料集中一個月亮。噪聲資料點應為黑色。

DBSCAN 的優點
以下是使用 DBSCAN 聚類的優點:
與假設聚類為球形的 k 均值不同,DBSCAN 可以處理任意形狀的聚類。
它不需要預先知道資料集中聚類的數量,與 k 均值不同。
它可以檢測異常值,即不屬於任何聚類的點。這是因為 DBSCAN 將聚類定義為點的密集區域,遠離任何密集區域的點被認為是異常值。
與 k 均值不同,它對引數的初始選擇(例如 epsilon 和 min_samples 引數)相對不敏感。
它可以擴充套件到大型資料集,因為它只需要計算相鄰點之間的成對距離,而不是所有點的成對距離。
DBSCAN 的缺點
以下是使用 DBSCAN 聚類的缺點:
它可能對 epsilon 和 min_samples 引數的選擇敏感。如果這些引數沒有仔細選擇,DBSCAN 可能會無法識別聚類或錯誤地合併它們。
它可能不適用於密度變化的資料集,因為它假設所有聚類具有相同的密度。
由於演算法的非確定性性質,它可能在同一資料集上的不同執行中產生不同的結果。
對於高維資料集,它可能計算成本很高,因為隨著維數的增加,距離計算變得更加昂貴。
如果噪聲或異常值的密度過高,它可能不適用於具有噪聲或異常值的資料集。在這種情況下,噪聲或異常值可能會被錯誤地分配給聚類。