這兩天跟著《機器學習實戰》那本書學習了一下聚類方法中的k-means演算法。在本篇文章中主要介紹下實踐中遇到的問題以及演算法的主要思想。ok,here we go!
k-means演算法思想:
我們在日常生活中經常會遇到將某些相似的事物進行聚類,而如何讓計算機幫助我們進行自動的分類呢?k-means是經常用到的方法,如下圖
是k-means的實現的示意圖
演算法流程:
1.隨機選取k個樣本(k的取值是要聚成幾類的數目)作為初始質心
2.重複下面過程直到收斂
1.根據相似度計算公式,計算每個樣本和質心的相似度,根據相似度進行樣本類別的判定
2.更新每一簇的質心,作為新的質心
收斂的條件為樣本的類別不再發生改變。其中相似度的計算一般有歐式距離,球面距離等,根據具體的應用選擇不同的相似度計算公式。更新質心,一般是將簇的平均值作為新的質心。具體的**實現大家可以參考《機器學習實戰》
當然,k-means演算法也有不足之處,分類的效果很大程度上依賴於初始質心的選擇。並且容易陷入區域性最小值。
因此,有了後處理k-means演算法的提出,主要有二分k-means演算法
主要思想:
1.設定聚類的數目k。首先將整個樣本作為乙個簇考慮,選取簇的平均值作為初始質心
2.當簇數目小於k時
對於每乙個簇
計算總誤差
在給定的簇上進行k-means均值聚類(k=2)
計算將簇一分為二之後的總誤差
選擇時的誤差最小的那個簇進行劃分操作
而這種演算法會在一定程度上消除隨機選擇質心的影響,但是不能完全消除,因為在給定的簇簇上進行k-means均值聚類時,仍然需要隨機選擇兩個質心。
這部分的**在《機器學習實戰》
這本書後面有個對於根據經緯度進行聚類的例子。書上是用的yahoo! placefinder api進行將位址轉換為經緯度,我用的是google 的geocoding api
api的申請非常簡單,只要有谷歌賬號就可以。選擇create server api 即可。
此鏈結中有具體的說明如何獲取api返回的值,可以設定返回的型別為json或者xml。
這裡我用的json,主要包括兩塊「status」和「results」
其中status表示查詢的狀態,「ok」表示查詢成功。
results中儲存結果。
獲取到位置的經緯之後,就可以進行聚類了,下圖為聚類的結果
機器學習 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是乙個非常經典的非監督學習聚類演算法,因為資料集不帶有標籤,我們只去 資料所表現出的某種結構。k means演算法非常簡單,用下面一張圖就可以表示了。具體步驟 1.人為選取k值 即要聚類的個數 2.隨機選取k個資料點作為k個初始中心 centroid 並標記為1到k。3.對每個資料點 ...