【機器學習基礎】層次聚類-BIRCH聚類

🚀個人主頁:為夢而生~ 關注我一起學習吧!
💡專欄:機器學習 歡迎訂閱!相對完整的機器學習基礎教學!
?特別提醒:針對機器學習,特別開始專欄:機器學習python實戰 歡迎訂閱!本專欄針對機器學習基礎專欄的理論知識,利用python代碼進行實際展示,真正做到從基礎到實戰!
💡往期推薦
【機器學習基礎】一元線性回歸(適合初學者的保姆級文章)
【機器學習基礎】多元線性回歸(適合初學者的保姆級文章)
【機器學習基礎】決策樹(Decision Tree)
【機器學習基礎】K-Means聚類算法
【機器學習基礎】DBSCAN
【機器學習基礎】支持向量機
【機器學習基礎】集成學習
💡本期內容:BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)是一種用于大規模數據集的層次聚類算法。它采用一種多層次的聚類方法,首先利用一種稱為“聚類特征樹(CF Tree)”的數據結構來壓縮數據集,然后通過逐步分裂每個節點以形成聚類。


文章目錄

  • 1 引言
    • 1.1 聚類分析的重要性和應用場景
    • 1.2 層次聚類和BIRCH聚類的發展背景
  • 2 層次聚類概述
    • 2.1 層次聚類的定義及其基本思想
    • 2.2 層次聚類的優缺點分析
  • 3 BIRCH聚類算法介紹
    • 3.1 BIRCH算法的基本概念
    • 3.2 BIRCH算法的核心思想:使用樹狀結構(CF Tree)存儲和聚類數據
    • 3.3 聚類特征樹(CF Tree)的生成
  • 4 BIRCH聚類算法的優勢和局限性
  • 5 BIRCH聚類算法的應用實例


1 引言

1.1 聚類分析的重要性和應用場景

聚類分析是一種重要的數據分析技術,其重要性和應用場景主要體現在以下幾個方面:

重要性

  1. 發現隱藏模式與規律:聚類分析能夠幫助我們從大量數據中發現隱含的模式和規律,從而提高數據的利用價值。
  2. 數據預處理:聚類分析經常作為數據挖掘的預處理步驟,將數據轉化為更適合分類或回歸的形式。
  3. 自動分組:它是一種無監督學習方法,能夠自動對數據進行分組,將相似的數據歸為同一組,不相似的數據歸為不同的組。

應用場景

  1. 商業智能分析:聚類分析可以將客戶群體分成不同的類別,從而幫助企業開展更有針對性的營銷活動。例如,市場分析人員可以通過聚類分析從客戶數據庫中識別出不同的客戶群,并使用購買模式來描述這些客戶群的特征。
  2. 電商購物推薦:聚類分析可以將相似的用戶或商品聚類在一起,使得推薦系統能夠提供更精準的推薦服務。
  3. 生物信息學:聚類分析可以用于推導植物和動物的分類,對基因進行分析,從而幫助科學家獲得對種群中固有結構的認識。
  4. 圖像分析:聚類分析可以用于圖像分割和識別,幫助我們從復雜的圖像中識別出不同的對象或特征。
  5. 社會網絡分析:聚類分析可以幫助我們識別社會網絡中的不同群體或社區,從而更好地理解網絡結構。
  6. 時序數據分析和復雜網絡社團發現:聚類分析也可以應用于時序數據分析和復雜網絡的社團發現,幫助我們從大量數據中提取有用的信息。

1.2 層次聚類和BIRCH聚類的發展背景

層次聚類(Hierarchical Clustering)是一種聚類分析方法,它的基本思想是將數據集中的樣本看作一棵樹的葉子,然后通過不斷合并或分裂葉子節點,形成一棵聚類樹。

這棵樹的每一個內部節點表示一個聚類,而葉子節點表示單個的樣本。根據聚類方式的不同,層次聚類可以分為凝聚的層次聚類和分裂的層次聚類

凝聚的層次聚類自底向上的方法,開始時將每個樣本看作一個聚類,然后不斷合并最近的聚類,直到滿足某個終止條件;而分裂的層次聚類則是自頂向下的方法,開始時將所有樣本看作一個聚類,然后不斷分裂最遠的樣本,直到滿足某個終止條件。

在這里插入圖片描述

BIRCH算法是在1996年由Tian Zhang提出來的,它是一種基于距離的層次聚類方法,綜合了層次凝聚和迭代的重定位方法。層次凝聚是采用自底向上策略,將每個對象作為一個原子簇,然后合并這些原子簇形成更大的簇,減少簇的數目,直到所有的對象都在一個簇中或滿足某個終結條件。

隨著大數據時代的到來,處理大規模數據集成為了聚類算法的重要挑戰之一。BIRCH算法作為一種高效的層次聚類方法,在處理大規模數據集時具有顯著的優勢。它能夠有效地利用有限的內存資源完成高質量的聚類,并且可以通過單遍掃描數據集來最小化I/O代價。因此,BIRCH算法在各個領域得到了廣泛的應用和研究。

總之,BIRCH算法是一種基于層次的聚類方法,通過使用聚類特征和聚類特征樹來概括和存儲聚類信息,從而實現了高效且高質量的聚類。它在處理大規模數據集時具有顯著的優勢,并且可以廣泛應用于各個領域的聚類分析問題中。


2 層次聚類概述

2.1 層次聚類的定義及其基本思想

層次聚類的定義

層次聚類(Hierarchical Clustering)是一種聚類算法,它的核心思想是通過計算不同類別數據點間的相似度來創建一棵有層次的嵌套聚類樹。在這棵聚類樹中,不同類別的原始數據點是樹的最低層,而樹的頂層是一個聚類的根節點。這種聚類方法可以看作是一個樹狀的聚類結構,數據點或聚類從下到上不斷被合并,或者從上到下不斷被分裂。

層次聚類的基本思想

層次聚類通過某種相似性測度計算節點之間的相似性,并按相似度由高到低排序。根據聚類方式的不同,可以分為凝聚的層次聚類和分裂的層次聚類。

  1. 凝聚的層次聚類(自下而上的方法):開始時,每個樣本或數據點都被視為一個單獨的聚類。然后,算法計算所有聚類之間的距離或相似度,并選擇最近或最相似的兩個聚類進行合并。這個過程不斷重復,直到所有的聚類合并為一個,或者達到預設的聚類數目,或者聚類之間的距離超過某個閾值。
  2. 分裂的層次聚類(自上而下的方法):與凝聚的方法相反,開始時,所有的樣本或數據點都被視為一個單一的聚類。然后,算法選擇距離最遠或最不相似的樣本對,并將它們分別分裂為新的聚類。這個過程不斷重復,直到每個聚類中只有一個樣本,或者達到預設的聚類數目,或者樣本之間的距離小于某個閾值。

層次聚類的優點在于它可以隨時停止劃分,并且能夠形成層次結構,使用戶可以觀察和理解數據的不同層次的結構。然而,由于它需要計算所有樣本或聚類之間的距離或相似度,因此在處理大規模數據集時可能會變得非常耗時。

2.2 層次聚類的優缺點分析

優點

  1. 能夠發現類的層次關系:層次聚類可以通過合并或分裂操作,逐步構建或細化聚類結構,從而展示數據點之間的層次關系。這對于理解數據的組織結構非常有幫助。
  2. 對樣本輸入順序不敏感:與一些其他聚類算法相比,層次聚類對樣本的輸入順序不太敏感,這意味著即使改變樣本的輸入順序,聚類結果也可能保持相對穩定。
  3. 能夠處理任意形狀的聚類:層次聚類不依賴于數據的分布假設,因此它可以處理各種形狀的聚類,包括非凸形狀和復雜結構。

缺點

  1. 計算復雜度較高:層次聚類需要計算所有樣本或聚類之間的距離或相似度,這導致它在處理大規模數據集時可能變得非常耗時。此外,合并或分裂操作也可能導致計算量的增加。
  2. 可能形成鏈狀聚類:在某些情況下,層次聚類可能會形成鏈狀結構,即一些聚類在合并過程中可能會成為其他聚類的子聚類,這可能導致聚類結果的不穩定或難以解釋。
  3. 聚類終止條件難以確定:層次聚類需要指定一個終止條件來確定何時停止合并或分裂操作。然而,確定這個條件可能是一個困難的任務,因為不同的終止條件可能會導致不同的聚類結果。

3 BIRCH聚類算法介紹

3.1 BIRCH算法的基本概念

BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)聚類是一種增量式的層次聚類方法。

它通過使用一個叫做CF Tree(聚類特征樹)的樹結構來概括聚類特征,從而實現有效的聚類和規約。

BIRCH聚類的主要優點是它可以處理大規模的數據集,并且對異常值有很好的魯棒性。它通過將數據集中的點進行聚類,將分布在稠密區域中的點聚為一類,而將分布在稀疏區域中的點視為異常點進行移除。

此外,BIRCH聚類是一種增量式的聚類方法,這意味著它可以在處理新數據時,基于已經處理過的數據點進行聚類決策,而不是重新計算所有的數據點。

在這里插入圖片描述

3.2 BIRCH算法的核心思想:使用樹狀結構(CF Tree)存儲和聚類數據

BIRCH算法的核心思想使用樹狀結構(CF Tree,即聚類特征樹)來存儲和聚類數據。這種樹狀結構的設計使得算法能夠有效地處理大規模數據集,同時保持聚類的質量和效率。

CF Tree中的每個節點都由一個或多個聚類特征(CF)組成,這些CF是算法用于概括和存儲聚類信息的關鍵。CF是一個三元組,包括簇中樣本點的數量、各特征維度的和向量以及各特征維度的平方和,它用于存儲關于簇的基本信息,同時實現了數據的壓縮。

在這里插入圖片描述

通過CF Tree,BIRCH算法可以在有限的內存資源下進行高質量的聚類。算法通過不斷插入新的數據點,并根據CF Tree的結構進行聚類的合并和分裂,從而逐步構建出完整的聚類結構。此外,由于CF Tree的高度平衡性,算法可以在對數時間內完成聚類操作,進一步提高了聚類的效率。

因此,使用樹狀結構(CF Tree)來存儲和聚類數據是BIRCH算法的核心思想,這種思想使得算法在處理大規模數據集時具有顯著的優勢,并且廣泛應用于各個領域的聚類分析問題中。

3.3 聚類特征樹(CF Tree)的生成

  1. 從根節點root 開始遞歸往下,計算當前CF條目與要插入數據點之間的距離,尋找距離最小的那個路徑,直到找到與該數據點最接近的葉節點中的條目。
  2. 比較計算出的距離是否小于閾值T,如果小于則當前CF條目吸收該數據點,并更新路徑上的所有CF三元組;反之,進行第三步。
  3. 判斷當前條目所在葉節點的CF條目個數是否小于λ,如果是,則直接將數據點插入作為該數據點的新條目,否則需要分裂該葉節點。分裂的原則是尋找該葉節點中距離最遠的兩個CF條目并以這兩個CF條目作為種子,其他剩下的CF條目根據距離最小原則分配到這兩個簇中,并更新整個CF樹。
  4. 依次向上檢查父節點是否也要分裂,如果需要按和葉子節點分裂方式相同。

在這里插入圖片描述

先定義好CF Tree的參數: 即枝平衡因子β(內部節點的最大CF數), 葉平衡因子λ(葉子節點的最大CF數),空間閾值τ( 葉節點每個CF的最大樣本半徑或直徑)

在最開始的時候,CF Tree是空的,沒有任何樣本,我們從訓練集讀入第一個樣本點,將
它放入一個新的CF三元組A,這個三元組的N=1,將這個新的CF放入根節點

在這里插入圖片描述
繼續讀入第二個樣本點,我們發現這個樣本點和第一個樣本點A,在半徑為T的超球體范圍內,也就是說,他們屬于一個CF,我們將第二個點也加入CF A,此時需要更新A的三元組的值。此時A的三元組中N=2,如下圖一

在這里插入圖片描述
讀入第三個樣本點,若我們發現這個點不能融入剛才前面的樣本點形成的超球體內,就需要
一個新的CF三元組B。此時根節點有兩個CF三元組A和B,如上圖二

讀入第四個樣本點,若發現和B在半徑小于T的超球體內,繼續更新

在這里插入圖片描述

什么時候CF Tree的節點需要分裂呢?

假設我們現在的CF Tree 如下圖, 節點LN1有三個CF, LN2和LN3各有兩個CF。我們的葉子節點的最大CF數λ=3。此時一個新的樣本點來了,計算得出它離LN1中的葉子節點最近,那么開始判斷它是否在sc1,sc2,sc3。這3個CF對應的超球體之內,因不在,故需要建立一個新的CF,即sc8來容納它。

但我們的λ=3,也就是說LN1的CF個數已經達到最大值了,不能再創建新的CF了,此時就要將LN1節點一分為二了

在這里插入圖片描述
將LN1里所有CF元組中,找到兩個最遠的CF做為種子CF,然后將LN1節點里所有CF 即sc1, sc2, sc3,以及新樣本點的新元組sc8劃分到兩個新的節點上。將LN1節點劃分后的CF Tree如下圖

在這里插入圖片描述
若內部節點的最大CF數β=3,則此時會導致最大CF數超了,也就是說要繼續,方法與前面一樣,分裂后的CF Tree如下圖
在這里插入圖片描述


4 BIRCH聚類算法的優勢和局限性

算法優點

  1. 節省內存。葉子節點放在磁盤分區上,非葉子節點僅僅是存儲了一個CF值,外加指向父節點和孩子節點的指針。
  2. 快, 計算兩個簇的距離只需要用到(N,LS,SS)這三個值足矣。
  3. 只需掃描一遍數據集即可建樹。
  4. 可識別噪聲點。建立好CF樹后把那些包含數據點少的子簇剔除。

算法缺點

  1. 結果依賴于數據點的插入順序。
  2. 對非球狀的簇聚類效果不好。

5 BIRCH聚類算法的應用實例

  1. 社交網絡分析:在社交網絡中,用戶的行為和關系可以形成大規模的數據集。使用BIRCH聚類算法,可以有效地識別出社交網絡中的不同群體或社區,從而幫助研究人員或企業更好地理解用戶行為,優化產品設計或服務。
  2. 電商推薦系統:在電商領域,用戶的歷史購買記錄、瀏覽記錄等行為數據可以形成大規模的數據集。通過應用BIRCH聚類算法,可以將相似的用戶或商品聚類在一起,從而實現更精準的推薦服務。同時,算法還可以幫助商家發現潛在的客戶群體和市場趨勢。
  3. 金融風險管理:在金融領域,大量的交易數據、客戶信息等數據需要進行有效的分析和處理。BIRCH聚類算法可以幫助金融機構識別出異常交易或客戶行為,從而及時發現和防范金融風險。
  4. 圖像分割和識別:在圖像處理領域,BIRCH聚類算法可以用于圖像分割和識別。算法可以將圖像中的像素或區域聚類在一起,從而形成不同的對象或特征。這有助于實現更準確的圖像識別和目標檢測。

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

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

相關文章

企業微信私有部署:實現高效溝通與信息安全

隨著移動互聯網的快速發展,企業微信作為一種高效、便捷的通訊工具,已經成為了眾多企業的首選。然而,對于一些對信息安全有特殊要求的大型企業而言,使用公有版企業微信并不能滿足其安全需求。因此,企業微信私有部署應運…

matplotlib.animation 3d姿態動畫

目錄 演示效果: 演示代碼: 保存為gif 演示效果: 演示代碼: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定義人體關鍵點…

【c++入門】純粹的五位偶數

說明 純粹偶數指的是一個數的各個位都是偶數的數,比如:24686;請編程求出10000~n中,所有的五位的純粹偶數有多少個? 輸入數據 一個整數n(n為一個5位的整數) 輸出數據 一個整數,代…

網絡防御第6次作業

防病毒網關 按照傳播方式分類 病毒 病毒是一種基于硬件和操作系統的程序,具有感染和破壞能力,這與病毒程序的結構有關。病毒攻擊的宿主程序是病毒的棲身地,它是病毒傳播的目的地,又是下一次感染的出發點。計算機病毒感染的一般過…

Java基礎 - Stream 流:Stream API的中間操作

在上一篇博客中,我介紹了構建 Stream 流的多種方式,以及 Stream 流的特點和優勢。如果你還沒有閱讀,你可以點擊這里查看。 Java基礎 - Stream 流:構建流的多種方式 在這篇博客中,我將探索 Stream API 的中間操作&…

動態規劃(算法競賽、藍橋杯)--分組背包DP

1、B站視頻鏈接&#xff1a;E16 背包DP 分組背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i組第j個物品的體積 s[i]:第i組物品的個數 int f[N][N]; // f[i,j]:前i組物品&#xff0c;能放…

學習JavaEE的日子 Day21 枚舉

Day21 1.枚舉的引入 需求&#xff1a;編寫季節類&#xff08;Season&#xff09;&#xff0c;該類只有四個對象&#xff08;spring&#xff0c;summer&#xff0c;autumn&#xff0c;winter&#xff09; 概念&#xff1a;枚舉&#xff08;enum&#xff09;全稱為 enumeration&…

基帶信號處理設計原理圖:2-基于6U VPX的雙TMS320C6678+Xilinx FPGA K7 XC7K420T的圖像信號處理板

基于6U VPX的雙TMS320C6678Xilinx FPGA K7 XC7K420T的圖像信號處理板 綜合圖像處理硬件平臺包括圖像信號處理板2塊&#xff0c;視頻處理板1塊&#xff0c;主控板1塊&#xff0c;電源板1塊&#xff0c;VPX背板1塊。 一、板卡概述 圖像信號處理板包括2片TI 多核DSP處理…

Linux進程管理:(二)進程調度原語

文章說明&#xff1a; Linux內核版本&#xff1a;5.0 架構&#xff1a;ARM64 參考資料及圖片來源&#xff1a;《奔跑吧Linux內核》 Linux 5.0內核源碼注釋倉庫地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 進程調度的概念比較簡單&#xff0c…

Java學習筆記NO.17

T1&#xff1a;合并兩個排序好的整數數組 import java.util.Arrays;public class MergeSortedArrays {public static int[] mergeArrays(int[] arr1, int[] arr2) {int[] result new int[arr1.length arr2.length];int i 0, j 0, k 0;while (i < arr1.length &&am…

一個簡單的iOS天氣應用程序源碼

創建一個簡單的iOS天氣應用程序涉及到多個步驟&#xff0c;包括設置項目、編寫代碼和使用外部API。由于篇幅限制&#xff0c;我將提供一個基礎的示例&#xff0c;這個例子會展示如何創建一個簡單的UI&#xff0c;獲取用戶的當前位置&#xff0c;并從OpenWeatherMap API獲取天氣…

QPS 提升 10 倍!滴滴借助 StarRocks 物化視圖實現低成本精確去重

作者&#xff1a;滴滴 OLAP 開發工程師 劉雨飛 小編導讀&#xff1a; 滴滴于 2022 年引入了 StarRocks。經過一年多的努力&#xff0c;StarRocks 逐漸替代了原有技術棧&#xff0c;成為滴滴內部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已經成功建立了超過 40 個 …

Cesium插件系列——3dtiles壓平

本系列為自己基于cesium寫的一套插件具體實現。 這里是根據Cesium提供的CustomShader來實現的。 在CustomShader的vertexShaderText里&#xff0c;需要定義vertexMain函數&#xff0c;例如下&#xff1a; struct VertexInput {Attributes attributes;FeatureIds featureIds;…

LVGL常用部件使用總結之圖片部件

圖片部件可用于顯示圖片&#xff0c;圖片源可以是 C 語言數組格式的文件、二進制的.bin 文件以及圖標字體。值得注意的是&#xff0c;圖片部件要顯示 BMP、JPEG 等格式的圖片&#xff0c;則必須經過解碼。 圖片部件的組成部分僅有一個&#xff1a;主體&#xff08;LV_PART_MAIN…

URI到底是個啥

URI是統一資源標識符&#xff08;Uniform Resource Identifier&#xff09;&#xff0c;URL是統一資源定位符&#xff08;Uniform Resource Locator&#xff09;。 具體如何標記和區分服務器上的資源用的其實就是URI&#xff0c;因為其經常出現在瀏覽器的地址欄里&#xff0c;…

Verilog(未完待續)

Verilog教程 這個教程寫的很好&#xff0c;可以多看看。本篇還沒整理完。 一、Verilog簡介 什么是FPGA&#xff1f;一種可通過編程來修改其邏輯功能的數字集成電路&#xff08;芯片&#xff09; 與單片機的區別&#xff1f;對單片機編程并不改變其地電路的內部結構&#xff0…

Parallel Computing - 一文講懂并行計算

目錄 Throughput/LatencySerial ComputingParallel ComputingTypes of parallel computersSimple 4-width SIMDAmdahls lawTypes of parallelism**Data Parallel Model**Task parallel PartitioningDomain DecompositionFunctional Decomposition CommunicationsExample that d…

java調用chatgpt接口,實現專屬于自己的人工智能助手

文章目錄 前言導包基本說明請求參數響應參數創建請求和響應的VO類 代碼編寫使用最后說明 前言 今天突然突發奇想&#xff0c;就想要用java來調用chatget的接口&#xff0c;實現自己的聊天機器人&#xff0c;但是網上找文章&#xff0c;屬實是少的可憐(可能是不讓發吧)。找到了…

ESP32 web 對接華為云平臺--MQTT協議

文章目錄 前言一、MQTT協議二、如何使用MQTT協議對接華為云1.注冊華為云賬號2.設備接入中創建資源空間3.如何連接4.通過MQTT.fx工具做初步對接4.1 設置連接信息4.2 連接平臺 5.查看平臺設備信息 三. 設備測對接平臺1.ESP測引入MQTT庫2.編碼2.1前端編碼修改2.2 后端接口修改 3.M…

element-plus+vue3表單含圖片(可預覽)(線上圖片)

一、要實現的效果&#xff1a; 二、如果期間出現這樣的效果&#xff08;表格穿透過來了&#xff09;&#xff0c;加上了這行代碼就可以了&#xff1a; preview-teleported“true” 如果僅測試用&#xff0c;建議使用線上圖片鏈接的形式&#xff0c;免得本地地址不生效&#xf…