聚類分析及k均值聚類(K-means)

以下內容摘自下面鏈接:


http://blog.pluskid.org/?p=17

http://www.mathworks.cn/help/toolbox/stats/kmeans.html

http://www.mathworks.cn/products/image/demos.html?file=/products/demos/shipping/images/ipexhistology.html

http://baike.baidu.com/view/3066906.htm

http://en.wikipedia.org/wiki/K-means_clustering


聚類分析(Cluster analysis )

Clustering(聚類) 和Classification(分類)

Clustering 中文翻譯作“聚類”,簡單地說就是把相似的東西分到一組,同Classification(分類)不同,對於一個 classifier ,通常需要你告訴它“這個東西被分爲某某類”這樣一些例子,理想情況下,一個 classifier 會從它得到的訓練集中進行“學習”,從而具備對未知數據進行分類的能力,這種提供訓練數據的過程通常叫做 supervised learning (監督學習),而在聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起,因此,一個聚類算法通常只需要知道如何計算相似 度就可以開始工作了,因此 clustering 通常並不需要使用

訓練數據進行學習,這在 Machine Learning 中被稱作 unsupervised learning (無監督學習)。

舉一個簡單的例子:現在有一羣小學生,你要把他們分成幾組,讓組內的成員之間儘量相似一些,而組之間則差別大一些。最後分出怎樣的結果,就取決於你對於“相似”的定義了(因此,在分類前,一定要知道,每一類的特徵到底是什麼),比如,你決定男生和男生是相似的,女生和女生也是相似的,而男生和女生之間則差別很大”,這樣,你實際上是用一個可能取兩個值“男”和“女”的離散變量來代表了原來的一個小學生,我們通常把這樣的變量叫做“特徵”。實際上,在這種情況下,所有的小學生都被映射到了兩個點的其中一個上,已經很自然地形成了兩個組,不需要專門再做聚類了。另一種可能是使用“身高”這個特徵。我在讀小學候,每週五在操場開會訓話的時候會按照大家住的地方的地域和距離遠近來列隊,這樣結束之後就可以結隊回家了。除了讓事物映射到一個單獨的特徵之外,一種常見的做法是同時提取 N 種特徵,將它們放在一起組成一個 N 維向量(特徵向量),從而得到一個從原始數據集合到 N 維向量空間的映射——你總是需要顯式地或者隱式地完成這樣一個過程,因爲許多機器學習的算法都需要工作在一個向量空間中。


聚類分析

聚類分析指將物理或抽象對象的集合分組成爲由類似的對象組成的多個類的分析過程。聚類分析的目標就是在相似的基礎上收集數據來分類。在不同的應用領域,很多聚類技術都得到了發展,這些技術方法被用作描述數據,衡量不同數據源間的相似性,以及把數據源分類到不同的簇中。

Cluster analysis or clustering is the task of assigning a set of objects into groups (called clusters) so that the objects in the same cluster are more similar (in some sense or another) to each other than to those in other clusters.[1]

Cluster analysis itself is not one specific algorithm, but the general task to be solved. It can be achieved by various algorithms that differ significantly in their notion of what constitutes a cluster and how to efficiently find them. Popular notions of clusters include groups with low distances among the cluster members, dense areas of the data space, intervals or particular statistical distributions. Clustering can therefore be formulated as a multi-objective optimization problem. The appropriate clustering algorithm and parameter settings (including values such as the distance function to use, a density threshold or the number of expected clusters) depend on the individual data set and intended use of the results. Cluster analysis as such is not an automatic task, but an iterative process of knowledge discovery or interactive multi-objective optimization that involves trial and failure. It will often be necessary to modify preprocessing and parameters until the result achieves the desired properties.

那麼讓我們再回到 clustering 的問題上,暫且拋開原始數據是什麼形式,假設我們已經將其映射到了一個歐幾里德空間上,爲了方便展示,就使用二維空間吧,如下圖所示:

聚類分析及k均值聚類(K-means)簡介zz

注意:上面的橫縱座標是特徵變量,也即,已經把某一數據投影到特徵向量空間中。

從數據點的大致形狀可以看出它們大致聚爲三個 cluster ,其中兩個緊湊一些,剩下那個鬆散一些。我們的目的是爲這些數據分組,以便能區分出屬於不同的簇的數據,如果按照分組給它們標上不同的顏色,就是這個樣子:

聚類分析及k均值聚類(K-means)簡介zz

那麼計算機要如何來完成這個任務呢?當然,計算機還沒有高級到能夠“通過形狀大致看出來”,不過,對於這樣的 N 維歐氏空間中的點進行聚類,有一個非常簡單的經典算法,也就是本文標題中提到的k-means 。


K-means(K-均值聚類法)

K-均值算法表示以空間中k個點爲中心進行聚類,對最靠近他們的對象歸類。

該算法的最大優勢在於簡潔和快速。劣勢在於對於一些結果並不能夠滿足需要,因爲結果往往需要隨機點的選擇非常巧合。

算法歸納爲(J. MacQueen, 1967):
(1) 初始化:選擇(或人爲指定)某些記錄作爲凝聚點
(2) 循環:
2.1 按就近原則將其餘記錄向凝聚點凝集
2.2 計算出各個初始分類的中心位置(均值)
2.3 用計算出的中心位置重新進行聚類
如此反覆循環,直到凝聚點位置收斂爲止

方法特點
通常要求已知類別數
  節省運算時間
  樣本量大於100時有必要考慮
  只能使用連續性變量


k-means對於需要進行聚類的數據有一個基本假設:對於每一個 cluster ,我們可以選出一箇中心點 (center),使得該 cluster 中的所有的點到該中心點的距離小於到其他 cluster 的中心的距離。雖然實際情況中得到的數據並不能保證總是滿足這樣的約束,但這通常已經是我們所能達到的最好的結果,而那些誤差通常是固有存在的或者問題本身的不可分性造成的。例如下圖所示的兩個高斯分佈,從兩個分佈中隨機地抽取一些數據點出來,混雜到一起,現在要讓你將這些混雜在一起的數據點按照它們被生成的那個分佈分開來:

聚類分析及k均值聚類(K-means)簡介zz

由於這兩個分佈本身有很大一部分重疊在一起了,例如,對於數據點 2.5 來說,它由兩個分佈產生的概率都是相等的,你所做的只能是一個猜測;稍微好一點的情況是 2 ,通常我們會將它歸類爲左邊的那個分佈,因爲概率大一些,然而此時它由右邊的分佈生成的概率仍然是比較大的,我們仍然有不小的機率會猜錯。而整個陰影部分是我們所能達到的最小的猜錯的概率,這來自於問題本身的不可分性,無法避免。因此,我們將 k-means 所依賴的這個假設看作是合理的。

基於這樣一個假設,我們再來導出k-means 所要優化的目標函數:設我們一共有 N 個數據點需要分爲 K 個 cluster ,k-means 要做的就是最小化

聚類分析及k均值聚類(K-means)簡介zz

這個函數,其中聚類分析及k均值聚類(K-means)簡介zz在數據點 n 被歸類到 cluster k 的時候爲 1 ,否則爲 0 。直接尋找聚類分析及k均值聚類(K-means)簡介zz聚類分析及k均值聚類(K-means)簡介zz來最小化聚類分析及k均值聚類(K-means)簡介zz並不容易,不過我們可以採取迭代的辦法:先固定聚類分析及k均值聚類(K-means)簡介zz,選擇最優的聚類分析及k均值聚類(K-means)簡介zz,很容易看出,只要將數據點歸類到離他最近的那個中心就能保證聚類分析及k均值聚類(K-means)簡介zz最小。下一步則固定聚類分析及k均值聚類(K-means)簡介zz,再求最優的聚類分析及k均值聚類(K-means)簡介zz。將聚類分析及k均值聚類(K-means)簡介zz聚類分析及k均值聚類(K-means)簡介zz求導並令導數等於零,很容易得到聚類分析及k均值聚類(K-means)簡介zz最小的時候聚類分析及k均值聚類(K-means)簡介zz應該滿足:

聚類分析及k均值聚類(K-means)簡介zz

=mean(xn),其中xn爲屬於cluster k的點的座標

亦即聚類分析及k均值聚類(K-means)簡介zz的值應當是所有 cluster k 中的數據點的平均值。由於每一次迭代都是取到 聚類分析及k均值聚類(K-means)簡介zz的最小值,因此 聚類分析及k均值聚類(K-means)簡介zz只會不斷地減小(或者不變),而不會增加,這保證了 k-means 最終會到達一個極小值。雖然 k-means 並不能保證總是能得到全局最優解,但是對於這樣的問題,像 k-means 這種複雜度的算法,這樣的結果已經是很不錯的了。

下面我們來總結一下 k-means 算法的具體步驟:

  1. 選定 K 箇中心聚類分析及k均值聚類(K-means)簡介zz的初值。這個過程通常是針對具體的問題有一些啓發式的選取方法,或者大多數情況下采用隨機選取的辦法。因爲前面說過k-means 並不能保證全局最優,而是否能收斂到全局最優解其實和初值的選取有很大的關係,所以有時候我們會多次選取初值跑 k-means ,並取其中最好的一次結果。

  2. 將每個數據點歸類到離它最近的那個中心點所代表的 cluster 中。

  3. 用公式聚類分析及k均值聚類(K-means)簡介zz 計算出每個 cluster 的新的中心點。

  4. 重複第二步,一直到迭代了最大的步數或者前後的聚類分析及k均值聚類(K-means)簡介zz的值相差小於一個閾值爲止。

不過正如前面所說的那樣 k-means 也並不是萬能的,雖然許多時候都能收斂到一個比較好的結果,但是也有運氣不好的時候會收斂到一個讓人不滿意的局部最優解


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章