一、K-Means算法原理
二、Hadoop實現K-Means的做法
1、偽代碼
(1)主要參數
輸入: 參數0--存儲樣本數據的文本文件inputfile;
參數1--存儲樣本數據的SequenceFile文件inputPath;
參數2--存儲質心數據的SequenceFile文件centerPath;
參數3--存儲聚類結果文件(SequenceFile文件)所處的路徑clusterPath;
參數4--類的數量k;
輸出:K個類的划分結果
(2)計算流程
Begin:
讀取inputPath,可采用蓄水池采樣法從中選取前k個點作為初始質心,將質心數據寫入centerPath;
While 聚類終止條件不滿足:
在Mapper階段,讀取inputPath,對於所有數據,遍歷所有的質心,並選擇最近的質心,將該質心的編號作為鍵傳遞給Reducer;
在Reducer階段,將Mapper階段傳遞過來的值根據鍵歸並輸出,結果寫入clusterPath;
讀取clusterPath,重新計算質心,對比reduce求出的平均值與原來或者上一次的質心,若不相同,這將清空原中心的數據文件將結果寫入centerPath;若相同,則刪掉reduce的輸出目錄,運行一個沒有reduce的任務將中心ID與值對應輸出。
EndWhile
End
注意:需預先確定判斷判斷聚類效果好壞的指標,即確定聚類停止的條件。
ps:空閑時間自己動手嘗試用hadoop實際實現K-Means。
參考資料:
https://blog.csdn.net/LJBlog2014/article/details/41553955