導航:首頁 > 編程語言 > 聚類java實現

聚類java實現

發布時間:2022-08-19 07:24:56

Ⅰ spark 聚類java實現 如何和前台對接

以前做項目時候寫的代碼,數據是一維的,多維的也一樣,把距離計算的改一改就行intterm=Math.abs(dotlist.get(centerIndex[j]).x-dotlist.get(i).x);


[java]viewplain
packageuestc.dmlab.call;

importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.security.KeyStore.Entry;
importjava.util.HashMap;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Map;
importjava.util.Random;
importjava.util.Set;

publicclassClustering{

/**
*
*@paramfileName
*文件中每個欄位對應一個概率
*@paramk
*聚成k個類
*@paramminDistance
*聚類中心位移小於minDistance時停止迭代
*@return
*/
publicstaticHashMap<String,Integer>cluster(StringfileName,intk,
intminDistance){
try{
BufferedReaderbr=newBufferedReader(newFileReader(fileName));
List<Dot>dotlist=newLinkedList<Dot>();
Stringline;
intcount=0;//行數
while((line=br.readLine())!=null){
Strings[]=line.split(",");
Dotdot=newDot();
dot.isCenter=false;
dot.isVirtual=false;
dot.name=s[0];
//if(s.length<4){
//System.out.println(line);
//}
dot.x=Integer.parseInt(s[3]);
dotlist.add(dot);
count++;
}
if(count<k){
k=count;
}

//隨機初始化k個聚類中心
intcenterIndex[]=newint[k];//存儲k個中心點在dotlist中的索引
intcenterNum=k;
while(centerNum>0){
intindex=newRandom().nextInt(count);
if(!dotlist.get(index).isCenter){
centerNum--;
dotlist.get(index).isCenter=true;
centerIndex[centerNum]=index;
}
}

//K個聚類
Cluster[]clusers=newCluster[k];

booleanflag=true;
while(flag){
flag=false;
clusers=newCluster[k];
for(inti=0;i<clusers.length;i++){
clusers[i]=newCluster();
}
//System.out.println(clusers.length);
//找到離第i個點最近的聚類中心
for(inti=0;i<dotlist.size();i++){
//該點不是中心點也不是虛擬點就計算它與所有中心點的距離並取最小值
//if(!dotlist.get(i).isCenter&&!dotlist.get(i).isVirtual){
if(!dotlist.get(i).isVirtual){
intdistance=Integer.MAX_VALUE;
intc=0;//記錄離該節點最近的中心點的索引
for(intj=0;j<k;j++){
intterm=Math.abs(dotlist.get(centerIndex[j]).x
-dotlist.get(i).x);
if(distance>term){
distance=term;
c=j;
}
}
clusers[c].dots.add(i);
}
}

//重新計算聚類中心
for(inti=0;i<k;i++){
Clustercluster=clusers[i];

if(cluster.dots.size()>0){//若該類中有點
intsum=0;
for(intj=0;j<cluster.dots.size();j++){
sum+=dotlist.get(cluster.dots.get(j)).x;
}

Dotdot=newDot();
dot.x=sum/cluster.dots.size();
dot.isCenter=true;
dot.isVirtual=true;

//新舊聚類中心的距離
intterm=Math.abs(dotlist.get(centerIndex[i]).x
-dot.x);
if(term>minDistance)
flag=true;

dotlist.add(dot);
centerIndex[i]=dotlist.indexOf(dot);//第i個聚類的中心改變
}
}
}

//生成分類映射
HashMap<String,Integer>map=newHashMap<String,Integer>();
for(Dotdot:dotlist){
if(dot.isVirtual==false){
intclassName=-1;
for(inti=0;i<k;i++){
if(clusers[i].dots.contains(dotlist.indexOf(dot)))
className=i;
}
map.put(dot.name,className);
}
}
returnmap;
}catch(Exceptione){
e.printStackTrace();
}
returnnewHashMap<String,Integer>();

}

publicstaticvoidmain(String[]args){
Map<String,Integer>map=Clustering.cluster(
"C:/DocumentsandSettings/Administrator/桌面/123.txt",2,0);
Iterator<Map.Entry<String,Integer>>it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,Integer>entry=it.next();
System.out.println(entry.getKey()+","+entry.getValue());
}

}
}

classDot{
Stringname;
intx;
booleanisCenter;
booleanisVirtual;
}

classCluster{
//記錄了該類中點的索引值
LinkedList<Integer>dots=newLinkedList<Integer>();

Ⅱ 請教Louvain演算法的Java程序(程序小白完全看不懂,希望大神詳解)

Louvain演算法主要針對文獻[1]的一種實現,它是一種基於模塊度的圖演算法模型,與普通的基於模塊度和模塊度增益不同的是,該演算法速度很快,而且對一些點多邊少的圖,進行聚類效果特別明顯,本文用的畫圖工具是Gephi,從畫圖的效果來說,提升是很明顯的。

文本沒有權威,僅是個人工作中的一點總結與思考,能力與時間有限,理解不免有些淺薄,僅做參考。也可能有理解偏差或錯誤,如有發現,希望不吝指教,多謝!

由於演算法中的公式太多,不方便用markdown編輯,所以就將編排好的文檔轉成圖片,如需完整的文檔請點擊這里下載。

Ⅲ 用JAVA實現錄入一個txt文檔,並且將文檔轉換成矩陣或數組,得到文本距離用以使用K-MEANS演算法進行聚類分析

您好,詮釋imgW img.getWidth();
imgH = img.getHeight();
INT [] RGBData =新的int [imgW * imgH];
img.getRGB(RGBData,imgW,0,0,imgW,imgH);
TMP =(255 << 24)| 0x00444444;
(INT I = 0;我RGBData.length,我+ +)
{
RGBData [I] = tmp目錄;
}
圖片o_Img = Image.createRGBImage(RGBData,imgW,imgH, TRUE);得到處理後的圖像

現在用圖片半透明的,未經測試。

Ⅳ 用 k-means方法對下面的數據進行分類,k=3,要求用java寫代碼 怎麼做

第一次迭代下,除了a4點,其他點都歸為一類c1:(a1 a2 a3 a5);c2:(a4) 聚類中心:c1:(2,2);c2(5,4)(聚類中心的計算方式是平均類中所有點)
第二次迭代下,c1(a1 a2 a5);c2(a3 a4) 聚類中心c1:(4/3,5/3);c2(9/2 7/2)
第三次迭代下,c1(a1 a2 a5);c2(a3 a4) 聚類中心c1:(4/3,5/3);c2(9/2 7/2)結果已經穩定跳出循環

Ⅳ 聚類演算法,K-means演算法的Java代碼實現

這得分詞+vsm+k-means啊。k-means演算法網上應該不少,但是對文檔的話,還得進行分詞,構建矢量空間模型才能進行聚類啊。

Ⅵ 在myeclipse中,求java按最短距離的系統聚類法,將一個二維數組按行分成3類的代碼,急用!

你說的那些演算法還是matlab處理起來更方便些,其實matlab提供了跟java的介面,如果非要用java的話,可以用matlab把演算法包裝為庫,供java來調用,matlab help文檔裡面說的還是很清楚的。

Ⅶ k-means聚類演算法的java代碼實現文本聚類

K-MEANS演算法:
k-means 演算法接受輸入量 k ;然後將n個數據對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個「中心對象」(引力中心)來進行計算的。

k-means 演算法的工作過程說明如下:首先從n個數據對象任意選擇 k 個對象作為初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到標准測度函數開始收斂為止。一般都採用均方差作為標准測度函數. k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。

具體如下:
輸入:k, data[n];
(1) 選擇k個初始中心點,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 對於data[0]….data[n], 分別與c[0]…c[n-1]比較,假定與c[i]差值最少,就標記為i;
(3) 對於所有標記為i點,重新計算c[i]=/標記為i的個數;
(4) 重復(2)(3),直到所有c[i]值的變化小於給定閾值。

演算法實現起來應該很容易,就不幫你編寫代碼了。

Ⅷ 利用CURE演算法進行文本聚類的java實現代碼

為什麼不用kmeans呢。

by 矩網智慧

Ⅸ 聚類演算法K-means演算法實現的Java源代碼 數據是文件讀入的,跪求!!!!

不會用跟我說,我自己寫的,親測可用

Ⅹ 利用java演算法進行聚類,聚類的結果存儲在哪

K-MEANS演算法: k-means 演算法接受輸入量 k ;然後將n個數據對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較校聚類相似度是利用各聚類中對象的均值所獲得一個「中心對象」

閱讀全文

與聚類java實現相關的資料

熱點內容
隨車拍app綁定什麼設備 瀏覽:893
方維團購系統源碼 瀏覽:988
linux反彈shell 瀏覽:152
列印機介面加密狗還能用嗎 瀏覽:299
二板股票源碼 瀏覽:446
度人經pdf 瀏覽:902
怎麼配置android遠程伺服器地址 瀏覽:960
java程序員看哪些書 瀏覽:943
什麼app可以免費和外國人聊天 瀏覽:796
pdf手寫筆 瀏覽:182
別永遠傷在童年pdf 瀏覽:990
愛上北斗星男友在哪個app上看 瀏覽:421
主力散戶派發源碼 瀏覽:671
linux如何修復伺服器時間 瀏覽:61
榮縣優途網約車app叫什麼 瀏覽:479
百姓網app截圖是什麼意思 瀏覽:229
php如何嵌入html 瀏覽:817
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:136
程序員簡易表白代碼 瀏覽:170