K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

1. 聚類算法都是無監督學習嗎?

什么是聚類算法?聚類是一種機器學習技術,它涉及到數據點的分組。給定一組數據點,我們可以使用聚類算法將每個數據點劃分為一個特定的組。理論上,同一組中的數據點應該具有相似的屬性和/或特征,而不同組中的數據點應該具有高度不同的屬性和/或特征。聚類是一種無監督學習的方法,是許多領域中常用的統計數據分析技術。

常用的算法包括K-MEANS、高斯混合模型(Gaussian Mixed Model,GMM)、自組織映射神經網絡(Self-Organizing Map,SOM)

2. k-means(k均值)算法

2.1 算法過程

K-均值是最普及的聚類算法,算法接受一個未標記的數據集,然后將數據聚類成不同的組。

K-均值是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法為:

  • 首先選擇??個隨機的點,稱為聚類中心(cluster centroids);
  • 對于數據集中的每一個數據,按照距離??個中心點的距離,將其與距離最近的中心點關聯起來,與同一個中心點關聯的所有點聚成一類。
  • 計算每一個組的平均值,將該組所關聯的中心點移動到平均值的位置。
  • 重復步驟,直至中心點不再變化。

u^1,u^2,...,u^k 來表示聚類中心,用??(1),??(2),...,??(??)來存儲與第??個實例數據最近的聚類中心的索引,K-均值算法的偽代碼如下:

Repeat {
    for i = 1 to m
    c(i) := index (form 1 to K) of cluster centroid closest to x(i)
    for k = 1 to K
    μk := average (mean) of points assigned to cluster k
}

算法分為兩個步驟,第一個 for 循環是賦值步驟,即:對于每一個樣例??,計算其應該屬于的類。第二個 for 循環是聚類中心的移動,即:對于每一個類??,重新計算該類的質心。

K-均值算法也可以很便利地用于將數據分為許多不同組,即使在沒有非常明顯區分的組群的情況下也可以。下圖所示的數據集包含身高和體重兩項特征構成的,利用 K-均值算法將數據分為三類,用于幫助確定將要生產的 T-恤衫的三種尺寸。

image

2.2 損失函數

K-均值最小化問題,是要最小化所有的數據點與其所關聯的聚類中心點之間的距離之和,因此 K-均值的代價函數(又稱畸變函數 Distortion function)為:

J(c^{(1)},c^{(2)},...,c^{(m)},u_1,...,u_k)=\frac{1}{m}\sum_{i=1}^{m}||X^{(1)}-u_{c^{(i)}}||^2

其中 u_{c^{(i)}} 代表與 x^{(i)} 最近的聚類中心點。 我們的的優化目標便是找出使得代價函數最小的 c^{(1)},c^{(2)},...,c^{(m)}u_1,u_2,...,u_k

2.3 k值的選擇

在運行 K-均值算法的之前,我們首先要隨機初始化所有的聚類中心點,下面介紹怎樣做:

  1. 我們應該選擇?? < ??,即聚類中心點的個數要小于所有訓練集實例的數量。
  2. 隨機選擇??個訓練實例,然后令??個聚類中心分別與這??個訓練實例相等K-均值的一個問題在于,它有可能會停留在一個局部最小值處,而這取決于初始化的情況。

為了解決這個問題,我們通常需要多次運行 K-均值算法,每一次都重新進行隨機初始化,最后再比較多次運行 K-均值的結果,選擇代價函數最小的結果。這種方法在??較小的時候(2--10)還是可行的,但是如果??較大,這么做也可能不會有明顯地改善。

沒有所謂最好的選擇聚類數的方法,通常是需要根據不同的問題,人工進行選擇的。選擇的時候思考我們運用 K-均值算法聚類的動機是什么。有一個可能會談及的方法叫作“肘部法則”。關 于“肘部法則”,我們所需要做的是改變??值,也就是聚類類別數目的總數。我們用一個聚類來運行 K 均值聚類方法。這就意味著,所有的數據都會分到一個聚類里,然后計算成本函數或者計算畸變函數??。??代表聚類數字。

image

我們可能會得到一條類似于這樣的曲線。像一個人的肘部。這就是“肘部法則”所做的,讓我們來看這樣一個圖,看起來就好像有一個很清楚的肘在那兒。你會發現這種模式,它的畸變值會迅速下降,從 1 到 2,從 2 到 3 之后,你會在 3 的時候達到一個肘點。在此之后,畸變值就下降的非常慢,看起來就像使用 3 個聚類來進行聚類是正確的,這是因為那個點是曲線的肘點,畸變值下降得很快,?? = 3之后就下降得很慢,那么我們就選?? = 3。當你應用“肘部法則”的時候,如果你得到了一個像上面這樣的圖,那么這將是一種用來選擇聚類個數的合理方法。

2.4 KNN與K-means區別?

K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。

KNN K-Means
1.KNN是分類算法
2.屬于監督學習
3.訓練數據集是帶label的數據
1.K-Means是聚類算法
2.屬于非監督學習
3.訓練數據集是無label的數據,是雜亂無章的,經過聚類后變得有序,先無序,后有序。
沒有明顯的前期訓練過程,屬于memory based learning 有明顯的前期訓練過程
K的含義:一個樣本x,對它進行分類,就從訓練數據集中,在x附近找離它最近的K個數據點,這K個數據點,類別c占的個數最多,就把x的label設為c。 K的含義:K是人工固定好的數字,假設數據集合可以分為K個蔟,那么就利用訓練數據來訓練出這K個分類。

相似點

都包含這樣的過程,給定一個點,在數據集中找離它最近的點。即二者都用到了NN(Nears Neighbor)算法思想。

2.5 K-Means優缺點及改進

k-means:在大數據的條件下,會耗費大量的時間和內存。 優化k-means的建議:

  1. 減少聚類的數目K。因為,每個樣本都要跟類中心計算距離。

  2. 減少樣本的特征維度。比如說,通過PCA等進行降維。

  3. 考察其他的聚類算法,通過選取toy數據,去測試不同聚類算法的性能。

  4. hadoop集群,K-means算法是很容易進行并行計算的。

  5. 算法可能找到局部最優的聚類,而不是全局最優的聚類。使用改進的二分k-means算法。

    二分k-means算法:首先將整個數據集看成一個簇,然后進行一次k-means(k=2)算法將該簇一分為二,并計算每個簇的誤差平方和,選擇平方和最大的簇迭代上述過程再次一分為二,直至簇數達到用戶指定的k為止,此時可以達到的全局最優。

3. 高斯混合模型(GMM)

3.1 GMM的思想

高斯混合模型(Gaussian Mixed Model,GMM)也是一種常見的聚類算法,與K均值算法類似,同樣使用了EM算法進行迭代計算。高斯混合模型假設每個簇的數據都是符合高斯分布(又叫正態分布)的,當前數據呈現的分布就是各個簇的高斯分布疊加在一起的結果。

第一張圖是一個數據分布的樣例,如果只用一個高斯分布來擬合圖中的數據,圖 中所示的橢圓即為高斯分布的二倍標準差所對應的橢圓。直觀來說,圖中的數據 明顯分為兩簇,因此只用一個高斯分布來擬和是不太合理的,需要推廣到用多個 高斯分布的疊加來對數據進行擬合。第二張圖是用兩個高斯分布的疊加來擬合得到的結果。這就引出了高斯混合模型,即用多個高斯分布函數的線形組合來對數據分布進行擬合。理論上,高斯混合模型可以擬合出任意類型的分布。

image
image

高斯混合模型的核心思想是,假設數據可以看作從多個高斯分布中生成出來 的。在該假設下,每個單獨的分模型都是標準高斯模型,其均值 u_i 和方差 \sum_i 是待估計的參數。此外,每個分模型都還有一個參數 \pi_i,可以理解為權重或生成數據的概 率。高斯混合模型的公式為:

p(x)=\sum_{i=1}^{k}\pi_iN(x|u_i,\sum_i)

通常我們并不能直接得到高斯混合模型的參數,而是觀察到了一系列 數據點,給出一個類別的數量K后,希望求得最佳的K個高斯分模型。因此,高斯 混合模型的計算,便成了最佳的均值μ,方差Σ、權重π的尋找,這類問題通常通過 最大似然估計來求解。遺憾的是,此問題中直接使用最大似然估計,得到的是一 個復雜的非凸函數,目標函數是和的對數,難以展開和對其求偏導。

**在這種情況下,可以用EM算法。 **EM算法是在最大化目標函數時,先固定一個變量使整體函數變為凸優化函數,求導得到最值,然后利用最優參數更新被固定的變量,進入下一個循環。具體到高 斯混合模型的求解,EM算法的迭代過程如下。

首先,初始隨機選擇各參數的值。然后,重復下述兩步,直到收斂。

  • E步驟。根據當前的參數,計算每個點由某個分模型生成的概率。
  • M步驟。使用E步驟估計出的概率,來改進每個分模型的均值,方差和權重。

高斯混合模型是一個生成式模型。可以這樣理解數據的生成過程,假設一個最簡單的情況,即只有兩個一維標準高斯分布的分模型N(0,1)和N(5,1),其權重分別為0.7和0.3。那么,在生成第一個數據點時,先按照權重的比例,隨機選擇一個分布,比如選擇第一個高斯分布,接著從N(0,1)中生成一個點,如?0.5,便是第一個數據點。在生成第二個數據點時,隨機選擇到第二個高斯分布N(5,1),生成了第二個點4.7。如此循環執行,便生成出了所有的數據點。

也就是說,我們并不知道最佳的K個高斯分布的各自3個參數,也不知道每個 數據點究竟是哪個高斯分布生成的。所以每次循環時,先固定當前的高斯分布不 變,獲得每個數據點由各個高斯分布生成的概率。然后固定該生成概率不變,根據數據點和生成概率,獲得一個組更佳的高斯分布。循環往復,直到參數的不再變化,或者變化非常小時,便得到了比較合理的一組高斯分布。

3.2 GMM與K-Means相比

高斯混合模型與K均值算法的相同點是:

  • 它們都是可用于聚類的算法;
  • 都需要 指定K值;
  • 都是使用EM算法來求解;
  • 都往往只能收斂于局部最優。

而它相比于K 均值算法的優點是,可以給出一個樣本屬于某類的概率是多少;不僅僅可以用于聚類,還可以用于概率密度的估計;并且可以用于生成新的樣本點。

4. 聚類算法如何評估

由于數據以及需求的多樣性,沒有一種算法能夠適用于所有的數據類型、數 據簇或應用場景,似乎每種情況都可能需要一種不同的評估方法或度量標準。例 如,K均值聚類可以用誤差平方和來評估,但是基于密度的數據簇可能不是球形, 誤差平方和則會失效。在許多情況下,判斷聚類算法結果的好壞強烈依賴于主觀 解釋。盡管如此,聚類算法的評估還是必需的,它是聚類分析中十分重要的部分之一。

聚類評估的任務是估計在數據集上進行聚類的可行性,以及聚類方法產生結 果的質量。這一過程又分為三個子任務。

  1. 估計聚類趨勢。

    這一步驟是檢測數據分布中是否存在非隨機的簇結構。如果數據是基本隨機 的,那么聚類的結果也是毫無意義的。我們可以觀察聚類誤差是否隨聚類類別數 量的增加而單調變化,如果數據是基本隨機的,即不存在非隨機簇結構,那么聚 類誤差隨聚類類別數量增加而變化的幅度應該較不顯著,并且也找不到一個合適 的K對應數據的真實簇數。

  2. 判定數據簇數。

    確定聚類趨勢之后,我們需要找到與真實數據分布最為吻合的簇數,據此判定聚類結果的質量。數據簇數的判定方法有很多,例如手肘法和Gap Statistic方 法。需要說明的是,用于評估的最佳數據簇數可能與程序輸出的簇數是不同的。 例如,有些聚類算法可以自動地確定數據的簇數,但可能與我們通過其他方法確 定的最優數據簇數有所差別。

  3. 測定聚類質量。

    在無監督的情況下,我們可以通過考察簇的分離情況和簇的緊 湊情況來評估聚類的效果。定義評估指標可以展現面試者實際解決和分析問題的 能力。事實上測量指標可以有很多種,以下列出了幾種常用的度量指標,更多的 指標可以閱讀相關文獻。

    輪廓系數、均方根標準偏差、R方(R-Square)、改進的HubertΓ統計。

5. 代碼實現

高斯混合模型代碼

K-Means代碼

機器學習通俗易懂系列文章

3.png

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項目!群號:【541954936】點擊加入

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容