导航:首页 > 编程语言 > 聚类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实现相关的资料

热点内容
度人经pdf 浏览:898
怎么配置android远程服务器地址 浏览:956
java程序员看哪些书 浏览:939
什么app可以免费和外国人聊天 浏览:793
pdf手写笔 浏览:178
别永远伤在童年pdf 浏览:986
爱上北斗星男友在哪个app上看 浏览:418
主力散户派发源码 浏览:667
linux如何修复服务器时间 浏览:57
荣县优途网约车app叫什么 浏览:475
百姓网app截图是什么意思 浏览:225
php如何嵌入html 浏览:813
解压专家怎么传输 浏览:744
如何共享服务器的网络连接 浏览:134
程序员简易表白代码 浏览:168
什么是无线加密狗 浏览:64
国家反诈中心app为什么会弹出 浏览:69
cad压缩图打印 浏览:104
网页打开速度与服务器有什么关系 浏览:865
android开发技术文档 浏览:65