標籤:一個人 映像 樣本 出現 method 解決辦法 類型 資料集 目的
在我眼裡一切都是那麼簡單,複雜的我也看不懂,最討厭那些複雜的人際關係,唉,像孩子一樣交流不好嗎。
學習K-Means演算法時,會讓我想起三國志這個遊戲,介面是一張中國地圖,諸侯分立,各自為據。但是遊戲開始,玩家會是一個人一座城池(我比較喜歡這樣,就有挑戰性),然後不斷的征戰各方,佔領城池
不斷的擴大地盤,正常來說,征戰的城池是距離自己較為近的,然後選擇這些城池的中心位置作為主城。所以過來一段時間後,地圖上就會出現幾個主要的勢力範圍,三足鼎立正是如此。這個過程和K-Means演算法十分相似。
接下來我們以為遊戲地圖為例來講解K-Means演算法,地圖中的每一個城池為一個資料範例(包含城池的座標),假如遊戲開始設定三個遊戲玩家(三個聚類中心K),遊戲目的希望最後三個玩家各自為據形成右圖的格局。開始遊戲!
K-Means(k均值演算法):
一開始先要介紹演算法的整體流程
(1)隨機初始化聚類中心的位置
(2)計算每一個點到聚類中心的距離,選取最小值分配給k(i)
(3)移動聚類中心(其實就是對所屬它的樣本點求平均值,就是它移動是位置)
(4)重複(2),(3)直到損失函數(也就是所有樣本點到其所歸屬的樣本中心的距離的和最小)
最後整體分類格局會變得穩定。
最佳化目標,也就是之前我們經常提到的損失函數
在不斷的迴圈過程中,聚類中心也在不斷地更新,直到上式距離總和收斂精確值的時候,獲得最優解。
(1) 隨機初始化
為了遊戲的公平性,使用隨機的方式把三個遊戲玩家分配到地圖上三個城池中(這裡需要注意聚類中心的個數一定要小於資料樣本的個數)。隨機初始化會遇見下面幾種情況
1 好的情況
這種情況最為好,因為三個聚類中心已經很好的散布在三個主要的樣本類上,再執行下面的演算法就可以形成我們想要的分類。
2
這種情況就不太好,紅點和綠點一開始就分配在以起,所以一開就會產生對立,對於不好的初始化可能會產生以下聚類結果
這種情況就是就很糟糕了,不符合要求。
對於這種情況我們沒有很好的解決辦法,可以嘗試多次初始化,擷取最好的結果,例如設定1000次隨機初始化,選取損失函數值最小的一個。
還有一種情況,對於有些資料集天生分布不明顯的資料集,怎麼才能正確的選擇聚類中心的個數,例如:
使用(elbow method)“胳膊肘演算法”:
擷取損失函數和聚類中心K的函數映像,大致有兩種映像類型
左圖的拐點明顯,而右圖的拐點不是很明顯,對於左圖我們可以選取拐點處的k作為聚類中心的個數,而如果是右圖,那麼就需要根據情況選取,比如說,如果資料集是衣服的尺碼的資料,如果你想確定這些衣服的尺碼類型,那麼根據你想要分成幾種尺碼類型決定(例如:L,M,S)(還有,M,L,XL,XXL,S)
我眼裡K-Means演算法