數據挖掘作業要做聚類,用OpenCV的kmeans函數,出的結果各種隨機。聽別人說kmeans自己寫起來思路很簡單,於是自己寫了個kmeans的jar包,可以隨機或者按順序取初始聚類中心,可以輸出參數信息及各個點的所屬聚類,以及各個聚類的中心坐標。參數結構有點類似OpenCV的kmeans,自己覺得架構得還不錯,貼出來分享了。
1. kmeans.jar下載及使用
2. kmeans算法簡介
3. 源碼簡介
一、kmeans.jar下載及使用
下載地址:https://sourceforge.net/projects/yuanboshekmeans/files/
kmeans.jar為應用包,kmeans_src.jar為對應的源碼包,kmeans_full.jar兩者都包含。
新建java工程,引入kmeans.jar包(不會引包的參考),添加帶有main函數的class,然后在main函數內加入測試代碼
1 import kmeans.*; 2 3 public class jmain { 4 public static void main(String[] args) { 5 double[][] points = {{0, 0}, {4, 10}, {1, 1}, {5, 8}}; //測試數據,四個二維的點 6 kmeans_data data = new kmeans_data(points, 4, 2); //初始化數據結構 7 kmeans_param param = new kmeans_param(); //初始化參數結構 8 param.initCenterMehtod = kmeans_param.CENTER_RANDOM; //設置聚類中心點的初始化模式為隨機模式 9 10 //做kmeans計算,分兩類 11 kmeans.doKmeans(2, data, param); 12 13 //查看每個點的所屬聚類標號 14 System.out.print("The labels of points is: "); 15 for (int lable : data.labels) { 16 System.out.print(lable + " "); 17 } 18 } 19 }
運行結果為:
k=2 attempts=2 criteriaBreakCondition=0.0 The number of each classes are: 2 2 The labels of points is: 0 1 0 1
表示分兩類,進行了兩次迭代,兩個聚類內各包含2個點,最后一行表示第一個和第3個點為0號聚類,第二和第四個點為1號聚類。
想獲取更多信息和使用方法請查看源碼部分。
二、kmeans算法
(待續)
三、源碼簡介
(待續)
