Standford機器學習 聚類算法(clustering)和非監督學習(unsupervised Learning)

聚類算法是一類非監督學習算法,在有監督學習中,學習的目標是要在兩類樣本中找出他們的分界,訓練數據是給定標籤的,要麼屬於正類要麼屬於負類。而非監督學習,它的目的是在一個沒有標籤的數據集中找出這個數據集的結構把它自動聚成兩類或者多類。
  本講主要介紹了最常用了一種聚類算法--K-means聚類算法。如果將數據集分成兩類,即k=2,K-means算法過程如下:
1、首先任意選取兩個不同的樣本作爲兩類樣本的中心

2、K-means算法有兩部,第一步cluster assignment step,遍歷所有樣本點,計算出每個樣本點離兩個中心的距離(這個距離不一定是歐幾里得距離,根據不同需要選取)來判斷樣本點屬於哪一個類別(比如某個樣本點離紅色的中心比離藍色的中心近,那麼就將這個樣本點歸類到紅色這類中,反之亦然),每個樣本歸類之後就得到如下:


3、K-means的第二部是move centroid step,這一步是根據前一步的分類結果,計算出他們的新的類的中心(計算方法可以是對所有樣本的每一維取平均,得到每類的中心),計算出新的中心結果如下:



4、然後根據新計算出來的兩個中心將每個樣本點再歸類,不斷迭代以上兩步,直到所有樣本點不再改變(即收斂)



K-Means正式定義如下,輸入要求有一個整數k和m個樣本點,然後按照上面講到的過程一步一步迭代,直到收斂:



Andrew還講到了一個例子,給不可分的數據集分類,就是一個T-shirt分類的例子,如下圖:


比如現在有這樣一系列身高和體重的數據,在生產T-shirt的時候會將T-shirt分成L,M和S三個號,利用K-Means就可以將這三類分出來,這裏取k=3。


看了上面,你對K-Means應該有一個直觀的概念了,接下去來講一下關於K-Means的理論,在前面的監督學習中,首先都是建立一個假設,然後用已有的帶有標籤的數據集來最小化這個cost function,那麼,在K-Means中,估值函數可以幫助我們debug,如果估值函數沒有預想中的不斷減小最後收斂到一個極值,那麼算法肯定是寫的有問題了。看看我們寫的K-means算法有沒有正常工作,他的估值函數如下:


解決算法陷入局部最優問題的方案當然是選取不同的初始值,多次運行kmeans算法,選取最小的cost function J作爲最終的結果,這樣就能取得一個很好的聚類結果。


一般運行K-means算法時,k(分類數)是人爲指定的,但是人根本不知道樣本數據中真實的類別是多少,比如上面這個例子中,反映在圖上,很明顯可以看出它可以聚類成三類,如果把k指定成兩類或者其他,那麼聚類效果會大打折扣。要區分k最常用的方法是elbow method,它的工作原理如下:



隨着k增大,J會不斷變小,k=m時候,j就變成了0。通常選取的k是拐點最明顯的那個值。如果學習曲線如上圖右邊那個曲線,那就說明數據沒有很好的區分性,因此可以將數據分成你所需要的任意類。



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