java实现聚类代码 java kmeans聚类算法

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]值的变化小于给定阈值 。
算法实现起来应该很容易,就不帮你编写代码了 。
谁有 遗传聚类算法程序代码1、JDK (Java Development Kit)Java开发工具集
从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想 。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级 。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发 。
2、Java Workshop
3、NetBeans 与Sun Java Studio 5
4.Borland 的JBuilder jbuilder2006JBuilder
或者直接用Editplus或者UltraEdit都可以
JBuilder启动比较费CPU和内存,而且收费,还是全英文界面,不过用熟了还是很好用的 。初学者先用Notepad(写字板),Ultraedit之类的简单文本编辑器写代码,
用命令行下javac,java编译执行程序 。
明白了这种底层的东西后,再用Jcreator,eclipse啥的
JCreator是一个JAVA集成开发环境(IDE) 。它为用户提供了相当强大的功能 , 例如项目管理功能,项目模板功能,可个性化设置语法高亮属性、行数、类浏览器、标签文档、多功能编绎器,向导功能以及完全可自定义的用户界面 。通过JCreator,你不用激活主文档而直接编绎或运行你的JAVA程序 。JCreator能自动找到包含主函数的文件或包含Applet的Html文件,然后它会运行适当的工具 。在JCreator中,你可以通过一个批处理同时编绎多个项目 。JCreator的设计接近Windows界面风格,用户对它的界面比较熟悉 。UltraEdit初级用这一个,这一个比较好的.
你如果想开发比较高级的程序啦..用Jbuilder吧. 这一个地球人都知道的.应该是用什么来编译吧?要编写的话当然是用JAVA语言了 , 编写的平台的话就很多了,随便到网上搜索就可能找到,记事本也可能用来编写,编译平台也很多 , JDK是少不了,最简单的就是JDK了,安装好JDK,然后配置好系统参数JAV_HOME(值为JDK的安装路径)JDK_HOME(值为JDK的安装路径)还要配置CLASSPATH和PATH,这样就可以用记事本编写程序,在命令提示符下编译了 开始是先学习VB然后用JAVA语言就可以了UltraEdit如果不是企业级的开发,选用eclipse是非常不错的,它是一个开源的软件可以集成很多插件来帮助你写java应用程序和客户端程序 。常见的十四种Java开发工具及其特点出处:JR
1、JDK (Java Development Kit)Java开发工具集
从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想 。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级 。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发 。
2、Java Workshop
3、NetBeans 与Sun Java Studio 5
NetBeans是开放源码的Java集成开发环境(IDE),适用于各种客户机和Web应用 。Sun Java Studio是Sun公司最新发布的商用全功能Java IDE,支持Solaris、Linux和Windows平台,适于创建和部署2层Java Web应用和n层J2EE应用的企业开发人员使用 。
NetBeans是业界第一款支持创新型Java开发的开放源码IDE 。开发人员可以利用业界强大的开发工具来构建桌面、Web或移动应用 。同时,通过NetBeans和开放的API的模块化结构 , 第三方能够非常轻松地扩展或集成NetBeans平台 。
NetBeans3.5.1主要针对一般Java软件的开发者,而Java One Studio5则主要针对企业做网络服务等应用的开发者 。Sun不久还将推出Project Rave , 其目标是帮助企业的开发者进行软件开发 。
NetBeans 3.5.1版本与其他开发工具相比,最大区别在于不仅能够开发各种台式机上的应用 , 而且可以用来开发网络服务方面的应用,可以开发基于J2ME的移动设备上的应用等 。在NetBeans 3.5.1基础上 , Sun开发出了Java One Studio5,为用户提供了一个更加先进的企业编程环境 。在新的Java One Studio5里有一个应用框架,开发者可以利用这些模块快速开发自己在网络服务方面的各种应用程序 。
4、Borland 的JBuilder
Jbuilder进入了Java集成开发环境的王国,它满足很多方面的应用,尤其是对于服务器方以及EJB开发者们来说 。下面简单介绍一下Jbuilder的特点:
1)Jbuilder支持最新的Java技术,包括Applets、JSP/Servlets、JavaBean以及EJB(Enterprise JavaBeans)的应用 。
2)用户可以自动地生成基于后端数据库表的EJB Java类,Jbuilder同时还简化了EJB的自动部署功能.此外它还支持CORBA,相应的向导程序有助于用户全面地管理IDL(分布应用程序所必需的接口定义语言Interface Definition Language)和控制远程对象 。
3)Jbuilder支持各种应用服务器 。Jbuilder与Inprise Application Server紧密集成,同时支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速开发J2EE的电子商务应用 。
4)Jbuilder能用Servlet和JSP开发和调试动态Web 应用 。
5)利用Jbuilder可创建(没有专有代码和标记)纯Java2应用 。由于Jbuilder是用纯Java语言编写的,其代码不含任何专属代码和标记,它支持最新的Java标准 。
6)Jbuilder拥有专业化的图形调试介面,支持远程调试和多线程调试,调试器支持各种JDK版本,包括J2ME/J2SE/J2EE 。
JBuilder环境开发程序方便,它是纯的Java 开发环境,适合企业的J2EE开发;缺点是往往一开始人们难于把握整个程序各部分之间的关系,对机器的硬件要求较高,比较吃内存,这时运行速度显得较慢 。
5、Oracle 的JDeveloper
Oracle9i JDeveloper(定为9.0版,最新为10g)为构建具有J2EE功能,XML和Web services的复杂的,多层的 Java应用程序提供了一个完全集成的开发环境 。它为运用Oracle9i数据库和应用服务器的开发人员提供特殊的功能和增强性能,除此以外 , 它也有资格成为用于多种用途Java开发的一个强大的工具 。
Oracle9i JDeveloper的主要特点如下:
① 具有UML(Unified Modeling Language,一体化建模语言)建模功能 。可以将业务对象及e-business应用模型化 。
② 配备有高速Java调试器(Debuger)、内置Profiling工具、提高代码质量的工具“CodeCoach”等 。
③ 支持SOAP(Simple Object Access Protocol)“简单对象访问协议”、UDDI (Universal Description, Discovery and Integration)“统一描述、发现和集成协议”、WSDL (Web Services Description Language)“WEB服务描述语言”等Web服务标准 。
JDeveloper 不仅仅是很好的 Java 编程工具,而且是 Oracle Web 服务的延伸,支 Apache SOAP,以及9iAS ,可扩充的环境和 XML 和 WSDL 语言紧密相关 。Oracle9i Jdeveloper完全利用Java编写 , 能够与以前的 Oracle服务器软件以及其他厂商支持J2EE的应用服务器产品相兼容,而且在设计时着重针对Oracle9i,能够无缝化跨平台之间的应用开发 , 提供了业界第一个完整的、集成了J2EE和XML的开发环境,允许开发者快速开发可以通过Web、无线设备及语音界面访问的Web服务和交易应用 , 以往只能通过将传统Java编程技巧与最新模块化方式结合到一个单一集成的开发环境中之后才能完成J2EE应用开发生命周期管理的事实,从根本上得到改变 。缺点就是对于初学者来说 , 较复杂,也比较难 。
6、IBM的Visual Age for Java
Visual Age for Java是一个非常成熟的开发工具,它的特性以于IT开发者和业余的Java编程人员来说都是非常用有用的 。它提供对可视化编程的广泛支持,支持利用CICS连接遗传大型机应用,支持EJB的开发应用,支持与Websphere的集成开发,方便的bean创建和良好的快速应用开发(RAD)支持和无文件式的文件处理 。
IBM为建设Web站点所推出的 WebSphere Studio Advanced Edition及其包含的Visua Age for Java Professional Edition软件已全面转向以Java为中心 , 这样,Java开发人员对WebSphere全套工具的感觉或许会好了许多 。Studio所提供的工具有:Web站点管理、快速开发 JDBC页向导程序、HTML编辑器和HTML语法检查等 。这确实是个不错的HTML站点页面编辑环境 。Studio和VisualAge集成度很高 , 菜单中提供了在两种软件包之间快速移动代码的选项 。这就让使用 Studio的Web页面设计人员和使用VisualAge的Java程序员可以相互交换文件、协同工作 。
Visual Age for Java支持团队开发,内置的代码库可以自动地根据用户做出改动而修改程序代码,这样就可以很方便地将目前代码和早期版本做出比较 。与Visual Age紧密结合的Websphere Studio本身并不提供源代码和版本管理的支持,它只是包含了一个内置文件锁定系统, 当编辑项目的时候可以防止其他人对这些文件的错误修改 , 软件还支持诸如Microsoft Visual SourceSafe这样的第三方源代码控制系统 。Viual Age for Java完全面向对象的程序设计思想使得开发程序非常快速、高效 。你可以不编写任何代码就可以设计出一个典型的应用程序框架 。Visual Age for Java作为IBM电子商务解决方案其中产品之一,可以无缝地与其他IBM产品 , 如WebSphere、DB2融合, 迅速完成从设计、开发到部署应用的整个过程 。
Visual Age for Java独特的管理文件方式使其集成外部工具非常困难,你无法让Visual Age for Java与其他工具一起联合开发应用 。
7、BEA 的 WebLogic Workshop
BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,使所有的开发人员都能在 BEA WebLogic Enterprise Platform之上构建基于标准的企业级应用,从而提高了开发部门的生产力水平,加快了价值的实现 。
WebLogic Workshop除了提供便捷的Web服务之外,它能够用于创建更多种类的应用 。作为整个 BEA WebLogic Platform的开发环境 。不管是创建门户应用、编写工作流、还是创建Web应用,Workshop 8.1都可以帮助开发人员更快更好地完成 。
WebLogic Workshop的主要特点如下:
① 使 J2EE 开发切实可行,提高开发效率
BEA WebLogic Workshop 使开发人员远离 J2EE 内在的复杂性,集中精力专注业务逻辑,无须操心单调乏味的基础结构代码 。这种创新意味着,已被企业验证的 J2EE 的强大功能,最终被大多数不熟悉 Java 和 J2EE 的应用开发人员所掌握 , 从而使 IT 部门的工作效率提高一个数量级 。
可视化设计器以及直观的概念,如事件、属性和控件等 , 实现了基于事件的开发 。Workshop 简化的程序设计模型,使开发人员不必掌握复杂的 J2EE API 和面向对象的程序设计原理 。所有开发人员 , 包括 J2EE 专家和具有可视化和过程化语言技能的应用开发人员在内,都可以共同工作在 BEA WebLogic Enterprise Platform 之上 。Workshop 的可视化开发环境,创建带有代码注释的标准 Java 文件,用来说明由运行时框架实施的企业级需求 。J2EE 和其他高级开发人员,借助功能强大的代码编辑功能 , 可以访问Java 源代码,从而弥补了可视化设计器的不足 。
② 构建企业级应用
通过在可伸缩、安全可靠的企业级架构上实施各种应用,BEA WebLogic Workshop 大大降低了开发风险 。而且,所有应用的创建都使用标准的 J2EE 组件,既保护了您的技术投资 , 又保持了最大的灵活性 。BEA WebLogic Workshop 运行框架,是统一整个架构的汇聚层,使单一、简化的程序设
计模型扩展到所有的 BEA WebLogic Enterprise Platform 应用类型 。通过解释设计时创建的注释代码,运行时框架可以实现必要的 J2EE 组件,并且提取出与 J2EE 应用开发有关的所有底层细节 。
③ 降低 IT 复杂性
BEA WebLogic Workshop 提供各种 Java 控件,使得与 IT 资源的连接更轻而易举 。另外,在构建任何BEA WebLogic Platform 的应用中 , Java 控件不仅可扩展而且完全相同 。这种强大、有效的方法能够:降低 IT 技术的复杂性,优化信息的可用性,推动包含"最佳业务方案"的可重用服务的开发,使开发人员能以更低的成本、更短的时间实现更大的产出 。
利用BEA WebLogic Workshop,任何开发人员都能以最大的生产效率,构建各种Web 服务、Web 应用、门户和集成项目 。BEA WebLogic Workshop是BEA的产品战略核心,它帮助客户接触和利用面向服务架构(SOA)的强大功能 。BEA Weblogic Workshop 8.1极大简化了当前实际企业集成环境中企业级应用和服务的构建,并成为全面支持关键企业级应用(如异步、真正松耦合和粗粒度消息传送等)的自然选择 。它的缺点就是过于复杂,对于初学者来说,理解起来较为困难 。
8、WebGain 的Visual Cafe for Java
Visual Cafe 是只能在Symantec公司的Java虚拟机、Netscape公司的Java虚拟机和Microsoft虚拟机上工作的调试器 。这对于开发者来讲是一个重要的特性,因为用户开发的Java代码中的许多软件bug就可能中会在某种特定的虚拟机上起作用 。
在修改后进行编译基继续进行调试时,Visual Cafe会自动将文件存盘,使用Visual Cafe创建的原生应用具有许多特点 。除了明显的速度提高之外,Symantec使类库的二进制方式比正常的JDK小Visual Cafe为所指定的关系自动生成或更新必要的Java代码 。利用 Visual Cafe,用户可以从一个标准对象数据库中集合完整的Java应用程序和Applet,而不必再编写源代码 。Visual Cafe还提供了一个扩充的源代码开发工具集 。
Visual Cafe综合了Java软件的可视化源程序开发工具,它允许开发人员在可视化视图和源视图之间进行有效地转换 。在可视化视图中进行的修改立即反映在源代码中 。对源代码的改变自动更新可视化视图 。
Visual Cafe具有许多源文件方面的特性,如全局检索和替换 。绝大多数Java开发工具的文献的问题在于简单地挨个介绍开发工具的每部分组件,但用户在开应用时还需要一个面向任务的手册,利用这个手册你可以不必知道工具每一部分的特定功能就可以开始创建自己的应用 。Visual Cafe提供了非常全面的用户指南,它对最开始的安装到创建第一个Java应用和Applet都提供了全面的帮助,Visual Cafe将自动生成所指明关系的必要 Java代码 。Visual Cafe可以在Windows 95和Windows NT平台下运行,Symantec公司为Java开发工作提供一个在 Macintosh操作系统下可以运行的RAD工具 。Visual Cafe编译器速度很快,在国际化支持方面比较突出;缺点就是对于初学者来说 , 较复杂 , 也比较难 。
9、Macromedia的JRUN
Macromedia公司的JRun是一个具有最广阔适用性的Java引擎,用于开发及实施由Java Servlets和JavaServer Pages编写的服务器端 Java应用 。JRun是第一个完全支持JSP 1.0 规格书的商业化产品,全球有超过80,000名开发人员使用JRun在他们已有的Web服务器上添加服务器端Java的功能 。其中Web服务器包括了Microsoft IIS,Netscape Enterprise Server,Apache 等 。
JRun是开发实施服务器端Java的先进引擎 。如果我们希望在我们的Web应用中添加服务器端Java功能,那么JRun将成为我们的正确选择 。
JRun目前有3个版本,它是第一个支持Java Server Pages(JSP)规格书1.0的商业化产品 。JSP是一种强大的服务器端技术 , 它是用于创建复杂Web应用的一整套快速应用开发系统 。JRun可以使我们开始开发并测试Java应用 。它最多接受5个并发的连接并且包括全部 Java Servlet API,支持JavaServer Pages(JSP),支持所有主要的Web servers和计算机平台 。JRun Pro能够在生产环境下承受大访问量的负载,帮助我们实施应用、服务或Web站点(包括内联网) 。JRun Pro 支持无限量并发式连接运行多个Jav
a虚拟机,包括多个并发的Java虚拟机(JVM) 。提供一个远程管理applet以及一个远程可再分布式的管理applet 。JRun Pro Unlimited包括了所有JRun Pro的功能,除次以外,还可以运行无限量的,并发的JVM 。
JRun依靠其内置的JRun Web Server可以单独运行 。使用服务器端Java,用户可以开发出复杂的商业应用系统 。最重要的一点是,由于 servlets的平台独立性 , 以及更加简单的开发、更快速的实施、更经济的维护成本,它是CGI(Common Gateway Interface) 或Perl scripts的极佳的替代产品 。缺点就是对于初学者来说,较复杂,也比较难 。
10、JCreator
JCreator 是一个Java程序开发工具,也是一个Java集成开发环境(IDE) 。无论你是要开发Java应用程序或者网页上的Applet元件都难不倒它 。在功能上与Sun公司所公布的JDK等文字模式开发工具相较之下来得容易,还允许使用者自订义操作窗口界面及无限Undo/Redo等功能 。
JCreator为用户提供了相当强大的功能 , 例如项目管理功能 , 项目模板功能,可个性化设置语法高亮属性、行数、类浏览器、标签文档、多功能编绎器,向导功能以及完全可自定义的用户界面 。通过JCreator,我们不用激活主文档而直接编绎或运行我们的JAVA程序 。
JCreator能自动找到包含主函数的文件或包含Applet的Html文件,然后它会运行适当的工具 。在JCreator中 , 我们可以通过一个批处理同时编绎多个项目 。JCreator的设计接近Windows界面风格 , 用户对它的界面比较熟悉 。其最大特点是与我们机器中所装的JDK完美结合,是其它任何一款IDE所不能比拟的 。它是一种初学者很容易上手的java开发工具,缺点是只能进行简单的程序开发,不能进行企业J2EE的开发应用 。
还有的字太多 , 贴不上,请到下面的网址去看
;thread=24920 br/br/font color=#0556A3参考文献:/font我现在也在学.
建议是用JCreate
软件小且适用于初写者
JBuild9.0太大,机子的性能也要求很大.我用日蚀
Eclipse只要普通的文本编辑器就可以了,因为java文件本身是文本文档,不过如果开发的话可以使用eclipse,jbuilder , intellJ IDEA , Netbeans,这些帮你把一些常用的工作都做了 。jdev记事本 +jdk
spark 聚类java实现 如何和前台对接以前做项目时候写的代码 , 数据是一维的 , 多维的也一样,把距离计算的改一改就行int term = Math.abs(dotlist.get(centerIndex[j]).x- dotlist.get(i).x);
[java] view plaincopy
package uestc.dmlab.call;
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
public class Clustering {
/**
*
* @param fileName
*文件中每个字段对应一个概率
* @param k
*聚成k个类
* @param minDistance
*聚类中心位移小于minDistance时停止迭代
* @return
*/
public static HashMapString, Integer cluster(String fileName, int k,
int minDistance) {
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
ListDot dotlist = new LinkedListDot();
String line;
int count = 0;// 行数
while ((line = br.readLine()) != null) {
String s[] = line.split(",");
Dot dot = new Dot();
dot.isCenter = false;
dot.isVirtual = false;
dot.name = s[0];
// if(s.length4){
// System.out.println(line);
// }
dot.x = Integer.parseInt(s[3]);
dotlist.add(dot);
count;
}
if (countk) {
k = count;
}
// 随机初始化k个聚类中心
int centerIndex[] = new int[k]; // 存储k个中心点在dotlist中的索引
int centerNum = k;
while (centerNum0) {
int index = new Random().nextInt(count);
if (!dotlist.get(index).isCenter) {
centerNum--;
dotlist.get(index).isCenter = true;
centerIndex[centerNum] = index;
}
}
// K个聚类
Cluster[] clusers = new Cluster[k];
boolean flag = true;
while (flag) {
flag = false;
clusers = new Cluster[k];
for (int i = 0; iclusers.length; i) {
clusers[i] = new Cluster();
}
//System.out.println(clusers.length);
// 找到离第i个点最近的聚类中心
for (int i = 0; idotlist.size(); i) {
// 该点不是中心点也不是虚拟点就计算它与所有中心点的距离并取最小值
// if(!dotlist.get(i).isCenter!dotlist.get(i).isVirtual){
if (!dotlist.get(i).isVirtual) {
int distance = Integer.MAX_VALUE;
int c = 0;// 记录离该节点最近的中心点的索引
for (int j = 0; jk; j) {
int term = Math.abs(dotlist.get(centerIndex[j]).x
- dotlist.get(i).x);
if (distanceterm) {
distance = term;
c = j;
}
}
clusers[c].dots.add(i);
}
}
// 重新计算聚类中心
for (int i = 0; ik; i) {
Cluster cluster = clusers[i];
if (cluster.dots.size()0) { //若该类中有点
int sum = 0;
for (int j = 0; jcluster.dots.size(); j) {
sum= dotlist.get(cluster.dots.get(j)).x;
}
Dot dot = new Dot();
dot.x = sum / cluster.dots.size();
dot.isCenter = true;
dot.isVirtual = true;
// 新旧聚类中心的距离
int term = Math.abs(dotlist.get(centerIndex[i]).x
- dot.x);
if (termminDistance)
flag = true;
dotlist.add(dot);
centerIndex[i] = dotlist.indexOf(dot); // 第i个聚类的中心改变
}
}
}
// 生成分类映射
HashMapString, Integer map = new HashMapString, Integer();
for (Dot dot : dotlist) {
if (dot.isVirtual == false) {
int className = -1;
for (int i = 0; ik; i) {
if (clusers[i].dots.contains(dotlist.indexOf(dot)))
className = i;
}
map.put(dot.name, className);
}
}
return map;
} catch (Exception e) {
e.printStackTrace();
}
return new HashMapString, Integer();
}
public static void main(String[] args) {
MapString, Integer map = Clustering.cluster(
"C:/Documents and Settings/Administrator/桌面/123.txt", 2, 0);
IteratorMap.EntryString, Integer it = map.entrySet().iterator();
while(it.hasNext()){
Map.EntryString, Integer entry = it.next();
System.out.println(entry.getKey() "," entry.getValue());
}
}
}
class Dot {
String name;
int x;
boolean isCenter;
boolean isVirtual;
}
class Cluster {
// 记录了该类中点的索引值
LinkedListInteger dots = new LinkedListInteger();
【java实现聚类代码 java kmeans聚类算法】关于java实现聚类代码和java kmeans聚类算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读