k-means是乙個非常經典的非監督學習聚類演算法,因為資料集不帶有標籤,我們只去**資料所表現出的某種結構。
k-means演算法非常簡單,用下面一張圖就可以表示了。
具體步驟:
1.人為選取k值(即要聚類的個數)。
2.隨機選取k個資料點作為k個初始中心(centroid),並標記為1到k。
3.對每個資料點(m個)分別計算到k個centroid的距離,然後選取距離最近的centroid作為該點的從屬物件,然後標記該點為對應centroid的標記(如點a從屬於centroid1,那麼該點就標記為1)。步驟3過後,所有的資料點都會從屬於某個centroid。
4.分別對每個centroid的所有下屬資料點進行平均值計算,得出新的k個centroid。
5.反覆步驟3和4,直到收斂,centroid不再變化。
對於每個問題,我們都要考慮我們在優化的函式(即目標函式)是什麼,當然聚類問題也不例外,對於k-means來說,明確目標函式有助於我們debug和之後更好得進行分簇。目標函式具體形式在上圖,就不詳細闡述了,很簡單,分別對所有的資料點計算到其centroid距離的平方的和。
如下圖所示,k-means並不是乙個凸優化問題,它可能存在很多區域性最優解,這跟我們初始選取的centroid有關。那我們應該如何解決呢?
解決方法就是對於同乙個問題,進行多次(50-1000次)k-means計算,由於每次隨機初始化的centroid不一樣,以至最後的結果都會有所不同,最後我們根據對應目標函式的大小選取結果最小的作為我們的最優解。一般來說,這個結果可能是全域性最優,就算不是全域性最優也一定非常接近全域性最優,所以可以當做我們最後的結果。需要注意的是,如果k值過大,那麼一般我們第一次k-means操作就會得到最優解或者接近最優解的解,這樣多次k-means就沒有太大的意義,如果k值小(2-10),那麼多次k-means就會有明顯的效果。
最後我們講一下如果進行k值選取。
對於k值,我們做出k−j
(θ)k-j(\theta)
k−j(θ)
圖,如果像上圖左一樣,出現類似於elbow的拐點,那麼我們就選定該點的k為我們所要選取的k,如果如上圖右,那麼這個時候elbow method將不再適用,這種時候將沒有合適的方法指導我們進行自動選取k值,我們必須結合我們的需求人工給定k值。
最後mark一下,通過canopy演算法可以自動選取較為恰當的簇數,具體不在這裡詳述。
機器學習 kmeans
1 手寫kemeans 流程 手寫 f 桌面 rna seq1 leetcode 10 面試真題 6 位元組跳動 手寫kmeans.py 2 k 如何確定 t sne視覺化和手肘法,k值所決定的是在該聚類演算法中,所要分配聚類的簇的多少,kmeans 演算法對初始值敏感,相同的k,選的點不同,會影響...
機器學習 K means
這個演算法主要是乙個迭代的過程 1.在乙個資料集中隨機選擇k個聚類中心 2.按照離各個聚類中心的遠近來將資料集中的資料劃分到各個分類中。3.將各個分類中資料點的平均座標來作為新的聚類中心 一直重複2 3過程直到各個分類中的資料點的平均座標正好等於聚類中心的座標為止。k means演算法也有可能會出現...
機器學習 K means實踐
這兩天跟著 機器學習實戰 那本書學習了一下聚類方法中的k means演算法。在本篇文章中主要介紹下實踐中遇到的問題以及演算法的主要思想。ok,here we go!k means演算法思想 我們在日常生活中經常會遇到將某些相似的事物進行聚類,而如何讓計算機幫助我們進行自動的分類呢?k means是經...