数据挖掘课程设计docx.docx
《数据挖掘课程设计docx.docx》由会员分享,可在线阅读,更多相关《数据挖掘课程设计docx.docx(9页珍藏版)》请在冰豆网上搜索。
![数据挖掘课程设计docx.docx](https://file1.bdocx.com/fileroot1/2022-12/1/2d2f6eeb-815b-463b-8266-140daa135b8e/2d2f6eeb-815b-463b-8266-140daa135b8e1.gif)
数据挖掘课程设计docx
【数据挖掘课程设计】
-—3-4-5规则划分
一实验目的3
二实验内容3
三实验要求3
四实验准备3
五实验步骤4
六功能代码5
七实验结果9
八实验心得10
—.实验目的
1.加强对3-4-5规则划分算法的了解
2.加强对Java语言的理解与动手操作能力
3.进一步熟悉eclipse环境。
2.实验内容
3-4-5规则介绍
3-4-5规则可以用来将数值数据分割成相对一致,看上去自然的区间。
一般,该规则根据最高有效位的取值范围,递归逐层地将给定的数据区域划分成3,4或5个相对等宽的区间。
我们将用一个例子解释这个规则的用法。
规则如下:
如果一个区间在最高有效位包含3,6,7或9个不同的值,则将该区间划分为3个区间(对3,6,9,划分为3个等宽的区间;对于7,按2-3-2分组,划分成3个区间)。
如果在最高位包含2,4,8个不同的值,则将区间划分为4个等宽的区间。
如果在最高有效位包含1,5,10个不同的值,则将区间划分成5个等宽的区间。
该规则可以递归地用于每个区间,为给定的数值属性创建概念分层。
3.实验要求
用Java语言实现3-4-5规则划分算法。
4.实验准备
1.了解3-4-5规则划分的具体过程
2.具体详细的算法模块用什么方法实现分析
3.对总体进行可行性的研究
4.具体的编程实现3-4-5规则划分
5.算法优点缺点
优点:
可以将数据分割成相对一致、看上去自然的区间
缺点:
需要自己确定数据来开始分割,要有一定数据分析能力
5.实验步骤
Couni
MIN
LOU-
HIGH
MAX
.95th
Step2
mx41,000.000LOW$1,000,000HKHI12.000.000
Strfi5
f$1.000.000..J.XOOO.OOOI
i-$1.000^000.SO)(SO...SI.OOOJDOO)($1JMXJ.OOO..SXOOGXXX)J
S(r>t4
I-S400.000.S5XXJO.OOOI
.000.000.-$2.000.0001gOOCMJOOSSJMJO.OOOI
4MOO.QOC*.0]<-5400.000_iW.OCOl
「$300X)00…$200.000]<-S200.00Q…$100.0001.-$1OO.HD<>:
..
SOI
($0..
S200.0001
仔ixwoao..
11200.005
S4O0.0G0J
f$400.000...
$600.000]t$600.«XX).
SSOOXMM)|■佔,rwvr$1.000.0001
4SL2OO.OOO..$]<400.000]($I/IOOjOOO$1X500.000]<$1.600.000.:
$14)00X)001i$LMiX..OfrV|$2.600jD00|
(53-000,000..$3.000.000|
($3.000.000
S4.COOXOOJ<54.000.000S5.0G0.0001
6.功能代码
1.自定义数据的low和high的值为以后做准备
packagezhj;
publicclassData{
privateintlow;
privateinthigh;
publicData(intlow,inthigh){
this・low=low;
this・high=high;
}
publicStringtoStirngOV
returnH(n+low+n,n+high+n]n;
}
publicintgetHigh(){
returnhigh;
}
publicvoidsetHigh(inthigh){
this.high=high;
}
publicintgetLow(){
returnlow;
}
publicvoidsetLow(intlow){this.low=low;
}
}
2.基本功能代码
importjava.util・ArrayList;
publicclassprivateint
MyDatamin;
{
private
int
max;
private
int
low=
-159867;
private
int
high=
1838761;
private
int
msd;
private
int
lowl;
private
int
highl;
privateArrayLisData>a=newArrayList();//区间的存储publicMyDantmin,intmax){
this.min=min;
this.max=max;
this・msd=(int)(Math・pow(10,(””+max)・length()-1));
this・lowl=-msd;
this.highl=(Integer.parsGlnt((high+””)・substring(0,1))+
1)*msd;
a.add(newData(lowlzhighl));
}
publicvoidthree(){//第三步
ArrayListal=newArrayList();
al・add(a.get(0));
a.removeAll(a);//清空
inttemp=ml.get(0).getLow();
for(inti=0;itemp+=msd;
//System.out・printin(ntemp=u+temp);
if(temp>al・get(0)・getHigh()){
temp-=msd;
temp+=msd/10;
}
a.add(newData(al・get(0).getLow()+temp,temp));
}
}
publicvoidfour(){//第四步
intlows=-(int)((Integer.parselnt((min+””)・substring(1,
2))+1)*Math
・pow(10,(min+””)・length()-1));
inthighs=(int)((Tnteger.pmrselnt((max+””).substring(0,1))+1)*Math
・pow(10,(max+””).length()一1));
a・remove(0);
a.add(0,newData(lows,0));
a.add(newData(a.get
(2).getHigh(),highs));
}
publicvoidfinall(){//第五步
ArrayListal=newArrayList();//复制前——个区间集
for(inti=0;ial・add(a・get(i));
}
a.removeAll(a);//清空区间
for(inti=0;igetInt(count(al.get(i)),al・get(i));
}
//if(!
isTrue()){//迭代
//finall();
//System.out.printin(this・printA());
//}
}
publicbooleanisTrue(){//停止迭代的条件
for(inti=0;iif((a.get(i).getHigh()-a.get(i).getLow())<100000){
returntrue;
returnfalse;
}
publicvoidgetlnt(intk,Datad){//通过传进要划分的区间和将要划分为k个区间
intx=(d.getHigh()-d.getLow())/k;//区I'可的步长
for(inti=0;ia.add(newData(d.getLow()+i*x,d.getLow()+(i+1)*
x));//把最后一层的区间添加到区间列表
}
publicintcount(Datad){//返回下一个分区间的大小intm=-1;
switch(counts(d)){
case1:
case5:
case10:
m=5;
break;
case3:
case6:
case9:
m=3;
break;
case2:
case4:
case8:
m=4;
break;
default:
//System.out・printin("default!
”);
break;
}
returnm;
}
publicintcounts(Datad){//计算1-10合法intk;
k=(d.getHigh()-d・getLow())/msd;if(k<=10){
returnk;
}else{
k=10*(d・getHigh()-d.getLow())/msd;
}
returnk;
}
publicStringtoString(){
return”相关数据:
\nn+nmin=n+min+n\nmax=H+max+n\nlow=H+low
+,,\nhigh=n+high+H\nmsd=n+msd+n\nlowl=n+lowl
+n\nhighl=H+highl+»\n**************H;
}
publicArrayLisgetA(){
returna;
}
publicvoidsetA(ArrayListthis・m=a;
}
publicStringprintA(){
Stringstr=”划分后的区间:
\nn;
for(inti=0;i<3・size();i++){
str+=a.get(i)・toStirng()+H\n";
}
returnstr;
}
publicstaticvoidmain(String[]args){
MyDam=newMyDa(-351976,4700896);
System.out.print丄n(m);
System.out・println(m・printA());
m.three();
System.out・println(m・printA());
m.four();
System.out・println(m・printA());
m.finall();
System.out・println(m・printA());
m.finall();
System.out.printin(m.printA());
}
}
7.实验结果
相关数据:
min=-351976max=4700896low=-159867high=1838761msd=1000000lowl=-1000000highl=2000000*★*★*★*★*★★★★★划分后的区间:
(-1000000,2000000]
划分后的区间:
(-1000000,0](0,1000000]
(1000000,2000000]
划分后的区间:
(-4000000,0](0,1000000]
(1000000,2000000]
(2000000.5000000]
划分后的区间:
(-4000000,-3000000](-3000000,-2000000](-2000000,-1000000](-1000000,0](0,200000]
(200000,400000](400000,600000)(600000,800000](800000,1000000](1000000,1200000](1200000,1400000](1400000,1600000](1600000,1800000]
(1800000,2000000](2000000,3000000](3000000,4000000]
(4000000.5000000]
A.实验心得
通过此次课程设计,加强了对3-4-5规则划分的理解,也是自己的动手能力有所提高。
但是也让我发现了自己很多的不足之处,在JAVA编码的能力上还有待提高,希望以后能多有这样的课设让自己的能力可以提高。
这一次的课程设计编码阶段有儿个同学给了我很大的帮助,也让我知道了团队协作能大大的提高工作效率,所以我也希望以后能有一些团队形式的锻炼。
总之这次课设让我学会了很多东西,对我有了许多的启发。