無監督學習-- 聚類(Clustering)


無監督學習(unsupervised learning)介紹

聚類(Clustering)

​ 回顧之前的有監督學習,根據給出的數據集(已經做出標記labels)\({(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})}\),學習出假設函數,對數據集進行決策分界。

![1.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhh5c53wfpj209k07lt8r.jpg)
​ 相反無監督學習中並未給出具體的標記$y^{(m)}$,僅有數據集${x^{(1)},x^{(2)},...,x^{(m)}}$,算法對同一類的進行划分。
![2.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhh5c5fyb4j209507h0sq.jpg)
​ 對於聚類在實際的應用中亦是非常廣泛的,如:市場細分(Market segmentation)、社交圈分析(social network analysis)、集群計算(organize computing clusters)、天體數據分析(astronomical data analysis)
![3.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhh5c7vsf1j20j10bi460.jpg)
​ 在聚類分析中,我們希望能有一種算法能夠自動的將相同元素分為緊密關系的子集或簇,K均值算法(K-mean)為最廣泛的一種算法。

K-mean

​ 初始數據集如下圖所示,數據集未做任何標記labels,

![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhh5c8wh5sj20bj08ldfq.jpg)
​ 要求將其分為兩簇,K均值算法的操作原理為:
![5.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhh5c9g9n7j20c808lwei.jpg)
​ 隨機挑選兩個點作為聚類中心(cluster centroids),K-均值算法是一個迭代過程,分為兩部分,第一為簇分類,第二為移動聚類中心。

​ 所謂的的簇分類是將圖中所有的綠色樣本點根據其距離藍色、紅色中心點距離,分配到簇中。如下圖:

![6.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhh5c9qqjvj20bo08tjrc.jpg)
​ 接下來將染色的點計算它們的平均值(平均下來的位置)此時將相應的聚類中心移動到這個均值處。
![7.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhh5ca4t9mj20bd08s0sq.jpg)

8.jpg

9.jpg

10.jpg

​ 繼續迭代,有:
![11.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhh5cbfagcj20bg08o0ss.jpg)

12.jpg

此時繼續迭代,聚類中心將不會再做改變。

​ K-均值算法,輸入有兩個部分:K(聚類的個數):number of clusters,訓練集\({x^{(1)},x^{(2)},...,x^{(m)}}\)

​ 隨機初始化K個聚類中心\(\mu_1,\mu_2,...,\mu_K \in \mathbb{R}^n\),重復一下迭代:

{ for i=1:m

​ c^(i)=從1到K的所有聚類中心索引(index)中最接近於x^(i)的索引,即---\(c^{(i)}=min_k||x^{(i)}-\mu_k||^2\)

​ for k=1:K

\(\mu_k\)=對於接近於聚類k點處平均值,實例如下圖所示:

}

![13.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhh5ccg859j20jj03ut90.jpg)
​ 可能存在一種情況,即某一聚類中心的最近點數位零,此時可以刪除即變為K-1個簇。此外k-均值對於不易分離的聚類有很好的效果,如下圖,對於不同身高、體重的人群襯衫的尺寸是相差很多的,若你是一家服裝設計公司,利用k均值進行聚類分析,形成3個簇,即三種類,可以為尺寸設計方便很多,這也是市場細分--Market segmentation的一個隔離。
![14.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhh5ccvpj5j20br0a2jrx.jpg)![15.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhh5cd8sk8j20aa08e3yt.jpg)

目標優化--Optimization Objective

​ 在大多數我們已經學到的監督學習算法中類似於線性回歸邏輯回歸以及更多的算法,所有的這些算法都有一個優化目標函數或者某個代價函數需要通過算法進行最小化 處理。事實上 K均值也有 一個優化目標函數或者需要最小化的代價函數。

​ 首先了解什么是 K均值的優化目標函數將能幫助我們調試學習算法,以確保K均值算法是在正確運行中,第二個也是最重要的一個目的是在之后的視頻中我們將討論將怎樣運用這個來幫助K均值找到更好的簇並且避免局部最優解。

​ 定義:\(c^{(i)}\)\(x^{(i)}\)所對對應的索引值,\(\mu_k\)為聚類中心k,\(\mu_{c^{(i)}}\)為樣本\(x^{(i)}\)所屬聚類簇。

​ 現在寫出 K均值聚類算法的優化目標:1.jpg

​ J 參數是\(c^{(1)}\)\(c^{(m)}\) 以及 \(\mu_1\)\(\mu_k\), 隨着算法的執行過程,這些參數將不斷變化,右邊給出了優化目標也就是所有的1/m乘以i = 1到 m個項的求和,也即每個樣本\(x^{(i)}\)\(x^{(i)}\)所屬的聚類簇的中心距離的平方值 。

​ 那么K均值算法要做的事情就是它將找到參數 \(c^{(i)}\)\(\mu_i\),也就是說找到能夠最小化代價函數 J 的 c 和 μ。這個代價函數在K均值算法中有時候也叫做失真代價函數(distortion cost function) 。

​ 再解釋詳細點,這個算法的第一步就是聚類中心的分配,在這一步中我們要把每一個點划分給各自所屬的聚類中心,這個聚類簇的划分步驟實際上就是在 對代價函數 J 進行最小化,是關於參數 \(c^{(1)}\)\(c^{(2)}\)等一直到\(c^{(m)}\)同時保持最近的聚類中心\(\mu_1\)\(\mu_k\)固定不變 。第一步要做的其實不是改變聚類中心的位置而是選擇 \(c^{(1)}\)\(c^{(2)}\)等一直到\(c^{(m)}\)來最小化這個代價函數或者說失真函數 J 這個過程就是把這些點 划分到離它們最近的那個聚類中心,因為這樣才會使得點到對應聚類中心的距離最短)。

![2.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhia6dxfisj20kt06x0tp.jpg)
​ K-均值算法的第二步任務是**聚類中心的的移動**,實際上是選擇了能夠最小化J的μ的值,也就是說最小化代價函數J。因此是最小化 J關於所有聚類中心的位置$\mu_1$到$\mu_k$。

​ 因此 K均值算法 實際上是把這兩組變量在這兩部分中分割開來最小化 J 。首先是c作為變量然后是μ作為變量,首先關於c求 J的最小值然后關於μ 求 J 的最小值,反復循環 。

隨機初始化--Random Initialization

​ 如何初始化K均值聚類的方法將引導我們討論如何避開局部最優來構建K均值,我們之前沒有討論太多如何初始化聚類中心,有幾種不同的方法可以用來隨機初始化聚類中心,但是事實證明有一種效果最好的一種方法。

1.當運行K-均值方法時,需要有一個聚類中心數量K,K值要比訓練樣本的數量m小

2.通常初始化K均值聚類的方法是隨機挑選K個訓練樣本

3.設定μ1到μk讓它們等於這個K個樣本

​ 具體地,假設K等於2,如下圖的例子,我們想找到兩個聚類,為了初始化聚類中,首先要做的是隨機挑選幾個樣本,比如挑選了藍色和紅色X標明的樣本點,並作為初始化聚類中心。這就是一個隨機初始化K均值聚類的方法。

![3.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhia6e9toij208u057745.jpg)
​ 但是有時候,有可能不會那么幸運,也許會挑選到如下兩個初始化樣本,實際上用了一種不同的初始化方法來初始化聚類中心而這張幻燈片中描述的方法是真正被推薦的方法,這種方法在你實現K均值聚類的時候可能會用到。根據推薦也許通過這右邊的兩個圖你可能會猜到K均值方法最終可能會得到不同的結果取決於聚類簇的初始化方法因此也就取決於隨機的初始化。K均值方法最后可能得到不同的結果尤其是如果K均值方法落在局部最優的時候。
![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhia6emtnkj208e05cmx0.jpg)
​ 如下圖所給的一些數據,看起來好像有3個聚類,那么如果你運行K均值方法如果它最后得到一個局部最優這可能是真正的全局最優,可能會得到這樣的聚類結果:
![5.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhia6f7fu4j20h406t75o.jpg)
​ 但是如果你運氣特別不好,隨機初始化K均值方法也可能會卡在不同的局部最優上面,在下圖這個例子中,看上去藍色的聚類捕捉到了左邊的很多點,而在綠色的聚類中每一個聚類都捕捉到了相對較少的點,這與不好的局部最優相對應。因為它基本上是基於這兩個聚類的並且它們進一步合並成了1個聚類,而把第二個聚類分割成了兩個像這樣的小的聚類,它也把第二個聚類分割成了兩個分別的小聚類簇。
![7.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhia6fm0xyj20fg05hwf5.jpg)
​ 這些局部最優所對應的是真正的K均值方法,且通過最小化這個失真函數J並不能得到很好的結果,因此,如果擔心K均值方法會遇到局部最優的問題,且想提高K均值方法找到最有可能的聚類的幾率的話,我們能做的是嘗試多次隨機的初始化而不是僅僅初始化一次,如果我們能初始化K均值很多次並運行K均值方法很多次,通過多次嘗試以保證我們最終能得到一個足夠好的結果一個盡可能局部或全局最優的結果。

​ 具體地,假如決定運行K均值方法一百次,即我們需要執行這個循環100次(100--這是一個相當典型的次數,有時會是從50到1000之間),這意味對於這些100次隨機初始化的每一次,我們需要運行K均值方法,得到一系列聚類結果和一系列聚類中心。之后我們可以計算失真函數J用我們得到這些聚類結果和聚類中心來計算這樣一個結果函數,最后完成整個過程100次之后,在所有這100種用於聚類的方法中選取能夠給我們代價最小的一個。

for i=1:100
	%隨機初始化K-均值
	%運行K-均值,獲得c(1),...,c(m),μ_1,...,μ_K
	%計算代價函數J(c(1),...,c(m),μ_1,...,μ_K)
end

​ 如果聚類數是從2到10之間的任何數的話,做多次的隨機初始化通常能夠保證你能有一個較好的局部最優解,但是如果K非常大的話,如果K比10大很多,有多個隨機初始化就不太可能會有太大的影響,更有可能你的第一次隨機初始化就會給你相當好的結果,做多次隨機初始化可能會給你稍微好一點的結果但是不會好太多。

選擇適當的聚類數--the number of Clusters

​ 本節將討論一下K-均值聚類數目的選擇或者說是如何去選擇參數大寫K的值,實際上並沒有一個非常標准的解答或者能自動解決它的方法。目前用來決定聚類數目的最常用的方法仍然是通過人為察看可視化的圖或者聚類算法的輸出結果來手動地決定聚類的數目。

​ 選擇聚類的數目不總是那么容易大部分原因是數據集中有多少個聚類通常是模棱兩可的,看到下圖這樣的一個數據集,有些人可能會看到四個聚類那么這就意味着需要使用K=4,有些人可能會看到兩個聚類這就意味着K=2,其他人也會看到3個聚類等。

![8.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhia6fwqqaj20el0alt8x.jpg)
​ 無監督學習的一部分沒有給我們標簽所以不會總有一個清晰的答案這是為什么做一個能夠自動選擇聚類數目的算法是非常困難的原因之一。

​ 其實選擇聚類數目的方法時可能會提及一個叫做肘部法則(Elbow Method)的方法。

![9.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhia6gas0rj20ah07h74h.jpg)
​ 分別計算K值為1,2,....時的代價函數或者說計算畸變J,plot之后,我們就能得到一條曲線它展示了隨着聚類數量的增多畸變值是如何下降的,這條曲看起來有一個很清楚的肘點,類比於人的手臂。K從1變化到2再從2到3時畸變值迅速下降,然后在3的時候到達一個肘點此后畸變值就下降得非常慢。我們選肘點:K等於3。

​ 實際上,當你應用肘部法則的時候如果你得到了一個像上圖形狀非常好,而事實證明肘部法則並不那么常用其中一個原因是,如果你把這種方法用到一個聚類問題上事實上你最后得到的曲線通常看起來是更加模棱兩可的(沒有一個清晰的肘點),而畸變值像是連續下降的。也許3是一個好選擇也許4是一個好選擇也許5也不差,因此肘部法則它是一個值得嘗試的方法,但是並不能夠適應全部條件。

![10.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhia6gnfshj209r07edfw.jpg)
​ 還有一種方法來考慮如何選擇K的值,通常人們使用K-均值聚類算法是為了某些后面的用途或者說某種下游的目的(later/downstream purpose),而要求得一些聚類。也許你會用K-均值聚類算法來做市場分割如我們之前談論的T恤尺寸的例子,如果那個后續下游的目的比如市場分割能給你一個評估標准那么通常來說決定聚類數量的更好的辦法是看不同的聚類數量能為后續下游的目的提供多好的結果。即具體問題具體分析。
![11.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhia6h4ylyj20hx0730tc.jpg)
​ 上圖就是后續下游目的一個例子,比如這個問題里的決定生產什么樣的T恤(你可生產3種尺寸的T恤亦可以生產五種尺寸的等) ,給我們一個選擇聚類數量的評價標准。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM