資源簡介
基于JAVA的kmeans算法,隨機取數,循環取平均與計算,最終分類
代碼片段和文件信息
package?Kmeans;
import?java.io.File;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.PrintStream;
import?java.util.ArrayList;
import?java.util.Random;
import?java.util.Scanner;
public?class?Kmeans?{
public?static?int?dimension=690;
public?static?int?count_of_data=320;
public?static?int?cluster=20;
public?Kmeans()?throws?FileNotFoundException{
ArrayList?dataset=new?ArrayList<>();
????? String?path=“E:\\數據挖掘\\實驗三\\聚類實驗數據\\data.txt“;
// String?path=“C:\\data.txt“;
File?file=new?File(path);
Scanner?sc=null;
sc=new?Scanner(file);
while(sc.hasNextLine()){
Data?data=new?Data();
String?str=sc.nextLine();
String[]?arr=str.split(“?“);
for(String?s:arr){
data.point.add(Double.parseDouble(s));
}
dataset.add(data);
}
File?fi?=?new?File(“K-mean“?+?cluster?+?“.txt“);
FileOutputStream?fs?=?new?FileOutputStream(fi);
PrintStream?ps?=?new?PrintStream(fs);
// 隨機取cluster個點
ArrayList?initial=new?ArrayList<>();
Random?rand?=new?Random();
for(int?i=0;i int?x;
while(initial.contains(x=rand.nextInt(count_of_data))==true){}
initial.add(x);
}
// 生成cluster個簇
ArrayList?crowdset=new?ArrayList<>();
for(int?i=0;i Crowdtogether?crowd=new?Crowdtogether();
crowd.dim=i;
for(int?j=0;j crowd.point.add(dataset.get(initial.get(i)).point.get(j));
}
crowdset.add(crowd);
}
// 每個點分配簇
for(int?i=0;i dyeing(dataset.get(i)idatasetcrowdset);
}
// while循環
boolean?flag=false;
while(flag==false){
// 取平均值
for(int?i=0;i double?sumDistance=0;
double?count=0;
Double[]?pt=new?Double[dimension];
for(int?x=0;x pt[x]=0.0;
}
for(int?j=0;j if(dataset.get(j).dim==i){
for(int?k=0;k pt[k]=pt[k]+dataset.get(j).point.get(k);
}
count++;
}
}
for(int?k=0;k
- 上一篇:java簡單網絡爬蟲
- 下一篇:java課程設計--圖書銷售管理系統
評論
共有 條評論