kmeans演算法是一種經典的聚類演算法,其核心思想是:根據給定的聚類個數k,隨機選擇k個點作為初始的中心節點,然後按照樣本中其他節點與這k個節點的距離進行分類。每分類一次就重新計算一次k個中心節點,直到所有樣本中的節點所屬的分類不再變化為止。
**:
public class kmeansalgorithm else
// 為每條資料賦初始類別0
for(int i = 0; i < dataset.size(); i++)
// 隨機從資料集中選注k個點作為初始的k個中心節點
arraylist> centerdata = new arraylist>();
for(int i = 0; i < k; i++)
for(int i = 0; i < t; i++)
}dataset.get(j).set(datadimension, classify);
}// 每次分類後計算中心節點的位置變化情況
double variance = computechange(dataset, centerdata, k, datadimension);
if(variance < threshold)
// 每次分類後重新計算中心節點
centerdata = computecenterdata(dataset, k, datadimension);
} return dataset; }
/***
* @title: computedistance
* @description: 計算任意兩個節點間的距離
* @return double
* @throws
*/public double computedistance(arraylistd1, arraylistd2)
return math.sqrt(squaresum); }
/***
* @title: computecenterdata
* @description: 計算中心節點
* @return arraylist* @throws
*/public arraylist> computecenterdata(arraylist> dataset, int k, int datadimension)
for(int j = 0; j < dataset.size(); j++) }}
for(int l = 0; l < datadimension; l++)
res.add(tmp);
} return res;
} /**
* * @title: computechange
* @description: 計算兩輪迭代中心節點位置的變化量
* @return double
* @throws
*/public double computechange(arraylist> dataset, arraylist> centerdata, int k, int datadimension)
return variance; }
public static void main(string args)
// 產生簇2
for(int i = 0; i < cluster2_num; i++)
// 產生簇3
for(int i = 0; i < cluster3_num; i++)
kmeansalgorithm d = new kmeansalgorithm();
arraylist> dd = d.getclusters(dataset, 3);
system.out.println(dd); }
}
k means聚類演算法的java實現
聚類分析是一種重要的人類行為,早在孩提時代,乙個人就通過不斷改進下意識中的聚類模式來學會如何區分貓狗 動物植物。目前在許多領域都得到了廣泛的研究和成功的應用,如用於模式識別 資料分析 影象處理 市場研究 客戶分割 web文件分類等 1 聚類就是按照某個特定標準 如距離準則 把乙個資料集分割成不同的類...
Kmeans演算法實現
include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...
K means演算法實現
import math import numpy class point data reader file name str def init self,file name point data reader.file name file name defget data list self,num...