算法筆記:OPTICS 聚類

1 基本介紹

  • OPTICS(Ordering points to identify the clustering structure)是一基于密度的聚類算法
    • OPTICS算法是DBSCAN的改進版本
      • 在DBCSAN算法中需要輸入兩個參數:???和 MinPts?,選擇不同的參數會導致最終聚類的結果千差萬別,因此DBCSAN對于輸入參數過于敏感
      • ?機器學習筆記:DBSCAN_dbscan參數選取-CSDN博客
    • OPTICS算法的提出就是為了幫助DBSCAN算法選擇合適的參數,降低輸入參數的敏感度
      • OPTICS主要針對輸入參數?過敏感做的改進
      • OPTICS和DBSCNA的輸入參數一樣( ? 和 MinPts? ),雖然OPTICS算法中也需要兩個輸入參數,但該算法對 ? 輸入不敏感(一般將 ? 固定為無窮大)【不太清楚為什么不直接不輸入ε呢?】
      • 同時該算法中并不顯式的生成數據聚類,只是對數據集合中的對象進行排序,得到一個有序的對象列表
        • 通過該有序列表,可以得到一個決策圖
        • 通過決策圖可以不同 ? 參數的數據集中檢測簇集,
      • 即:先通過固定的 MinPts? 和無窮大的 ? 得到有序列表,然后得到決策圖,通過決策圖可以知道當 ? 取特定值時(比如 ?=3 )數據的聚類情況。

1.1 和DBSCAN相似的概念

  • ε、minPts、核心點、邊緣點、噪點、密度直達(直接密度可達)、密度可達、密度相連 這些概念可見“機器學習筆記:DBSCAN_dbscan參數選取-CSDN博客

?1.2 OPTICS新的定義

1.2.1 核心距離

換句話說,如果x不是核心點,那么cd(x)就沒有意義

1.2.2 可達距離

  • 也是,如果x不是核心點,那么rd(y,x)沒有意義
  • 如果y在x的ε領域內,那么rd(y,x)=cd(x);如果在x的ε領域外,那么就是d(y,x)

1.3 算法思想

假設數據集為X=\{x_1,x_2,\cdots,x_m\},OPTICS算法的目標是輸出一個有序排列,以及每個元素的兩個屬性值:核心距離,可達距離。

1.3.1 OPTICS算法的數據結構

1.4 算法流程

  • 輸入:數據集X=\{x_1,x_2,\cdots,x_m\},領域參數ε(一般等于∞),MinPts
  1. 創建兩個隊列,有序隊列O和結果隊列R
    • 有序隊列用來存儲核心對象及其該核心對象的密度直達對象,并按可達距離升序排列
      • 理解為待處理的數據
    • 結果隊列用來存儲樣本點的輸出次序
      • 已經處理完的數據
  2. 如果D中所有點都處理完畢或者不存在核心點,則算法結束。否則:
    1. 選擇一個未處理(即不在結果隊列R中)且為核心對象的樣本點 p
    2. 將 p 放入結果隊列R中,并從X中刪除 p
    3. 找到 X 中 p 的所有密度直達樣本點 x,計算 x 到 p 的可達距離
      1. 如果 x 不在有序隊列O 中,則將 x 以及可達距離放入 O 中
      2. 若 x 在O中,則如果 x 新的可達距離更小,則更新 x 的可達距離
    4. 最后對O中數據按可達距離從小到大重新排序。
  3. 如果有序隊列O為空,則回到步驟2,否則:
    1. 取出O 中第一個樣本點 y(即可達距離最小的樣本點),放入 R 中
    2. 從 D 和 O 中刪除 y
    3. 如果 y 不是核心對象,則重復步驟 3(即找 O 中剩余數據可達距離最小的樣本點)
    4. 如果 y 是核心對象,則
      1. 找到 y 在 D 中的所有密度直達樣本點
      2. 計算到 y 的可達距離
      3. 所有 y 的密度直達樣本點更新到 O 中
      4. 對O中數據按可達距離從小到大重新排序。
  4. 重復步驟2、3,直到算法結束。
  5. 最終可以得到一個有序的輸出結果,以及相應的可達距離。

1.5 舉例

樣本數據集為:D = {[1, 2], [2, 5], ?[8, 7], [3, 6], ?[8, 8], [7, 3], [4,5]}

假設eps = inf,min_samples=2,則數據集D在OPTICS算法上的執行步驟如下:

  • 計算所有的核心對象和核心距離
    • 因為 eps 為無窮大,則顯然每個樣本點都是核心對象
    • 因為 min_samples=2,則每個核心對象的核心距離就是離自己最近樣本點到自己的距離(樣本點自身也是鄰域元素之一)
    • 索引0123456
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
  • 隨機在 D 中選擇一個核心對象
    • 假設選擇?0 號元素,將 0 號元素放入 R 中,并從 D 中刪除
    • 因為 eps = inf,則其他所有樣本點都是 0 號元素的密度直達對象
    • 計算其他所有元素到 0 號元素的可達距離(計算所有元素到 0 號元素的歐氏距離)
    • 按可達距離排序,添加到序列 O 中
    • 此時D{1,2,3,4,5,6},R{0},O{1,6,3,5,2,4}
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第一次可達距離--3.168.604.479.216.084.240
  • 此時 O 中可達距離最小的元素是 1 號元素
    • 取出 1 號元素放入 R ,并從 D 和 O?中刪除
    • 因為 1 號元素是核心對象,找到?1?號元素在 D 中的所有密度直達對象(剩余的所有樣本點),并計算可達距離
    • 同時更新 O
    • 此時 D{2,3,4,5,6} R{0,1} O{3,6,5,2,4}
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第二次可達距離----6.321.416.705.382.01
  • 此時 O 中可達距離最小的元素是 3?號元素
    • 取出 3?號元素放入 R ,并從 D 和 O 中刪除
    • 因為 3?號元素是核心對象,找到 3?號元素在 D 中的所有密度直達對象(剩余的所有樣本點),并計算可達距離
    • 同時更新 O
    • 此時D{2,4,5,6} R{0,1,3} O{6,5,2,4}
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第三次可達距離----5.09--5.395.01.413
  • 此時 O 中可達距離最小的元素是 6?號元素
    • 取出 6?號元素放入 R ,并從 D 和 O 中刪除
    • 因為 6?號元素是核心對象,找到 6?號元素在 D 中的所有密度直達對象(剩余的所有樣本點),并計算可達距離,同時更新 O
    • 此時D{2,4,5},R{0,1,3,6},O(5,2,4}
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第四次可達距離----4.47--5.03.61--6
  • 此時 O 中可達距離最小的元素是 5 號元素
    • 取出 5 號元素放入 R ,并從 D 和 O 中刪除
    • 因為 5 號元素是核心對象,找到 5 號元素在 D 中的所有密度直達對象(剩余的所有樣本點),并計算可達距離,同時更新 O。
    • 注意本次計算的4號元素到5號元素的可達距離是5.10,大于5.0,因此不更新4號元素的可達距離
    • 此時D{2,4}R{0,1,3,6,5} O(2,4)
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第五次可達距離----4.12--

      5.0

      (5.10)

      ----5
  • 此時 O 中可達距離最小的元素是 2?號元素
    • 取出 2?號元素放入 R ,并從 D 和 O 中刪除
    • 因為 2?號元素是核心對象,找到 2?號元素在 D 中的所有密度直達對象,并計算可達距離,同時更新 O
    • 索引0123456核心對象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距離3.161.411.01.411.03.611.41
      第六次可達距離--------1.0----2

所以最后的R:(0,1,3,6,5,2,4)?,對應的可達距離為:{∞,3.16,1.41,1.41,3.61,4.12,1.0}

按照最終的輸出順序繪制可達距離圖

  • 可以發現,可達距離呈現兩個波谷,也即表現為兩個簇,波谷越深,表示簇越緊密
  • 只需要在兩個波谷之間取一個合適的 eps 分隔值(圖中藍色的直線),使用 DBSCAN 算法就會聚類為兩個簇。
  • 即第一個簇的元素為:0、1、3、6、5;第二個簇的元素為:2、4。

1.4 和DBSCAN的異同

  • OPTICS算法與DBSCAN算法有許多相似之處,可以被視為DBSCAN的一種泛化,它將eps要求從單一值放寬到值范圍
  • DBSCAN和OPTICS之間的關鍵區別在于,OPTICS算法構建了一個可達性圖,為每個樣本分配了一個可達性距離和在集群排序屬性中的位置
    • 這兩個屬性在模型擬合時被賦值,并用于確定集群成員資格

1.5 可達性距離

  • OPTICS生成的可達性距離允許在單個數據集中提取可變密度的集群
    • 結合可達性距離和數據集排序產生了一個可達性圖,其中點密度在Y軸上表示,點的排序使得附近的點相鄰
    • 平行于x軸“切割”可達性圖產生了類似DBSCAN的結果:
      • 所有在“切割”線以上的點被分類為噪聲
      • 每當從左到右閱讀時出現間斷時,就標志著一個新的集群
  • OPTICS的默認集群提取方法是查看圖中的陡峭斜坡以找到集群,可以使用xi參數定義什么算作陡峭斜坡

1.6 計算復雜度

  • 空間索引樹用于避免計算完整的距離矩陣,并允許在大量樣本集上有效地使用內存
  • 對于大型數據集,可以通過HDBSCAN獲得類似(但不完全相同)的結果。
    • HDBSCAN實現是多線程的,并且比OPTICS具有更好的算法運行時間復雜性,但以較差的內存擴展為代價

2?sklearn.cluster.OPTICS

class sklearn.cluster.OPTICS(*, min_samples=5, max_eps=inf, metric='minkowski', p=2, metric_params=None, cluster_method='xi', eps=None, xi=0.05, predecessor_correction=True, min_cluster_size=None, algorithm='auto', leaf_size=30, memory=None, n_jobs=None)

2.1 主要參數

min_samples

int > 1 或介于0和1之間的浮點數,默認為5

點被視為核心點時,鄰域中的樣本數量

如果是浮點數,表示樣本數量的一部分

max_eps

兩個樣本被視為彼此鄰域的最大距離。

np.inf的默認值將識別所有規模的聚類;

降低max_eps將導致更短的運行時間

metric

str或可調用,默認為'minkowski'

用于距離計算的度量。可以使用

來自scikit-learn:['cityblock', 'cosine', 'euclidean', 'l1', 'l2', 'manhattan']

來自scipy.spatial.distance:['braycurtis', 'canberra', 'chebyshev', 'correlation', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule']

p閔可夫斯基度量的參數
xi

float在0和1之間,默認為0.05

確定可達性圖中構成聚類邊界的最小陡度。

例如,可達性圖中的向上點被定義為一個點與其后繼的比率最多為1-xi。

僅在cluster_method='xi'時使用

min_cluster_size

int > 1 或介于0和1之間的浮點數,默認為None

OPTICS聚類中的最小樣本數量,表示為絕對數量或樣本數量的一部分(至少為2)。如果為None,則使用min_samples的值。

僅在cluster_method='xi'時使用。

algorithm

{'auto', 'ball_tree', 'kd_tree', 'brute'},默認為'auto' 用于計算最近鄰居的算法:

'ball_tree'將使用BallTree。

'kd_tree'將使用KDTree。

'brute'將使用蠻力搜索。

'auto'(默認)將嘗試根據傳遞給fit方法的值決定最合適的算法。

leaf_size傳遞給BallTree或KDTree的葉子大小。這會影響構建和查詢的速度,以及存儲樹所需的內存。最佳值取決于問題的性質。
cluster_method

str,默認為'xi'

使用計算的可達性和排序提取聚類的方法。可能的值是“xi”和“dbscan”

2.2. 舉例

from sklearn.cluster import OPTICS
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])op=OPTICS(min_samples=2).fit(X)op.labels_
#array([0, 0, 0, 1, 1, 1])op.ordering_
#array([0, 1, 2, 3, 4, 5])
#按聚類順序排列的樣本索引列表op.reachability_
#array([inf,  2.,  2.,  9.,  2.,  2.])
#按對象順序索引的每個樣本的可達距離op.core_distances_
#array([inf,  2.,  2.,  9.,  2.,  2.])
#每個樣本成為核心點的核心距離
#永遠不會成為核心的點的距離為無窮大。

參考內容:機器學習筆記(十一)聚類算法OPTICS原理和實踐_optics聚類_大白兔黑又黑的博客-CSDN博客

(4)聚類算法之OPTICS算法 - 知乎 (zhihu.com)

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

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

相關文章

線上PDF文件展示

場景: 請求到的PDF(url鏈接),將其展示在頁面上 插件: pdfobject (我使用的版本: "pdfobject": "^2.2.12" ) 下載插件就不多說了,下面將其引入&a…

【Clang Static Analyzer 代碼靜態檢測工具詳細使用教程】

Clang Static Analyzer sudo apt-get install clang-tools scan-build cmake .. scan-build make -j4 編譯完成之后會在終端提示在哪里查看報錯文檔: scan-build: 55 bugs found. scan-build: Run scan-view /tmp/scan-build-2023-11-24-150637-6472-1 to examine bug report…

Liunx Ubuntu Server 安裝配置 Docker

1. 安裝Docker 1.1 更新軟件包列表 sudo apt update1.2 添加Docker存儲庫 sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-a…

Django QuerySet.order_by SQL注入漏洞(CVE-2021-35042)

漏洞描述 Django 于 2021年7月1日發布了一個安全更新,修復了函數QuerySet.order_by中的 SQL 注入漏洞。 參考鏈接: Django security releases issued: 3.2.5 and 3.1.13 | Weblog | Django 該漏洞需要開發人員使用order_by功能。此外,還可…

加入華為云鯤鵬極簡開發創造營,激活創造力,探索無限可能!

數字經濟時代,速度、效率、質量安全已成為各行業告訴拓新發展的關鍵,華為云不斷打磨敏捷安全開發的軟件平臺,為更高效率的生產力變革積蓄能量。 在剛剛過去不久的2023華為全聯接大會上,華為最新發布了華為云CodeArts與鯤鵬DevKit…

關于配置文件中秘鑰信息加密實現方案的一些思考

關于配置文件中秘鑰信息加密實現方案的一些思考 背景實現方案 背景 配置信息文件中(代碼中), 不應該有明文的秘鑰信息. 需要找一種方案去做加密處理. 實現方案 我們可以在項目指定目錄上傳一份加密/解密程序, 例如: jasypt-gui.jar. 啟動時: 配置JVM參數, 對加密的信息進行解…

2023 Unite 大會關于“Muse“ AI 大模型訓練

Unity Muse 借助強大的 AI 能力幫助你探索、構思和迭代,其中包括紋理和精靈兩項功能,可將自然語言和視覺輸入轉化為可用資產。 將 AI 引入 Unity Editor 中的 Muse 提供了更快將想法轉化為實物的選項。您可以調整并使用文本提示、圖案、顏色和草圖&…

周總結2023-11-24

文章目錄 前言:工作:學習:生活: 前言: 保持激情,日日向上,激發內驅力。 工作: 1117上周未完成的計劃: 數模轉換模塊的數據處理分析HAL庫的學習IMU知識點匯總 1124本…

【采坑分享】導出文件流responseType:“blob“如何提示報錯信息

目錄 前言: 采坑之路 總結: 前言: 近日,項目中踩了一個坑分享一下經驗,也避免下次遇到方便解決。項目基于vue2axioselement-ui,業務中導出按鈕需要直接下載接口中的文件流。正常是沒有問題,但…

為什么在Pycharm中使用Pandas畫圖,卻不顯示?

問題描述: 在 Pycharm 中使用 Pandas 的 plot() 方法畫圖,卻不顯示圖像,源代碼如下: import pandas as pd import numpy as np# 從文件中讀取數據 starbucks pd.read_csv(./file_csv/directory.csv)# 按照國家分組,…

想問問各位大佬,網絡安全這個專業普通人學習會有前景嗎?

網絡安全是一個非常廣泛的領域,涉及到許多不同的崗位。這些崗位包括安全服務、安全運維、滲透測試、web安全、安全開發和安全售前等。每個崗位都有自己的要求和特點,您可以根據自己的興趣和能力來選擇最適合您的崗位。 滲透測試/Web安全工程師主要負責模…

對 .NET程序2G虛擬地址緊張崩潰 的最后一次反思

一:背景 1. 講故事 最近接連遇到了幾起 2G 虛擬地址緊張 導致的程序崩潰,基本上 90% 都集中在醫療行業,真的很無語,他們用的都是一些上古的 XP,Windows7 x86,我也知道技術人很難也基本無法推動硬件系統和…

抖音獲客策略:讓你的品牌在短視頻平臺一鳴驚人!

一、背景介紹 隨著移動互聯網的快速發展,抖音作為一款流行的短視頻平臺,已經成為越來越多企業的獲客渠道。抖音用戶規模龐大,日活用戶數量不斷增長,為企業提供了廣闊的市場空間。本文將介紹抖音獲客策略,幫助企業更好…

UNETR++:深入研究高效和準確的3D醫學圖像分割

論文:https://arxiv.org/abs/2212.04497 代碼:GitHub - Amshaker/unetr_plus_plus: UNETR: Delving into Efficient and Accurate 3D Medical Image Segmentation 機構:Mohamed Bin Zayed University of Artificial Intelligence1, Univers…

哦?是嗎|兜兜轉轉,最后還是選擇了蓋雅排班系統

在之前發布的和「人效案例集」中,我們為大家呈現了很多關于人效提升的理論方法,以及各家企業的人效提升提升實踐。 回過頭來,我們發現:排班管理滲透于人效九宮格之中,也因此成為很多企業人效提升的一個重要中介&#x…

深度學習八股文:混合精度訓練過程出nan怎么辦

其實如果是FP32的訓練,基本的調試方法還是差不多,這里就講一下混合精度訓練過程中的nan。 混合精度訓練使用較低的數值精度(通常是半精度浮點數,例如FP16)來加速模型訓練,但在一些情況下,可能會…

盤點43個Python登錄第三方源碼Python愛好者不容錯過

盤點43個Python登錄第三方源碼Python愛好者不容錯過 學習知識費力氣,收集整理更不易。 知識付費甚歡喜,為咱碼農謀福利。 項目名稱 bnuz中國電信校園網模擬登錄,python selenium BNUZ教務系統認證爬蟲Python語言實現,你可以用…

NX二次開發UF_CSYS_create_temp_csys 函數介紹

文章作者:里海 來源網站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_temp_csys Defined in: uf_csys.h int UF_CSYS_create_temp_csys(const double csys_origin [ 3 ] , tag_t matrix_id, tag_t * csys_id ) overview 概述 Creates …

win10 tensorrt源碼編譯onnx

直接利用官方源碼,如下圖,trtexec源碼在TensorRT安裝目錄下,雙擊trtexec.sln文件,使用vs2019打開源碼工程。 如下圖,以yolov8為例子,編譯成功項目之后,設置命令行參數: --onnxd:/yo…

便攜式工業RFID讀寫器怎么選?

便攜式工業RFID讀寫器在物流、零售、制造等行業都有著極為廣泛的應用。企業利用RFID手持終端設備,可以將采集到的物品信息自動傳輸到中央信息系統,實現數據的實時交換和共享。目前市面上RFID手持終端品牌、型號眾多,ANDEAWELL作為國內物聯網產…