當前位置:生活全書館 >

IT科技

> kmeans java

kmeans java

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java kmeans是什麼,讓我們一起了解一下?

k-means是一種迭代求解的聚類分析演算法,其步驟是,預將資料分為K組,則隨機選取K個物件作為初始的聚類中心,然後計算每個物件與各個種子聚類中心之間的距離,把每個物件分配給距離它最近的聚類中心。

K-means演算法是怎樣的?

1、選取K個點作為初始質心。

2、對每個樣本分別計算到K個質心的相似度或距離,將該樣本劃分到相似度最高或距離最短的質心所在類。

3、對該輪聚類結果,計算每一個類別的質心,新的質心作為下一輪的質心。

4、判斷演算法是否滿足終止條件,滿足終止條件結束,否則繼續第2、3、4步。

java kmeans

java如何實現kmeans?

初始化:

1、先把資料集中的點的座標讀入到一個二維陣列中。

2、並選擇前面的三個點作為初始的中心點。

迭代部分:

1、對每個點分別計算到三個中心點的距離,並根據最小的距離給點分類。

2、對每一類的所有點的橫縱座標計算均值生成新的中心點儲存。

具體程式碼示例如下:

import java.io.*; import org.apache.hadoop.conf.Configuration;public class kmeans1{static double [][] cluster={{1,1},{2,2},{3,3}};static double [][] point =new double[2000][2];static int []kind=new int[2000];static int count=0;static int []Count=new int[3];public static void readfile() throws IOException{BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("/usr/local/hadoop/data.txt"),"GBK"));String str = null;while ((str = in.readLine()) != null) {     //System.out.println(str);        //寫入相關檔案        //out.write(str);        //out.newLine();  double point_x=Double.valueOf(str.split(",")[0]);    double point_y=Double.valueOf(str.split(",")[1]);    point[count][0]=point_x;    point[count][1]=point_y;    if(count<3)    {    cluster[count][0]=point_x;    cluster[count][1]=point_y;    }    count++;    }    //清楚快取    //out.flush();    //關閉流    in.close();    //out.close();}public static void iter(){for(int i=0;i<20;i++){for(int j=0;j<2000;j++){double distance=1000000000.0;for(int k=0;k<3;k++){double temp=Math.pow(point[j][0]-cluster[k][0], 2)+Math.pow(point[j][1]-cluster[k][1], 2);if(temp<distance){distance=temp;kind[j]=k;}}//System.out.println(kind[j]);Count[kind[j]]++;}double [][]clus=new double[3][2];for(int j=0;j<2000;j++){clus[kind[j]][0]+=point[j][0];clus[kind[j]][1]+=point[j][1];}for(int j=0;j<3;j++){  cluster[j][0]=clus[j][0]/(Count[j]);  cluster[j][1]=clus[j][1]/(Count[j]);  Count[j]=0;    System.out.println(cluster[j][0]+","+cluster[j][1]);}}}public static void main(String[] args) throws IOException {readfile();iter();BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/usr/local/hadoop/res.txt"),"GBK"));for(int i=0;i<2000;i++){  System.out.println(kind[i]+""+point[i][0]+","+point[i][1]);  out.write(kind[i]+""+point[i][0]+","+point[i][1]+"");}out.flush();out.close();}}

標籤: kmeans java
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/6vm48y.html