直接聚类法的java代码实现及其应用.docx

上传人:b****6 文档编号:16834029 上传时间:2023-07-17 格式:DOCX 页数:12 大小:24.21KB
下载 相关 举报
直接聚类法的java代码实现及其应用.docx_第1页
第1页 / 共12页
直接聚类法的java代码实现及其应用.docx_第2页
第2页 / 共12页
直接聚类法的java代码实现及其应用.docx_第3页
第3页 / 共12页
直接聚类法的java代码实现及其应用.docx_第4页
第4页 / 共12页
直接聚类法的java代码实现及其应用.docx_第5页
第5页 / 共12页
直接聚类法的java代码实现及其应用.docx_第6页
第6页 / 共12页
直接聚类法的java代码实现及其应用.docx_第7页
第7页 / 共12页
直接聚类法的java代码实现及其应用.docx_第8页
第8页 / 共12页
直接聚类法的java代码实现及其应用.docx_第9页
第9页 / 共12页
直接聚类法的java代码实现及其应用.docx_第10页
第10页 / 共12页
直接聚类法的java代码实现及其应用.docx_第11页
第11页 / 共12页
直接聚类法的java代码实现及其应用.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

直接聚类法的java代码实现及其应用.docx

《直接聚类法的java代码实现及其应用.docx》由会员分享,可在线阅读,更多相关《直接聚类法的java代码实现及其应用.docx(12页珍藏版)》请在冰点文库上搜索。

直接聚类法的java代码实现及其应用.docx

直接聚类法的java代码实现及其应用

直接聚类法的java代码实现及其应用

姓名:

高雅

班级:

管信062班

学号:

40670277

指导教师:

张文新

【摘要】

聚类分析是通过数据建模简化数据的一种方法。

直接聚类法是其中比较简单而且准确率较高的一种方法。

本文将探讨直接聚类法的java代码实现,然后用此方法来分析中国城镇居民消费结构的差异。

【关键字】直接聚类法java代码实现

1.引言

直接聚类法的基本原理是先把各个分类对象单独视为一类,然后根据距离最小的原则,依次选出一对分类对象,并成新类。

如果其中一个分类对象已归于一类,则把另一个也归入该类;如果一对分类对象正好属于已归的两类,则把这两类并为一类。

每一次归并,都划去该对象所在的列与列序相同的行。

经过m-1次就可以把全部分类对象归为一类,这样就可以根据归并的先后顺序作出聚类谱系图。

直接聚类法由于简单易行且准确率较高被广泛应用于社会生活各个方面的有关分析。

Java是一门面向对象的,跨平台的语言,由于其强大的生命力而被广泛应用于编程的各个方面。

本文的直接聚类法将基于java语言开发,运行环境是JDK版本。

本文将探讨直接聚类法的基本思想和实现步骤,并给出每一步骤的java代码实现。

最后通过一个城镇居民消费结构的差异化分析来展示该方法的应用。

直接聚类法的基本原理在引言中已经给出,可以看出,其思想还是比较简单的。

下面将详细介绍直接聚类法的实施步骤。

关于聚类要素的数据处理和样本之间距离的计算有多种方法,本文的java代码实现仅选择其中的一种来实现,因此在相应的步骤中将会详细介绍java代码实现的处理方法,对于其他方法则点到为止。

假设有m个聚类的对象,每一个聚类对象都有n个要素构成。

表示第i个样本的第j个要素所对应的数值,以下的

均表此含义。

聚类要素的数据处理

在聚类分析中,聚类要素的选择是十分重要的,它直接影响分类结果的准确性和可靠性。

在实际应用中,被聚类的对象常常是多个要素构成的。

不同要素的数据往往具有不同的单位和量纲,其数值的变异可能是很大的,这就会对分类结果产生影响。

因此当分类要素的对象确定之后,在进行聚类分析之前,首先要对聚类要素进行数据处理。

数据处理的方法有很多种,主要包括总和标准化,标准差标准化,极大值标准化和极差标准化。

本文的java代码实现采用极差标准化的方法。

极差标准化的计算公式如下所示:

(i=1,2,3,…m,j=1,2,…n)

聚类要素数据处理的java代码实现:

//采用极差标准化方法将原始数据标准化,使得所有的数据均转化为0-1之间的数值。

publicdouble[][]getNormalization(double[][]data){

for(inti=0;i

doublemax=data[0][i];

doublemin=data[0][i];

for(intj=0;j

if(max

max=data[j][i];

}

if(min>data[j][i]){

min=data[j][i];

}

}

doubles=max-min;

for(intj=0;j

normalization[j][i]=(data[j][i]-min)/s;

}

}

for(inti=0;i

for(intj=0;j

System.out.print(myformat.format(normalization[i][j])+"");

}

System.out.println();

}

returnnormalization;

}

各样本间距离的计算

距离是用来测量两个样本之间差异度的指标。

距离的计算方法主要有以下几种:

绝对值距离,欧氏距离,明科夫斯基距离,切比雪夫距离。

本文的java代码实现采用绝对值距离来计算各个样本之间的距离。

(i,j=1,2,3,…m)

//用绝对值距离的方法获取初始各对象之间的距离

publicdouble[][]getDistance(doublenormalization[][]){

for(inti=0;i

for(intj=0;j

distance[i][j]=0;

for(intk=0;k

distance[i][j]+=Math.abs(normalization[i][k]

-normalization[j][k]);

}

System.out.print(myformat.format(distance[i][j])+"");

}

System.out.println();

}

returndistance;

}

进行聚类

先把各个分类对象单独视为一类,然后根据距离最小的原则,依次选出一对分类对象,并成新类。

每一次归并,都划去两个对象中序号较大者所在的列与列序相同的行。

经过m-1次就可以把全部分类对象归为一类,这样就可以根据归并的先后顺序作出聚类谱系图。

//按照谱系聚类法进行聚类

publicvoidcluster(double[][]distance){

intnumber=distance.length;

doublerate[]=newdouble[number-1];//从小到大顺序存储对象之间的距离

intentity[][]=newint[number-1][2];//每两个对象化为一类,共number-1类intdrop[]=newint[number-1];//每次聚类之后距离矩阵中划掉的行(列)数

drop[0]=number;

introw=number;//距离矩阵的行数,初始值为number.

for(inti=0;i<8;i++){

/**

*tRow和tCloumn作为中间变量来存储距离矩阵中最小值所在的行和列

*/

inttRow=0;

inttColumn=0;

doublemin=number+1;

for(intj=0;j

for(intk=0;k

if(distance[j][k]

min=distance[j][k];

tRow=j;

tColumn=k;

}

}

}

rate[i]=min;

entity[i][0]=tRow;

entity[i][1]=tColumn;

/**

*通过循环将对象还原为在初始距离矩阵中的位置

*/

if(i>0){

for(intj=i-1;!

(j<0);j--){

if(!

(entity[i][0]

entity[i][0]+=1;

if(!

(entity[i][1]

entity[i][1]+=1;

}

}

/**

*使输出结果符合我们的思维习惯,从1开始,而不是从0开始

*/

entity[i][0]+=1;

entity[i][1]+=1;

System.out.println(myformat.format(rate[i])+""+entity[i][0]

+""+entity[i][1]);

drop[i]=tRow;

if(row>1){

row-=1;

}

/**

*距离矩阵在划掉一行一列之后如何形成新的降阶矩阵

*/

if(drop[i]!

=row){

for(intm=0;m

for(intn=drop[i];n

distance[m][n]=distance[m][n+1];

}

}

for(intm=drop[i];m

for(intn=0;n

distance[m][n]=distance[m+1][n];

}

}

for(intm=drop[i];m

for(intn=drop[i];n

distance[m][n]=distance[m+1][n+1];

}

}

}

}

}

至此,我们完成了直接聚类算法的java代码实现。

消费结构是在一定的社会经济条件下,人们(包括各种不同类型的消费者和社会集团)在消费过程中所消费的各种不同类型的消费资料(包括劳务)的比例关系。

按照中华人民共和国统计局统计口径,构成城镇居民消费性支出的项目有:

食品、衣着、家庭设备用品及服务、医疗保健、交通和通信、教育文化娱乐服务、居住、杂项商品和服务,以上构成城镇居民消费性支出的八个项目即为所选指标。

以下数据来源于2007年中国统计年鉴,得到2006年的统计数据。

2006年各地区城镇居民家庭平均每人全年消费性支出 (单位:

元)

地区

食品

衣着

家庭设备用品及服务

医疗保健

交通和通信

教育文化娱乐服务

居住

杂项商品和服务

北京

天津

河北

山西

内蒙古

辽宁

吉林

黑龙江

上海

江苏

浙江

安徽

福建

江西

山东

河南

湖北

湖南

广东

广西

海南

重庆

四川

贵州

云南

西藏

陕西

甘肃

青海

宁夏

新疆

数据来源:

《中国统计年鉴2007》

应用上述java代码实现方法来处理该组数据,得到的分析结果如下:

聚类次数

差异度

省份

省份

1

新疆

河南

2

河南

黑龙江

3

湖北

安徽

4

贵州

江西

5

青海

甘肃

6

湖南

山东

7

宁夏

河北

8

陕西

四川

9

四川

江西

10

甘肃

黑龙江

11

黑龙江

山西

12

山西

河北

13

吉林

辽宁

14

云南

安徽

15

海南

广西

16

广西

江西

17

辽宁

河北

18

重庆

江苏

19

山东

内蒙古

20

江西

安徽

21

福建

江苏

22

西藏

安徽

23

安徽

河北

24

内蒙古

河北

25

广东

浙江

26

江苏

天津

27

上海

北京

28

浙江

北京

29

河北

天津

30

天津

北京

通过上面的分析,我们可以看出聚类的结果和实际情况是相似的,这就验证了此算法的可行性。

由于篇幅所限,中间处理结果,如分类要素的数据处理和各样本之间的距离等我们略去了。

直接聚类算法由于简单易行,我们可以用它来解决生活中的很多问题,对样本进行聚类,总结各类之间的异同,对于我们更好地做出决策起到辅助作用。

此文仅仅是谱系聚类算法中最简单的直接聚类法的java代码实现,后续还有很多工作要做,主要的方向为:

实现数据要素初始化和样本之间距离计算的其他方法。

加入类间距离的计算和应用。

在数据量很大的时候,如何优化算法,提高效率是否可以借鉴排序技术中二分法的思想来处理,这个问题还有待进一步研究。

[1]高惠璇.应用多元统计分析[M].北京:

北京大学出版社,2005.1

[2]何晓群.多元统计分析[M].北京:

中国人民大学出版社,2004

[3]国家统计局.中国统计年鉴[M].北京:

中国统计出版社.

[4]张文新信息资源管理课程讲义(内部资料)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2