java,kmeans
<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?
初始化:
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();}}
-
蘋果手機長圖怎麼截圖,蘋果手機截長圖的兩種方法
1、長截圖辦法一iOS13上新之後自帶的長截圖方法,是在我們瀏覽網頁的時候使用的。操作方法:上音量鍵+開關鍵一起按下,然後點開截好的圖片,選擇“整頁”截圖即可。2、長截圖方法二利用QQ實現長截圖。操作方法:首先就是需要我們打開QQ,然後試着上音量鍵+開關鍵一起按下...
-
省內移動數據流量是指什麼
省內移動數據流量是指你的SIM卡所屬省份的可用GPRS流量,如果出了你的卡所屬的省份,去別的省,那省內移動數據流量就不可以使用,只能使用全國通用流量。移動數據流量有省內流量和全國通用流量,國內流量和省內流量是有所區別的。首先優先度不同:正常情況下,如果用戶在自...
-
關於底噪的意思介紹
1、底噪亦稱背景噪聲,基本所有的好耳機都有底噪,耳機底噪一般都是因爲前端的問題,耳機的靈敏度越高對於底噪就越敏感,一些高靈敏度和低阻抗的耳機會把底噪放大,如果加大音量的情況下,底噪會更加的明顯。2、檢測MP3底噪,一般方法是在夜晚等比較安靜的環境中戴上耳機,播...
-
黑色背景拍照竅門詳解
1、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較爲深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作爲背景。要多嘗試不同的角度,直至主體...