聚類(Clustering)-----物以類聚,人以群分。
1.Finding groups of objects
Objects similar to each other are in the same group
Objects are different from those in other groups
2.Unsupervised Learning
No labels
Data driven
3.Requirements:arbitrary shape,noise and outliers
4.K-means、K-mediods、DBSCAN、EM(Expectation Maximization)
聚類是觀察式學習,而不是示例式的學習。
聚類能夠作為一個獨立的工具獲得數據的分布狀況,觀察每一簇數據的特征,集中對特定的聚簇集合作進一步地分析。
聚類分析還可以作為其他數據挖掘任務(如分類、關聯規則)的預處理步驟。
聚類分析的方法
划分方法:
Construct various partitions and then evaluate them by some criterion,e.g.,minimizing the sum of square errors
Typical methods:k-means,k-medoids,CLARANS
層次方法:
Create a hierarchical decomposition of the set of data (or objects) using some criterion
Typical methods:Diana,Agnes,BIRCH,CAMELEON
基於密度的方法:
Based on connectivity and density functions
Typical methods:DBSCAN,OPTICS,DenClue
基於網格的方法:
Based on multiple-level granularity structure
Typical methods:STING,WaveCluster,CLIQUE
基於模型的方法:
A model is hypothesized for each of the clusters and tries to find the best fit of that model to each other
Typical methods:EM,SOM,COBWEB
基於頻繁模式的方法:
Based on the analysis of frequent patterns
Typical methods:p-Cluster
基於約束的方法:
Clustering by considering user-specified or application-specific constraints
Typical methods:COD(obstacles),constrained clustering
基於鏈接的方法:
Objects are often linked together in various ways
Massive links can be used to cluster objects:SimRank,LinkClus
距離需要滿足的性質:
非負性:d(i, j) > 0 if i ≠ j, and d(i, i) = 0
對稱性:d(i, j) = d(j, i)
三角不等式:d(i, j)<= d(i, k) + d(k, j)
閔可夫斯基距離(Minkowski Distance): 計算距離的通用的公式:
i = (xi1, xi2, …, xip) 和 j = (xj1, xj2, …, xjp) 是p維數據對象
曼哈頓距離(或城市塊距離Manhattan distance):h=1
歐幾里德距離(用的最多的):h=2
K-Means:
k-均值聚類算法的核心思想是通過迭代把數據對象划分到不同的簇中,以求目標函數最小化,從而使生成的簇盡可能地緊湊和獨立。
首先,隨機選取k個對象作為初始的k個簇的質心;
然后,將其余對象根據其與各個簇質心的距離分配到最近的簇;再求新形成的簇的質心。
這個迭代重定位過程不斷重復,直到目標函數最小化為止。
輸入:期望得到的簇的數目k,n個對象的數據庫。
輸出:使得平方誤差准則函數最小化的k個簇。
方法:
選擇k個對象作為初始的簇的質心;
repeat
計算對象與各個簇的質心的距離,將對象划分到距離其最近的簇;
重新計算每個新簇的均值;
until 簇的質心不再變化。
優點
相對高效: O(tkn), 當 n 是 對象數, k 是 簇數, 並且 t 是 疊代數 . 通常地, k, t << n.
通常終止在局部最優,但可用全局最優技術改進。(模擬退火和遺傳算法)
不足
只有當中心可計算時才適用, 無法處理分類/標稱數據
需要事先指定簇的個數K
無法處理噪聲的數據
不能發現非凸形狀簇
K-Mediods:
k-均值算法采用簇的質心來代表一個簇,質心是簇中其他對象的參照點。因此,k-均值算法對孤立點是敏感的,如果具有極大值,就可能大幅度地扭曲數據的分布。
k-中心點算法是為消除這種敏感性提出的,它選擇簇中位置最接近簇中心的對象(稱為中心點)作為簇的代表點,目標函數仍然可以采用平方誤差准則。
處理過程:首先,隨機選擇k個對象作為初始的k個簇的代表點,將其余對象根據其與代表點對象的距離分配到最近的簇; 然后,反復用非代表點來代替代表點,以改進聚類質量,聚類質量用一個代價函數來估計,該函數度量對象與代表點對象之間的平均相異度。
輸入:n個對象的數據庫,期望得到的簇的數目k
輸出:使得所有對象與其最近中心點的偏差總和最小化的k個簇
方法
選擇k個對象作為初始的簇中心
repeat
對每個對象,計算離其最近的簇中心點,並將對象分配到該中心點代表的簇
隨機選取非中心點Orandom
計算用Orandom 代替Oj 形成新集合的總代價S
如果S<0,用Orandom代替Oj,形成新的k個中心點的集合
until 不再發生變化
采用k-中心點算法有兩個好處:
對屬性類型沒有局限性;
通過簇內主要點的位置來確定選擇中心點,對孤立點的敏感性小
不足:
處理時間要比k-mean更長;
用戶事先指定所需聚類簇個數k。
DBCSAN:
DBSCAN(Density Based Spatial Clustering of Applications with Noise,具有噪聲應用的基於密度的空間聚類)
一種基於密度的聚類算法,它將足夠高密度的區域划分為簇,能夠在含有“噪聲”的空間數據庫中發現任意形狀的簇
兩個全局參數:Eps:領域半徑,MinPts:在領域中點的最少個數
核心點:領域半徑對象個數大於密度閾值MinPts
邊界點:領域半徑對象個數小於密度閾值MinPts
點p的Eps-鄰域記為NEps(p),NEps(p)={qєD|dist(p,q)≤Eps}
直接密度可達:點p從點q是直接密度可達的,則Eps,MinPts要滿足:p是屬於NEps(q);|NEps(q)|>=MinPts(核心條件)
密度可達:如果存在一個點的序列p1, p2,…, pn,p1 = q, pn =p,其中pi+1 是從pi直接密度可達的,則稱點p是從點q關於Eps和MinPts密度可達的。
密度相連:如果存在一個點o,p和q都是從點o關於Eps和MinPts密度可達的,則稱點p是從點q關於Eps和MinPts密度相連的。
輸入D:一個包含n個對象的數據集
Ɛ:半徑參數
MinPts:鄰域密度閾值
輸出:基於密度的簇的集合
方法:
標記所有對象為unvisited;
do
隨機選擇一個unvisited對象p
標記p為visited
if p的Ɛ-鄰域至少有MinPts個對象
創建一個新簇C,並把p添加到C
令N為p的Ɛ-鄰域中的對象的集合
for N中的每個點p’
if p'是unvisited
標記p’為visited
if p’的Ɛ-鄰域至少有MinPts個點,把這些點添加到N
if p’還不是任何簇的成員,把p’添加到C
endfor
輸出C
else 標記p為噪聲
Until 沒有標記為unvisited的對象
時間復雜度O(n2) ,若使用空間索引,則時間復雜度為O(nlogn) ,即便對於高維數據,DBSCAN的空間也是O(n)
優點:可以在帶有噪聲的空間數據庫中發現任意形狀的簇
不足:參數需要由用戶確定,算法對參數敏感,在具體實施時困難很大,當簇的密度變化太大以及高維數據,DBSCAN會有麻煩。
EM
EM算法是一種框架,它逼近統計模型參數的最大似然或最大后驗估計。在模糊或基於概率模型的聚類的情況下,EM算法從初始參數集出發,並且迭代直到不能改善聚類,即直到聚類收斂或改變充分小(小於一個預先設定的閾值)。每次迭代由兩步組成:
期望步(E-步):根據當前的模糊聚類或概率簇的參數,把對象指派到簇中。
最大化步(M-步):發現新的聚類或參數,最小化模糊聚類的SSE或基於概率模型的聚類的期望似然。
形象說法:比如說食堂的大師傅炒了一份菜,要等分成兩份給兩個人吃,顯然沒有必要拿來天平一點一點的精確的去稱分量,最簡單的辦法是先隨意的把菜分到兩個碗中,然后觀察是否一樣多,把比較多的那一份取出一點放到另一個碗中,這個過程一直迭代地執行下去,直到大家看不出兩個碗所容納的菜有什么分量上的不同為止。
最大似然估計(https://blog.csdn.net/zengxiantao1994/article/details/72787849)
Jensen(琴生)不等式:函數的期望大於等於期望的函數,即 E(f(x))≥f(E(x))
算法推導:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
聚類評估
聚類評估估計在數據集上進行聚類的可行性和被聚類方法產生的結果的質量。聚類評估主要包括:估計聚類趨勢、確定數據集中的簇數、測定聚類質量。
估計聚類趨勢:對於給定的數據集,評估該數據集是否存在非隨機結構。盲目地在數據集上使用聚類方法將返回一些簇,所挖掘的簇可能是誤導。數據集上的聚類分析是有意義的,僅當數據中存在非隨機結構。
聚類趨勢評估確定給定的數據集是否具有可以導致有意義的聚類的非隨機結構。一個沒有任何非隨機結構的數據集,如數據空間中均勻分布的點,盡管聚類算法可以為該數據集返回簇,但這些簇是隨機的,沒有任何意義。聚類要求數據的非均勻分布。
霍普金斯統計量(Hopkins Statistic)是一種空間統計量,檢驗空間分布的變量的空間隨機性。
計算步驟:
(1) 均勻地從D的空間中抽取n個點p1,p2,...pn,對每個點pi(1≤i≤n),找出pi在D中的最近鄰,並令xi為pi與它在D中的最近鄰之間的距離,即
(2) 均勻地從D的空間中抽取n個點q1,q2,...qn,對每個點qi(1≤i≤n),找出qi在D-{qi}中的最近鄰,並令yi為qi與它在D-{qi}中的最近鄰之間的距離,即
(3) 計算霍普金斯統計量H
如果D是均勻分布的,則將會很接近,H大約為0.5.而如果D是高度傾斜的,則
,因而H將會接近與0.
確定數據集中的簇數:K-均值這樣的算法需要數據集的簇數作為參數,簇數也可以看作是數據集的有趣並且重要的概括統計量。因此,在使用聚類算法導出詳細的簇之前,估計簇數是可取的。
經驗方法:
肘方法(elbow method):給定k>0,使用像K-均值這樣的算法對數據集聚類,並計算簇內方差和var(k)。然后,繪制var關於k的曲線。曲線的第一個(或最顯著的)拐點暗示“正確的”簇數。
交叉驗證法:將數據分為m部分;用m-1部分獲得聚類模型,余下部分評估聚類質量(測試樣本與類中心的距離和);對k>0重復m次,比較總體質量,選擇能獲得最好聚類質量的k
測定聚類質量:在數據集上使用聚類方法之后,需要評估結果簇的質量。
兩類方法:外在方法和內在方法
外在方法:有監督的方法,需要基准數據。用一定的度量評判聚類結果與基准數據的符合程度。(基准是一種理想的聚類,通常由專家構建)
Jaccard系數(Jaccard Coefficient, JC)
FM指數(Fowlkes and Mallows Index, FMI)
Rand指數(Rand Index, RI)
( a+b+c+d=m(m-1)/2 )
上述性能度量的結果值均在[0,1]區間,值越大越好。
用Q(C,Cg)表示聚類C在給定基准數據Cg條件下的質量度量
Q的好壞取決於四個條件:
簇的同質性:簇內越純越好
簇的完整性:能夠將基准數據中屬於相同類的樣本聚類為相同的類
碎布袋:把一個異種數據加入純類應該比放入碎布袋受到更大的“處罰”
小簇的保持性:把小簇划分成更小簇比把大簇划分為小簇的危害更大
BCubed精度和召回率:一個對象的精度指示同一個簇中有多少個其他對象與該對象同屬一個類別。一個對象的召回率反映有多少同一類別的對象被分配在相同的簇中。
設D={o1,o2,...on}是對象的集合,C是D中的一個聚類。設L(oi)(1≤i≤n)是基准確定的oi的類別,C(oi)是C中oi的cluster_ID,對於兩個對象oi和oj(1≤i,j≤n,i≠j),它們之間在聚類C中的關系的正確性由給出。
BCubed精度定義為
BCubed召回率定義為
內在方法:無監督的方法,無需基准數據。類內聚集程度和類間離散程度。
考慮聚類結果的簇划分C={C1,C2,...,Ck},定義簇C內樣本間的平均距離
簇C內樣本間的最遠距離:
簇Ci與簇Cj最近樣本間的距離:
簇Ci與簇Cj中心點間的距離:
DB指數(Davies-Bouldin Index,DBI)
Dunn指數(Dunn Index,DI)
DBI值越小越好,而DI則相反,值越大越好。
輪廓系數(silhouette coefficient):
對於D中的每個對象o,計算o與o所屬的簇內其他對象之間的平均距離a(o):
b(o)是o到不包含o的所有簇的最小平均距離:
輪廓系數定義為:
輪廓系數的值在-1和1之間。
a(o)的值反映o所屬的簇的緊湊性。該值越小,簇越緊湊。
b(o)的值捕獲o與其他簇的分離程度。b(o)的值越大,o與其他簇越分離。
當o的輪廓系數值接近1時,包含o的簇是緊湊的,並且o遠離其他簇,這是一種可取的情況。
當輪廓系數的值為負時,這意味在期望情況下,o距離其他簇的對象比距離與自己同在簇的對象更近,許多情況下,這很糟糕,應當避免。