1. 程式人生 > >機器學習之層次聚類演算法

機器學習之層次聚類演算法


        層次聚類(Hierarchical Clustering)是對給定資料集在不同層次進行劃分,形成樹形的聚類結構,直到滿足某種停止條件為止。資料集的劃分可採用自底向上或自頂向下的劃分策略。

1、凝聚的層次聚類演算法AGNES

        AGNES(AGglomerative NESTing)採用自底向上的策略,先將每個樣本作為一個初始聚類簇,然後迴圈將距離最近的兩個簇進行合併,直到達到某個停止條件,如指定的簇數目等。

        兩個簇間距離可以由這兩個不同簇中距離最近的資料點的相似度來確定,計算方法有:

        (1)最小距離single/word-linkage(SL聚類)

                兩個聚簇中最近的兩個樣本之間的距離

                最終得到的模型容易形成鏈式結構。

        (2)最大距離complete-linkage(CL聚類)

                兩個聚簇中最遠的兩個樣本之間的距離

                如果存在異常值,那麼構建可能不太穩定。

        (3)平均距離average-linkage(AL聚類)

                兩個聚簇中樣本間兩兩距離的平均值

        (4)中值距離median-linkage

                兩個聚簇中樣本間兩兩距離的中值

                比

AL更能消除個別偏離樣本對結果的干擾。

     

     

         

2、分裂的層次聚類演算法DIANA

        DIANA(DIvisive ANAlysis)採用自頂向下的策略,先將所有的樣本歸為一個簇,然後按照某種規則逐漸分裂為越來越小的簇,直到達到某個停止條件,如指定的簇數目等。分裂方式如下:

        (1)在同一個簇c中計算兩兩樣本之間的距離,找出距離最遠的兩個樣本a、b;

        (2)將樣本a、b分配到不同的類簇c1、c2中;

        (3)計算c中剩餘的其他樣本分別和a、b的距離,若dist(a)<dist(b),則將樣本分入c1中,否則分入c2中。

        AGENS、DIANA演算法的優缺點:

                簡單、理解容易;

                合併點/分裂點的選擇不太容易;

                合併點/分裂點的操作不能進行撤銷;

                不太適合大資料集、樣本量很大的情況,伸縮性差、執行效率較低O(t*m2),t為迭代次數,m為樣本數量。

層次聚類優化演算法

3、平衡迭代削減聚類法BIRCH

        BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)也稱利用層次方法的平衡迭代規約和聚類演算法,適合資料量非常大、簇數量也比較多的情況。此演算法執行效率極高,只需掃描一遍資料集即可聚類,並能有效地處理離群點。BIRCH演算法的主要步驟是:

        (1)掃描資料集,動態建立一棵CF-Tree存放在記憶體中;

        (2)若記憶體不夠,則增大閾值T,在原樹的基礎上構建一棵比較小的樹;

        (3)對CF-Tree葉節點使用全域性性的聚類演算法如K-means等,以消除由於樣本讀入順序導致的不合理的樹結構,改進聚類質量。

        BIRCH演算法的核心是用聚類特徵CF表示一個簇的相關資訊,構建滿足分支因子和簇直徑限制的聚類特徵樹CF-Tree,然後對葉子節點進行聚類。

        聚類特徵Cluster Feature指的是一個滿足線性關係的三元組(N,LS,SS),其中:

            N表示這個CF中包含的樣本數量;

            LS表示這個CF中包含的樣本點的各特徵維度的向量和;

            SS表示這個CF中包含的樣本點的各特徵維度的平方和(標量)。

         

        聚類特徵樹CF-Tree的每一個節點由若干CF組成,內部節點指向葉節點,所有的葉節點用一個雙向連結串列連結起來。由於CF滿足線性關係,因此CF-Tree父節點中的每個CF三元組的值等於它所指向的子節點的所有CF三元組之和。CF-Tree的構建是動態的,可以隨時根據新增資料對樹模型進行更新。

        CF-Tree的幾個關鍵超引數:

                B:每個內部節點最大的CF個數;

                L:每個葉節點最大的CF個數;

                T:葉節點每個CF的最大樣本半徑閾值,即新樣本若被分類到某一個CF中,其到該CF中心的距離最大值。

         

        CF-Tree構建步驟:

        (1)初始狀態時CF-Tree是空的,沒有任何樣本。讀入第一個樣本,生成這個節點的第一個CF三元組,此時N=1,令它為CF1。

        (2)讀入第二個樣本,若它到CF1的距離小於T,那麼這個樣本也歸入CF1(N=2),更新其三元組資料;如果大於T,則此節點新增一個CF三元組CF2,這個樣本作為CF2中的首個樣本(N=1)。

        (3)節點分裂:從根節點開始,自上而下選擇葉節點,令新樣本進入最近的葉節點;考察新樣本與葉節點所有CF的距離,如果都大於T,則生成一個新的CF;但是如果此時節點的CF總個數大於L,就需要對該節點進行分裂:

                找到該葉節點內各個CF之間的距離最大的兩個CF,分別作為兩個新葉節點的CF,再計算其餘CF到這兩個CF之間的距離,將原葉節點的資料劃分到這兩個新葉節點中。

                如果葉節點分裂過後導致上一層的內部節點的CF總數超過B,則該內部節點需要進行分裂,分裂方式和葉節點分裂方式相同。

        (4)迴圈上述過程,當有樣本無法插入時,需要提升閾值T並重建樹,直到所有樣本均進入CF樹為止。

         BIRCH演算法的特點:

        (1)速度快、節約記憶體,適合處理大規模資料集,線性效率(I/O花費與資料量呈線性關係);

        (2)可識別噪聲點,建立CF-Tree後將包含資料點少的子簇剔除;

        (3)採用多階段聚類技術,單次掃描產生基本的聚類,多次掃描改善聚類質量;

        (4)是一種增量的聚類方法,對每個點的決策基於當前已經處理過的點;

        (5)由於CF-Tree對每個節點的CF個數有限制,導致聚類的結果可能和真實的分佈不同;

        (6)由於CF-Tree各節點閾值相同,只適合體積相差不大的簇之間的聚類,對體積相差較大的簇聚類的效果不是很好。因此可以引入多閾值BIRCH演算法,為每個簇設一個閾值,將CF表示為四元組(N,LS,SS,T);

        (7)只適合分佈呈凸形或者超球形的資料集,因為使用了半徑或直徑的概念來控制聚類的邊界;

        (8)對高維特徵的資料聚類效果不好,此時可選擇Mini Batch K-means。

        (9)BIRCH演算法過程一旦中斷,必須從頭再來。

         


4、使用代表點的聚類法CURE

        CURE(Clustering Using REpresentatives)該演算法先把每個點作為一個簇,然後合併距離最近的簇直到簇個數達到要求為止。CURE和AGNES演算法的區別是:不是使用所有點或質心+距離來表示一個簇,而是從每個簇中抽取固定數量、分佈較好的點作為簇的代表點,並將這些代表點乘以一個適當的收縮因子,使它們更加靠近類中心點。代表點的收縮特性可以調整模型匹配非高斯分佈的應用場景,而且收縮因子的使用可以減少噪音資料對聚類的影響。

        CURE演算法實現過程如下:

        (1)從原始資料中隨機抽樣,得到資料集S;

        (2)S進行分割槽,在記憶體中對每個分割槽分別進行區域性聚類;

        (3)如果一個類簇增長緩慢或不增長,說明它是噪聲,要去除掉;

        (4)新的類簇由固定個數的代表點經過收縮後表示;

        (5)對磁碟上整個原始資料根據代表點進行全域性聚類。

        由於CURE演算法的時間複雜度較高,可以使用堆、k-d樹、隨機抽樣和分割槽等技術改善效率;CURE的聚類效果受引數的影響較大,如隨機抽樣的比例、聚類個數、收縮因子的設定等。

相關推薦

機器學習層次演算法

        層次聚類(Hierarchical Clustering)是對給定資料集在不同層次進行劃分,形成樹形的聚類結構,直到滿足某種停止條件為止。資料集的劃分可採用自底向上或自頂向下的劃分策略。1、凝聚的層次聚類演算法AGNES        AGNES(AGglom

機器學習層次及程式碼示例

一、層次聚類 層次聚類是無監督學習方法,可對給定的N個待聚類的樣本進行層次的分類,直到某種條件(類的個數、類間的距離超過某個閾值)滿足為止。 1、層次聚類的劃分 對於層次聚類,可具體分為: a. 凝聚的(agglomerative)層次聚類: 採用

Spark機器學習-實時演算法呼叫

Spark MLIB中的Kmenas聚類演算法,資料通過SparkStreaming 實時拉取kafka中的資料,並呼叫已經訓練好的聚類模型;根據讀取的資料實時的進行分類package com.demo.cn.streaming import org.apache.kafk

機器學習sklearn19.0演算法——層次(AGNES/DIANA)、密度(DBSCAN/MDCA)、譜

一、層次聚類 BIRCH演算法詳細介紹以及sklearn中的應用如下面部落格連結: http://www.cnblogs.com/pinard/p/6179132.html http://www.cnblogs.com/pinard/p/62

Python機器學習——Agglomerative層次

條件 分享圖片 n-2 mov unique ber and 兩個 its 層次聚類(hierarchical clustering)可在不同層次上對數據集進行劃分,形成樹狀的聚類結構。AggregativeClustering是一種常用的層次聚類算法。 ??其原理是:最初

機器學習DBSCAN

機器學習之DBSCAN聚類 # -*- coding: utf-8 -*- """ Created on Wed Nov 28 18:50:57 2018 @author: muli """ import numpy as np from sklearn.datas

機器學習kMeans

機器學習之kMeans聚類 # -*- coding: utf-8 -*- """ Created on Wed Nov 28 16:23:36 2018 @author: muli """ from sklearn.datasets.samples_generat

機器學習 K-means 演算法 C++

筆記: 尚未解決的問題 :     1. 只支援二維,而不支援三維或更高,需要模板元     2. 尚未實現如何刪除極端點, 即預處理     3. 尚未視覺化 編譯環境 Ubuntu gcc 5.4 編譯選項  g++ -std=c++14 #include &l

機器學習層次

寫在篇前   層次聚類(hierarchical clustering)是一種通用的聚類演算法之一,它通過自下而上合併或自上而下拆分來構建巢狀聚類。這種簇的層次結構表示為樹(或樹狀圖),樹的根匯聚所有樣本,樹的葉子是各個樣本。本篇部落格會簡述層次聚類的原理,重點

機器學習sklearn19.0演算法——Kmeans演算法

一、關於聚類及相似度、距離的知識點 二、k-means演算法思想與流程 三、sklearn中對於kmeans演算法的引數 四、程式碼示例以及應用的知識點簡介 (1)make_blobs:聚類資料生成器 sklearn.datasets.m

機器學習(4)--層次(hierarchical clustering)基本原理及實現簡單圖片分類

關於層次聚類(hierarchical clustering)的基本步驟: 1、假設每個樣本為一類,計算每個類的距離,也就是相似度 2、把最近的兩個合為一新類,這樣類別數量就少了一個 3、重新新類與各個舊類(去了那兩個合併的類)之間的相似度; 4、迴圈重複2和3直到所有樣本

機器學習】常用演算法原型

1. 聚類簡介 在機器學習中,分為監督學習、無監督學習和半監督學習。前一篇部落格中提到的迴歸和分類都屬於監督學習,本文著重探討無監督學習中的聚類演算法。 博主之前看過一些資料,這兩天也翻閱了網上的各大部落格後,也想總結一下,寫一寫聚類相關的知識點,對

[機器學習]t-SNE演算法實踐指南

Saurabh是一名資料科學家和軟體工程師,熟練分析各種資料集和開發智慧應用程式。他目前正在加州大學伯克利分校攻讀資訊和資料科學碩士學位,熱衷於開發基於資料科學的智慧資源管理系統。 介紹 許多資料科學家經常面對的問題之一:假設有一個包含數百個特徵(變數)的資料集,且對資料所屬的域沒有任何瞭解,需要對該資

分析層次演算法

層次聚類演算法: 前面介紹的K-means演算法和K中心點演算法都屬於劃分式(partitional)聚類演算法。層次聚類演算法是將所有的樣本點自底向上合併組成一棵樹或者自頂向下分裂成一棵樹的過程,這兩種方式分別稱為凝聚和分裂。 凝聚層次演算法: 初始階段,將每個樣本點分別

機器學習劃分及程式碼示例

一、聚類 聚類是一種無監督學習,根據樣本的內在相似性/距離,將大量未知標記的樣本集劃分為多個類別,使得同一個類別內的樣本相似度較大(距離較小),而不同類別間的樣本相似度較小(距離較大)。 劃分聚類包含K-Means、Bisecting K-Means(二分K

機器學習--kmeans簡單算法實例

rpo src datasets += atp 中心 ets att erp import numpy as np import sklearn.datasets #加載原數據 import matplotlib.pyplot as plt

機器學習中的演算法演變及學習筆記

【說在前面】本人部落格新手一枚,象牙塔的老白,職業場的小白。以下內容僅為個人見解,歡迎批評指正,不喜勿噴![認真看圖][認真看圖] 【補充說明】聚類演算法可以作為獨立方法將資料聚成不同簇,也可以作為資料探勘任務(例如分類、關聯規則等)的預處理! 【補充說明】聚類演算法與分類演算法的主要區別在於訓練時的樣本有無

機器學習實戰-62:層次演算法(Hierarchical Clustering)

機器學習實戰-62:層次聚類演算法 機器學習分為監督學習、無監督學習和半監督學習(強化學習)。無監督學習最常應用的場景是聚類(clustering)和降維(dimension reduction)。聚類演算法包括:K均值聚類(K-Means)、層次聚類(Hie

機器學習-(層次演算法)

一,介紹 層次聚類試圖在不同層次對資料集進行劃分。劃分方式可以採用“自底向上”的聚合策略,也可以採用“自頂向下”的分拆策略。 我們在這裡介紹其中一種:AGNES演算法。這是一種自底向上的層次類聚演算法。先將每個樣本都看成一個初始聚類簇,然後每次演算法找出最近的兩個聚類簇進

機器學習】【層次演算法-1】HCA(Hierarchical Clustering Alg)的原理講解 + 示例展示數學求解過程

層次聚類(Hierarchical Clustering)是聚類演算法的一種,通過計算不同類別資料點間的相似度來建立一棵有層次的巢狀聚類樹。在聚類樹中,不同類別的原始資料點是樹的最低層,樹的頂層是一個聚類的根節點。建立聚類樹有自下而上合併和自上而下分裂兩種方法,本篇文章介紹合併方法。層次聚類的合併演算法層次聚