聚類算法—DBSCAN算法

文章目錄

  • DBSCAN算法
    • 基本概念
      • 1個核心思想:基于密度
      • 2個算法參數:鄰域半徑R和最少點數目minpoints
      • 3種點的類別:核心點,邊界點和噪聲點
      • 4種點的關系:密度直達,密度可達,密度相連,非密度相連
    • DBSCAN算法步驟
    • DBSCAN代碼
  • 參考文獻

DBSCAN算法

DBSCAN算法是一個基于密度、對噪聲魯棒的空間聚類算法:DB-SCAN可以找到樣本點的全部密集區域,把這些密集區域當做一個一個的聚類簇
DB-SCAN算法的特點:

  1. 基于密度,對遠離密度核心的噪聲點魯棒
  2. 無需知道聚類簇的數量
  3. 可以發現任意形狀的聚類簇

基本概念

1個核心思想:基于密度

DBSCAN算法可以找到樣本點的全部密集區域,并把這些密集區域當做一個一個的聚類簇
在這里插入圖片描述

2個算法參數:鄰域半徑R和最少點數目minpoints

這兩個算法參數在刻畫什么叫密集:當鄰域半徑R內的點的個數大于最少點數目minpoints時,就是密集
在這里插入圖片描述

3種點的類別:核心點,邊界點和噪聲點

  1. 核心點:如果一個點P在半徑\varepsilon內擁有超過minpoints個的點(包括點P自身),則點P被認為是一個核心點
  2. 邊界點:如果一個點不是核心點,但在某個核心點的\varepsilon范圍內,并且至少是minpoints-1個核心點的密度直達點,則這個點被認為是邊界點
  3. 噪聲點:如果一個點既不是核心點,也不是任何核心點的密度可達點,則被認為是噪聲點
    在這里插入圖片描述

4種點的關系:密度直達,密度可達,密度相連,非密度相連

  1. 密度直達:如果P為核心點,Q在P的R鄰域內,那么稱P到Q密度直達。任何核心點到其自身密度直達,密度直達不具有對稱性,如果P到Q密度直達,那么Q到P不一定密度直達(Q不一定是核心點,在Q的\varepsilon鄰域內沒有足夠的點,不能將P包含在其密度直達性簇內)
  2. 密度可達:如果存在核心點P2,P3,……,Pn,且P1到P2密度直達,P2到P3密度直達,……,P(n-1)到Pn密度直達,Pn到Q密度直達,則P1到Q密度可達,密度可達也不具有對稱性
  3. 密度相連:如果存在核心點S,使得S到P和Q都密度可達,則P和Q密度相連。密度相連具有對稱性,如果P和Q密度相連,那么Q和P也一定密度相連,密度相連的兩個點屬于同一個聚類簇
  4. 非密度相連:如果兩個點不屬于密度相連關系,則兩個點非密度相連。非密度相連的兩個點屬于不同的聚類簇,或者其中存在噪聲點
    在這里插入圖片描述

DBSCAN算法步驟

聚類簇(Cluster):由一個核心點P和所有從P密度可達的點組成

  1. 尋找核心點形成臨時聚類簇
    掃描全部樣本點,如果某個樣本點R半徑范圍內點數目>=minpoints,則將其納入核心點列表,并將其密度直達的點形成對應的臨時聚類簇
  2. 合并臨時聚類簇得到聚類簇
    重復此操作,直到當前臨時聚類簇中的每一個點要么不在核心點列表,要么其密度直達的點都已經在該臨時聚類簇,該臨時聚類簇升級成為聚類簇
    在這里插入圖片描述

DBSCAN代碼

# --*-- coding:utf-8 --*--
# @Author : 一只楚楚貓
# @File : 05DBSCAN.py
# @Software : PyCharmimport numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import dbscan
import matplotlib.pyplot as pltX, _ = datasets.make_moons(n_samples=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')
plt.show()"""
eps為鄰域半徑,min_samples為最少點數目
cluster_ids中-1表示對應的點為噪聲點
"""
core_samples, cluster_ids = dbscan(X, eps=0.2, min_samples=20)"""
np.c_ 是 NumPy 庫中的一個函數,用于沿著列(列優先)堆疊數組# 假設有兩個一維數組 a 和 ba = np.array([1, 2, 3])b = np.array([4, 5, 6])c = np.c_[a, b][[1 4][2 5][3 6]]
"""
df = pd.DataFrame(np.c_[X, cluster_ids], columns=['feature1', 'feature2', 'cluster_id'])"""
astype('i2') 是一個用于轉換數據類型的方法,將 'cluster_id' 列的數據類型轉換為 16 位整數(int16 或 i2)
"""
df['cluster_id'] = df['cluster_id'].astype('i2')"""
c = list(df['cluster_id']): c 參數指定了每個點的顏色,這里使用 list() 函數將 DataFrame 中 'cluster_id' 列的值轉換成列表,列表中的每個元素對應一個點的顏色
cmap = 'rainbow': cmap 參數設置顏色映射表,用于根據 'cluster_id' 列的值為散點圖上的點分配顏色。'rainbow' 是一個預設的顏色映射,它將按照彩虹的顏色順序為不同的聚類分配顏色
colorbar = False: 這個參數決定是否在散點圖旁邊顯示顏色條,顏色條用于顯示顏色和 'cluster_id' 值之間的映射關系
"""
df.plot.scatter('feature1', 'feature2', s=100, c=list(df['cluster_id']), cmap='rainbow', colorbar=False, alpha=0.6,title='DBSCAN cluster result')
plt.show()

參考文獻

1、圖解機器學習 | 聚類算法詳解:https://www.showmeai.tech/article-detail/197
2、20分鐘學會DBSCAN聚類算法:https://cloud.tencent.com/developer/article/1664886
3、ChatGPT

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21905.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3131. 找出與數組相加的整數 I

給你兩個長度相等的數組 nums1 和 nums2。 數組 nums1 中的每個元素都與變量 x 所表示的整數相加。如果 x 為負數,則表現為元素值的減少。 在與 x 相加后,nums1 和 nums2 相等 。當兩個數組中包含相同的整數,并且這些整數出現的頻次相同時&…

Spi Pwm Tim 對比分析

spi SPI時序圖 (spi是主從機 所以主機需要從機數據 需要主極先喊從機 把從機喊答應了 才能開始讀從機的數據) cpol時鐘極性 和cpha時鐘相位分析 1.cpha為高,cpol為高,則偶數上升沿有效 2.cpha為高,cpol為低,則偶數…

JVM之【GC-垃圾清除算法】

Java虛擬機(JVM)中的垃圾收集算法主要分為以下幾種: 標記-清除算法(Mark-Sweep)復制算法(Copying)標記-整理算法(Mark-Compact)分代收集算法(Generational C…

vue3+three.js給glb模型設置視頻貼圖

1.在網上下載一個顯示屏或者自己畫一個,在blender中設置好顯示屏的Mesh,UV設置好,這樣方便代碼中添加紋理貼圖。可以讓美術在建模軟件中,先隨機設置一張圖片作為紋理,驗證UV是否設置好 關于如何 在blender中給模型設置UV貼圖百度很多的 // 視頻 import * as THREE from…

MacOS13-將數據庫轉為markdown,docx格式

MacOS13-將數據庫轉為markdown,docx格式 文章目錄 先說踩坑點各種模塊缺失 代碼效果總結參考 先說踩坑點 各種模塊缺失 tkinter mysql 沒錯,你可以直接點擊安裝; 如果還出現報錯 你需要打開終端 pip install mysqlclient再次點進去安…

xcode開發swift允許發送http請求設置

Xcode 現在新建項目默認只支持HTTPS請求,認為HTTP請求不安全,所以不支持。但是開發環境一般都是http模式,所以需要單獨配置才可以訪問。 需要到項目的設置里面,點擊info,如果沒有App Transport Security Setting這一項…

項目優化方案之---實現郵箱用戶登錄

之前的項目中我寫的基于SpringBoot和Vue的全棧項目已經實現了基本的用戶接口開發, 不過其代碼的功能單一,而且寫的也是有不少漏洞(基本就像剛接手的代碼*山一樣) 那之后的幾篇文章都來分享一下如何優化項目(每一章都獨…

Python優化、異常處理與性能提升技巧

Python作為一種高效的編程語言,其靈活性和強大的功能使得它成為了許多開發者的首選。在日常的編程實踐中,掌握一些高效的Python技巧可以極大地提升開發效率和代碼質量。本文將介紹五個關于Python使用技巧,幫助你更加熟練地運用Python解決問題…

JMeter性能測試實現與分析分享

JMeter是由著名開源軟件巨頭Apache組織開發的純Java的壓力測試工具,它即能測試動態服務(WebService),也能測試靜態資源,包括Servlet服務、CGI腳本等,還能測試動態語言服務(PHP、Java、ASP.NET等…

Cocos Creator開發學習路線

1.JavaScript與TypeScript程序設計 由于可以跨平臺發布,同時要能支持h5的游戲,cocos creator選擇了JavaScript與TypeScript來做為它的開發語言,所以我們要先學習JavaScript與TypeScript。TypeScript是基于JavaScript的一個語法糖,運行的時候被編譯為JavaScript,所以我們要…

JVM學習-監控工具(二)

jmap:導出內存映像文件&內存使用情況 基本情況 jmap(JVM Memory Map):一方法獲取dump文件(堆轉儲快照文件,二進制文件),還可以獲取目標Java進程的內存相關信息,包括Java堆各區域的使用情況、堆中對象的統計信息、…

MyBatis學習(二)--MyBatis獲取參數值的兩種方式

1、搭建新的module:mybatis_parameter MyBatis獲取參數值的兩種方式:${}和#{} ${}的本質就是字符串拼接,采用sql拼接,無法防止sql注入 #{}的本質就是占位符賦值 ,采用預編譯 防止sql注入 不同參數使用案例 2、單個字面量類型…

OpenHarmony嵌套類對象屬性變化:@Observed裝飾器和@ObjectLink裝飾器

上文所述的裝飾器僅能觀察到第一層的變化,但是在實際應用開發中,應用會根據開發需要,封裝自己的數據模型。對于多層嵌套的情況,比如二維數組,或者數組項class,或者class的屬性是class,他們的第二…

實時瞳孔分割算法-RITnet論文復現

源代碼在這里RITnet-Github 這個模型比較小眾,我們實驗室使用了官方提供的模型進行瞳孔中心位置提取,以實現視線追蹤,效果很好 一、數據集準備 RITnet也是那一屆openEDS數據集挑戰賽的冠軍模型,openEDS數據集可以從Kaggle上下載&a…

數據結構--關鍵路徑

事件v1-表示整個工程開始(源點:入度為0的頂點) 事件v9-表示整個工程結束(匯點:出度為0的頂點) 關鍵路徑:路徑長度最長的路徑 求解關鍵路徑問題(AOE網) 定義四個描述量 …

網絡網絡層之(6)ICMPv4協議

網絡網絡層之(6)ICMPv4協議 Author: Once Day Date: 2024年6月2日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 全系列文章可參考專欄: 通信網絡技術_Once-Day的博客-CS…

華為OD刷題C卷 - 每日刷題 7(字符串分隔(二)、歡樂的周末)

兩段代碼分別解決了兩個不同的問題,下面是對它們的概述: 1、(字符串分隔(二)): 這段代碼是解決“字符串分隔(二)”的問題。它提供了一個Java類Main,其中包含…

Java面試題-Tomcat高級面試題

Tomcat 9相較于之前的版本有哪些主要的新特性? Tomcat 9相較于之前的版本,主要有以下幾個新特性: HTTP/2支持:Tomcat 9引入了對HTTP/2協議的支持,這可以顯著提高網站的性能和安全性。HTTP/2協議允許單個連接上進行多…

多語言for循環遍歷總結

多語言for循環遍歷總結 工作中經常需要遍歷對象,但不同編程語言之間存在一些細微差別。為了便于比較和參考,這里對一些常用的遍歷方法進行了總結。 JAVA 數組遍歷 Test void ArrayForTest() {String[] array {"劉備","關羽", &…

大模型備案項目補貼政策一覽【保持更新】

大模型項目、AI類項目、大模型備案通過后等一籃子財政補貼政策 上海市 加快創新體系構建 1. 提升自主創新水平:對引領大模型發展或取得顛覆性突破的項目,最高給予1000萬元補貼支持。 2. 加強算力資源保障:實施算力伙伴計劃,對…