数据挖掘算法以及其实现免费Word文件下载.docx

上传人:b****2 文档编号:791788 上传时间:2023-04-29 格式:DOCX 页数:39 大小:105.01KB
下载 相关 举报
数据挖掘算法以及其实现免费Word文件下载.docx_第1页
第1页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第2页
第2页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第3页
第3页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第4页
第4页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第5页
第5页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第6页
第6页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第7页
第7页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第8页
第8页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第9页
第9页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第10页
第10页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第11页
第11页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第12页
第12页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第13页
第13页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第14页
第14页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第15页
第15页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第16页
第16页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第17页
第17页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第18页
第18页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第19页
第19页 / 共39页
数据挖掘算法以及其实现免费Word文件下载.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据挖掘算法以及其实现免费Word文件下载.docx

《数据挖掘算法以及其实现免费Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据挖掘算法以及其实现免费Word文件下载.docx(39页珍藏版)》请在冰点文库上搜索。

数据挖掘算法以及其实现免费Word文件下载.docx

voidmain()

{

doublex,y,A=0.0,B=0.0,C=0.0,D=0.0,delta,a,b;

intn,sno,avgstudy;

cout<

<

"

请拟合输入样本数目"

endl;

cin>

>

n;

for(inti=0;

i<

++i)

{cout<

请输入第"

i+1<

个学生学号"

sno;

请输入学生上自习时间,按照每天小时计算"

x;

请输入学生请输入平均成绩"

y;

A+=x*x;

B+=x;

C+=x*y;

D+=y;

}

delta=A*n-B*B;

a=((C*n-B*D)/delta);

b=((A*D-C*B)/delta);

a="

a<

b="

b<

if(fabs(delta)<

1e-10)

{

cerr<

Error!

Dividebyzero"

else

((C*n-B*D)/delta)<

endl

<

((A*D-C*B)/delta)<

输入您想预测的成绩,先输入平均日自习时间(小时)"

avgstudy;

a*avgstudy+b;

}

3)输出运算结果

输入是将各个同学的上自习的时间按照小时计算

比如(4,85)(5,94),将成绩和上自习时间进行相应的线性回归

,推导出相应的线型方程,以便今后对其他学生上自习以及成绩的估测。

 

实习二聚类技术及其应用

实习题1编程验证单连接凝聚聚类算法,实验数据可使用第五章表5.2的数据进行。

要求输出层次聚类过程中每一步的聚类结果。

实习题2利用K-均值聚类算法对如下数据进行聚类,其中输入K=3,数据集为

{2,4,10,12,3,20,30,11,25,23,34,22}。

要求输出每个类及其中的元素。

1)算法基本思想的描述

Givenk,thek-meansalgorithmisimplementedinfoursteps:

–Partitionobjectsintoknonemptysubsets

–Computeseedpointsasthecentroidsoftheclustersofthecurrentpartition(thecentroidisthecenter,i.e.,meanpoint,ofthecluster)

–Assigneachobjecttotheclusterwiththenearestseedpoint

–GobacktoStep2,stopwhennomorenewassignment

//***********引入库函数

#include"

iostream.h"

math.h"

stdlib.h"

iomanip.h"

time.h"

fstream.h"

//*************定义常量

constintTRUE=1;

constintFALSE=0;

constintMarkovLengh=10000;

constintMaxInnerLoop=10000;

constintMaxOuterLoop=60;

constdoubleCO=0.1;

constdoubleDeclineRate=0.95;

constlongMAX=100000;

constintAcceptRate=1;

constdoubleForceDecline=0.9;

//************定义全局变量

intDataNum;

//聚类样本数目

intDimension;

//样本维数

intK;

//分类数

double*DataSet;

//指向浮点型的指针

intHALT=0;

intRow=3;

//***************************************************************

//类GETDATA:

设定全局变量,维数,样本数,和类别数等***

//随机生成样本或手工输入样本的类***

classGETDATA{

public:

GETDATA();

voidDisplay();

voidInitial();

voidInput();

doubleFRand(double,double);

doublerand1,rand2;

//随机数的高低值

};

GETDATA:

:

GETDATA()

inti,j;

Dimension=2;

DataNum=50;

K=4;

DataSet=newdouble[Dimension*DataNum];

for(i=0;

DataNum;

i++)

for(j=0;

j<

Dimension;

j++)

DataSet[i*Dimension+j]=(((double)rand()/(double)RAND_MAX)*100);

}

//*****************显示当前待聚类的样本(维数,个数,类别数等)

voidGETDATA:

Display()

当前样本集如下:

endl<

{"

["

;

"

setw(8)<

DataSet[i*Dimension+j];

]"

if((i+1)%Row==0)

}"

以上实数样本集由计算机在---100之间随机产,其中:

样本维数Dimension="

Dimension<

样本数DataNum="

DataNum<

类别数K="

K<

//****************输入待聚类样本,包括维数,个数,类别数等

Input()

charflag;

doubles=0;

请依次输入:

维数样本数目类别数"

维数Dimension:

样本数目DataNum:

类别数K:

K;

随机生成数据输入R人工输入按B:

delete[]DataSet;

flag;

if(flag=='

R'

||flag=='

r'

输入随机数生成范围(最小值和最大值):

最小值:

rand1;

最大值:

rand2;

DataSet[i*Dimension+j]=FRand(rand1,rand2);

else

H'

h'

请输入第"

个样本的"

个分量"

非法数据!

//****************初始化聚类样本

Initial()

charch;

GETDATA:

Display();

重新录入样本输入A开始聚类B:

ch;

while(!

(ch=='

A'

||ch=='

a'

)&

&

!

B'

b'

))

if(ch=='

Input();

doubleGETDATA:

FRand(doublerand1,doublerand2)

returnrand1+(double)(((double)rand()/(double)RAND_MAX)*(rand2-rand1));

//***********************************************************

//类SSA:

K-均值算法的实现***

//功能:

根据设定的K,DataNum,Dimension等聚类***

classSAA

structDataType

double*data;

intfather;

double*uncle;

};

structClusterType

double*center;

intsonnum;

SAA();

voidInitialize();

voidKMeans();

voidSA();

voidDisPlay();

voidGetDataset(DataType*p1,double*p2,intdatanum,intdim);

voidGetValue(double*str1,double*str2,intdim);

intFindFather(double*p,intk);

doubleSquareDistance(double*str1,double*str2,intdim);

intCompare(double*p1,double*p2,intdim);

voidNewCenterPlus(ClusterType*p1,intt,double*p2,intdim);

voidNewCenterReduce(ClusterType*p1,intt,double*p2,intdim);

doubleMaxFunc();

voidGenerate(DataType*p1,ClusterType*c1);

doubleCompare(DataType*p1,ClusterType*c1,DataType*p2,ClusterType*c2);

voidCopyStatus(DataType*p1,ClusterType*c1,DataType*p2,ClusterType*c2);

intSecondFather(DataType*p,intt,intk);

doubleAimFunction(DataType*q,ClusterType*c);

doubleFRand(double,double);

voidKMeans1();

protected:

doubleTemp;

//doubleCO;

//doubleDeclineRate;

//intMarkovLengh;

//intMaxInnerLoop;

//intMaxOuterLoop;

doubleAimFunc;

DataType*DataMember,*KResult,*CurrentStatus,*NewStatus;

ClusterType*ClusterMember,*NewCluster,*CurrentCluster;

//endofclassSAA

//************建立构造函数,初始化保护成员

SAA:

SAA()

inti;

//DeclineRate=(double)0.9;

//MarkovLengh=1000;

//MaxInnerLoop=200;

//MaxOuterLoop=10;

//CO=1;

DataMember=newDataType[DataNum];

ClusterMember=newClusterType[K];

DataMember[i].data=newdouble[Dimension];

DataMember[i].uncle=newdouble[K];

ClusterMember[i].center=newdouble[Dimension];

GetDataset(DataMember,DataSet,DataNum,Dimension);

}//endSAA

//****************初始化参数,及开始搜索状态

voidSAA:

Initialize()

//K-均值聚类法建立退火聚类的初始状态

//KMeans();

//*******************k-均值法进行聚类

//************接口:

数据,数量,维数,类别

//逐点聚类方式

KMeans()

inti,j,M=1;

intpa,pb,fa;

ClusterType*OldCluster;

//初始化聚类中心

OldCluster=newClusterType[K];

//cout<

中心:

GetValue(ClusterMember[i].center,DataMember[i].data,Dimension);

ClusterMember[i].sonnum=1;

OldCluster[i].center=newdouble[Dimension];

GetValue(OldCluster[i].center,ClusterMember[i].center,Dimension);

i++)

ClusterMember[0].center[0]<

ClusterMember[1].center[0]<

son:

ClusterMember[0].sonnum;

DataMember[i].uncle[j]=SquareDistance(DataMember[i].data,ClusterMember[j].center,Dimension);

->

j+1<

DataMember[i].uncle[j];

//"

类中心"

ClusterMember[j].center[0]<

DataMember[i].uncle[j]<

pa=DataMember[i].father=FindFather(DataMember[i].uncle,K);

if(i>

=K)

pa<

类样本数:

ClusterMember[pa].sonnum;

ClusterMember[pa].sonnum+=1;

NewCenterPlus(ClusterMember,pa,DataMember[i].data,Dimension);

pa+1<

类:

ClusterMember[pa].center[0];

GetValue(OldCluster[pa].center,ClusterMember[pa].center,Dimension);

}

//开始聚类,直到聚类中心不再发生变化。

×

逐个修改法×

HALT)

//一次聚类循环:

.重新归类;

.修改类中心

D"

DataMember[i].data[0]<

ClusterMember[0l].center[0]<

:

DataMember[i].uncle[0]<

fa=DataMember[i].father;

if(fa!

=FindFather(DataMember[i].uncle,K)&

ClusterMember[fa].sonnum>

1)

pa=DataMember[i].father;

ClusterMember[pa].sonnum-=1;

pb=DataMember[i].father=FindFather(DataMember[i].uncle,K);

ClusterMember[pb].sonnum+=1;

NewCenterReduce(ClusterMember,pa,DataMember[i].data,Dimension);

NewCenterPlus(ClusterMember,pb,DataMember[i].data,Dimension);

/*cout<

*********************"

M<

次聚类:

*****************"

//聚一次类输出一次结果

in"

类->

pb+1<

类:

for(t=0;

t<

t++)

第"

t+1<

类中心:

ClusterMember[t].center[0]<

样本个数:

ClusterMember[t].sonnum;

DisPlay();

M=M+1;

*/

}//endfor

//判断聚类是否完成,HALT=1,停止聚类

HALT=0;

if(Compare(OldCluster[j].center,ClusterMember[j].center,Dimension))

break;

if(j==K)

HALT=1;

GetValue(OldCluster[j].center,ClusterMember[j].center,Dimension);

}//endwhile

}//endofKMeans

//批聚类方式

KMeans1()

GetValue(OldClust

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

当前位置:首页 > 解决方案 > 学习计划

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

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