数据挖掘算法以及其实现免费Word文件下载.docx
- 文档编号:791788
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:39
- 大小:105.01KB
数据挖掘算法以及其实现免费Word文件下载.docx
《数据挖掘算法以及其实现免费Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据挖掘算法以及其实现免费Word文件下载.docx(39页珍藏版)》请在冰点文库上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 挖掘 算法 以及 实现 免费