1. 程式人生 > >層次聚類之AGNES及Python實現

層次聚類之AGNES及Python實現

層次聚類

層次聚類,顧名思義,就是一層一層的進行聚類,它試圖在不同層次對資料集進行劃分,可以由上向下把大的類別分割,即“自頂向下”的分拆策略(見下面AGNES部分),也可以由下向上對小的類別進行聚合,即“自底向下”的聚合策略:開始把所有的樣本都歸為一類,然後逐步將他們劃分為更小的單元,直到最後每個樣本都成為一類。在這個迭代的過程中通過對劃分過程中定義一個鬆散度,當鬆散度最小的那個類的結果都小於一個閾值,則認為劃分可以終止。這種方法用的不普遍,在這裡不予詳細介紹。下面本文主要對採用自底向上聚合策略的AGNES(AGglomerative NESting)做一個介紹。

AGNES

AGNES,是一種採用自底向上聚合策略的層次聚類演算法,是先將資料集中的每個樣本看作一個初始聚類簇,然後在演算法執行的每一步中找出距離最近的兩個聚類簇進行合併,該過程不斷重複,直至達到預設的聚類簇個數,這裡的關鍵是如何計算聚類簇之間的距離。其實每個聚類簇就是一個樣本集合,聚類簇之間的聚類就是集合之間的聚類。

簇直接的距離

最小距離,是由兩個簇的最近樣本決定。如果層次聚類的距離度量函式採用dmin,兩個簇之間的相似度由兩個簇中最近樣本決定,這樣容易造成Chaining的效果,即兩個簇明明從“大局”上離得比較遠,但是由於其中個別點的距離比較近就被合併了,並且這樣合併之後Chaining效應會進一步擴大,最後會得到比較鬆散的簇。

(1.1)dmin(Ci,Cj)=minxCi,zCjdist(x,z)
python程式碼實現:
#計算歐幾里得距離,a,b分別為兩個元組
def dist(a, b)
:
return math.sqrt(math.pow(a[0]-b[0], 2)+math.pow(a[1]-b[1], 2)) #dist_min def dist_min(Ci, Cj): return min(dist(i, j) for i in Ci for j in Cj)

最大距離,由兩個簇的最遠樣本決定。這個則是最小距離dmin的反面極端,其效果也是剛好相反的,限制非常大,兩個 cluster 即使已經很接近了,但是隻要有不配合的點存在,就頑固到底,老死不相合並,也是不太好的辦法。dmindmax這兩種相似度的定義方法的共同問題就是指考慮了某個有特點的資料,而沒有考慮類內資料的整體特點。

(1.2)dmax(Ci,Cj)=maxxCi,zCjdist(x,z)
python程式碼實現:
#dist_max
def dist_max(Ci, Cj):
    return max(dist(i, j) for i in Ci for j in Cj)

平均距離,由兩個簇所有樣本共同決定。就是把兩個集合中的點兩兩的距離全部放在一起求一個平均值,相對也能得到合適一點的結果。有時異常點的存在會影響均值,平常人和富豪平均一下收入會被拉高是吧,因此這種計算方法的一個變種就是取兩兩距離的中位數

(1.3)davg(Ci,Cj)=1|Ci||Cj|xCixCjdist(x,z)
python程式碼實現:
#dist_avg
def dist_avg(Ci, Cj):
    return sum(dist(i, j) for i in Ci for j in Cj)/(len(Ci)*len(Cj))

演算法過程(摘抄於周志華的《機器學習》)

AGNES演算法描述如下所示,在第1-9行,演算法先對僅含一個樣本的初始聚類簇和相應的距離矩陣進行初始化;然後在第11-23行,AGNES不斷合併最近的聚類簇,並對合並得到的聚類簇的距離矩陣進行更新;上述過程不斷重複,直至達到預設的聚類簇數。

輸入:樣本集D={x1,x2,...,xm}
   聚類簇距離度量函式d
   聚類簇數k
過程:
1. for j=1,2,...,m do
2.  Cj={xj}
3. end for
4. for i=1,2,...,m do
5.  for

相關推薦

層次AGNESPython實現

層次聚類 層次聚類,顧名思義,就是一層一層的進行聚類,它試圖在不同層次對資料集進行劃分,可以由上向下把大的類別分割,即“自頂向下”的分拆策略(見下面AGNES部分),也可以由下向上對小的類別進行聚合,即“自底向下”的聚合策略:開始把所有的樣本都歸為一類,然後逐

層次AGNES演算法和DIANA演算法

轉載自:http://blog.csdn.net/hwwn2009/article/details/38331577 層次聚類的基本概念  層次聚類方法是古老而且常用的聚類方法。層次聚類方法又有兩種產生層次聚類的基本方法。 凝聚的:該方法是自底向上的方法,初始每個物

層次演算法原理實現

聚類 聚類是對點集進行考察並按照某種距離測度將他們聚成多個“簇”的過程。聚類的目標是使得同一簇內的點之間的距離較短,而不同簇中點之間的距離較大。 一、聚類演算法介紹      層次法聚類和點分配法聚類。 1.1     點、空間和距離 點集是一種適合於聚類的資料集,每個點都是某空間下的物件。一般意義上,空間

凝聚法層次ward linkage method

function hiera term span cal true 計算 新增 總結 凝聚法分層聚類中有一堆方法可以用來算兩點(pair)之間的距離:歐式,歐式平方,manhattan等,還有一堆方法可以算類(cluster)與類之間的距離,什麽singl

Kmeans算法及其 Python實現

lap pytho pan 鏈接 nbsp ade 不知道 ans details python Kmeans聚類之後如何給數據貼上聚類的標簽? 用了二分Kmeans 來聚類 質心和聚類的簇都得到了,不知道如何給每一條數據貼上具體的標簽? 這個鏈接下的代碼,可以作為參

k-means演算法原理python3實現

本文主要內容:                 1.k-means解決的問題;                 2.k-means原理介紹;                 3.k-means的簡單實現。 1.k-means解決的問題          k-

——MeanShift演算法以及Python實現

均值漂移演算法(MeanShift)是一種旨在發現團(blobs)的聚類演算法 核心思想 尋找核密度極值點並作為簇的質心,然後根據最近鄰原則將樣本點賦予質心 演算法簡介 核密度估計 根據樣本分佈估計在樣本空間的每一點的密度。估計某點的密度時,核密度估計方法會考慮

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

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

機器學習筆記----Fuzzy c-means(FCM)模糊詳解matlab實現

前言:這幾天一直都在研究模糊聚類。感覺網上的文件都沒有一個詳細而具體的講解,正好今天有時間,就來聊一聊模糊聚類。 一:模糊數學 我們大家都知道計算機其實只認識兩個數字0,1。我們平時寫程式其實也是這樣if 1 then do.永遠這種模式,在這種模式中,一個元素要麼屬

層次演算法的原理python實現

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

原型學習向量量化Python實現

學習向量量化(Learning Vector Quantization) 學習向量量化(Learning Vector Quantization,簡稱LVQ)屬於原型聚類,即試圖找到一組原型向量來聚類,每個原型向量代表一個簇,將空間劃分為若干個簇,從而對於任意

python實現一個層次方法

mac ima 優先隊列 () don 標簽 中位數 filepath normal 層次聚類(Hierarchical Clustering) 一.概念   層次聚類不需要指定聚類的數目,首先它是將數據中的每個實例看作一個類,然後將最相似的兩個類合並,該過程叠代計算只到剩

一趟(One-pass Cluster)python實現

最近在學資料探勘的相關基礎知識,希望對學習的內容進行整理,以下轉自很棒的師兄的部落格~ 一趟聚類簡介 一趟聚類演算法是由蔣盛益教授提出的無監督聚類演算法,該演算法具有高效,簡單的特點。資料集只需要遍歷一遍即可完成聚類。演算法對超球狀分佈的資料有良好的識別,對凸型資料分佈識別較差。 一

機器學習層次程式碼示例

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

python模組scipy的層次簡單測試與使用

    scipy模組是很強大,裡面很多有用的函式,這裡先花一點時間使用一下scipy模組中的層次聚類,下面是簡單的使用: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:scipy測試使用 '''

均值(k-means)演算法的python實現

# -*- coding: UTF-8 -*- import numpy import random import codecs import copy import re import matplotlib.pyplot as plt def calcuDistance(vec1, vec2):

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

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

python機器學習--用凝聚層次進行資料分組

1.什麼是層次聚類def perfrom_clustering(X,connectivity,title,num_clusters=3,linkage='ward'): plt.figure() model = AgglomerativeClustering(

(Spectral Clustering)原理Python實現

譜聚類原理及Python實現 圖模型   無向帶權圖模型 G=<V,E> G =< V ,

【再回首Python美】【矩陣】求矩陣中最大元素/最小元素的行列座標 For 層次演算法Hierarchical Clustering Alg

求多維矩陣中最小元素的行列座標,這個在層次聚類演算法中用到,這裡實現記錄一下。1.簡介矩陣M: [[1 3 2] [2 6 0] [9 8 5]]最大元素是9,對應的行列座標為(2,0)最小元素是