java kmeans是什么,讓我們一起了解一下?
k-means是一種迭代求解的聚類分析算法,其步驟是,預(yù)將數(shù)據(jù)分為K組,則隨機(jī)選取K個(gè)對(duì)象作為初始的聚類中心,然后計(jì)算每個(gè)對(duì)象與各個(gè)種子聚類中心之間的距離,把每個(gè)對(duì)象分配給距離它最近的聚類中心。
K-means算法是怎樣的?
1、選取K個(gè)點(diǎn)作為初始質(zhì)心。
2、對(duì)每個(gè)樣本分別計(jì)算到K個(gè)質(zhì)心的相似度或距離,將該樣本劃分到相似度最高或距離最短的質(zhì)心所在類。
3、對(duì)該輪聚類結(jié)果,計(jì)算每一個(gè)類別的質(zhì)心,新的質(zhì)心作為下一輪的質(zhì)心。
4、判斷算法是否滿足終止條件,滿足終止條件結(jié)束,否則繼續(xù)第2、3、4步。
java如何實(shí)現(xiàn)kmeans?
初始化:
1、先把數(shù)據(jù)集中的點(diǎn)的坐標(biāo)讀入到一個(gè)二維數(shù)組中。
2、并選擇前面的三個(gè)點(diǎn)作為初始的中心點(diǎn)。
迭代部分:
1、對(duì)每個(gè)點(diǎn)分別計(jì)算到三個(gè)中心點(diǎn)的距離,并根據(jù)最小的距離給點(diǎn)分類。
2、對(duì)每一類的所有點(diǎn)的橫縱坐標(biāo)計(jì)算均值生成新的中心點(diǎn)保存。
具體代碼示例如下:
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); ????????//寫入相關(guān)文件 ????????//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(); ????//關(guān)閉流 ????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以上就是小編今天的分享了,希望可以幫助到大家。