《数据挖掘》实验报告1实验一分类技术及其应用实习要求:基于线性回归模型拟合一个班学生的学习成绩,建立预测模型。数据可由自己建立100个学生的学习成绩。1)算法思想:最小二乘法设经验方程是y=F(x),方程中含有一些待定系数an,给出真实值{(xi,yi)|i=1,2,...n},将这些x,y值代入方程然后作差,可以描述误差:yi-F(xi),为了考虑整体的误差,可以取平方和,之所以要平方是考虑到误差可正可负直接相加可以相互抵消,所以记误差为:e=∑(yi-F(xi))^2它是一个多元函数,有an共n个未知量,现在要求的是最小值。所以必然满足对各变量的偏导等于0,于是得到n个方程:de/da1=0de/da2=0...de/dan=0n个方程确定n个未知量为常量是理论上可以解出来的。用这种误差分析的方法进行回归方程的方法就是最小二乘法。线性回归如果经验方程是线性的,形如y=ax+b,就是线性回归。按上面的分析,误差函数为:e=∑(yi-axi-b)^2各偏导为:de/da=2∑(yi-axi-b)xi=0de/db=-2∑(yi-axi-b)=0于是得到关于a,b的线性方程组:(∑xi^2)a+(∑xi)b=∑yixi(∑xi)a+nb=∑yi设A=∑xi^2,B=∑xi,C=∑yixi,D=∑yi,则方程化为:Aa+Bb=CBa+nb=D《数据挖掘》实验报告2解出a,b得:a=(Cn-BD)/(An-BB)b=(AD-CB)/(An-BB)2)编程实现算法C++程序:#includeiostream#includemath.husingnamespacestd;voidmain(){doublex,y,A=0.0,B=0.0,C=0.0,D=0.0,delta,a,b;intn,sno,avgstudy;cout请拟合输入样本数目endl;cinn;for(inti=0;in;++i){cout请输入第i+1个学生学号endl;cinsno;cout请输入学生上自习时间,按照每天小时计算endl;cinx;cout请输入学生请输入平均成绩endl;ciny;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);couta=ab=bendl;if(fabs(delta)1e-10){cerrError!Dividebyzeroendl;}else{couta=((C*n-B*D)/delta)endlb=((A*D-C*B)/delta)endl;《数据挖掘》实验报告3}cout输入您想预测的成绩,先输入平均日自习时间(小时)endl;cinavgstudy;couta*avgstudy+b;}}3)输出运算结果输入是将各个同学的上自习的时间按照小时计算比如(4,85)(5,94),将成绩和上自习时间进行相应的线性回归,推导出相应的线型方程,以便今后对其他学生上自习以及成绩的估测。《数据挖掘》实验报告4实习二聚类技术及其应用实习题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,stopwhennomorenewassignment2)编程实现算法//***********引入库函数#includeiostream.h#includemath.h#includestdlib.h#includeiomanip.h#includetime.h#includefstream.h//*************定义常量constintTRUE=1;constintFALSE=0;constintMarkovLengh=10000;constintMaxInnerLoop=10000;constintMaxOuterLoop=60;constdoubleCO=0.1;constdoubleDeclineRate=0.95;constlongMAX=100000;constintAcceptRate=1;constdoubleForceDecline=0.9;//************定义全局变量《数据挖掘》实验报告5intDataNum;//聚类样本数目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;iDataNum;i++){for(j=0;jDimension;j++)DataSet[i*Dimension+j]=(((double)rand()/(double)RAND_MAX)*100);}}//*****************显示当前待聚类的样本(维数,个数,类别数等)voidGETDATA::Display(){inti,j;《数据挖掘》实验报告6cout当前样本集如下:endl{endl;for(i=0;iDataNum;i++){cout[;for(j=0;jDimension;j++){coutsetw(8)DataSet[i*Dimension+j];}cout];if((i+1)%Row==0)coutendl;}coutendl}endl;coutendl以上实数样本集由计算机在---100之间随机产,其中:endl;coutendl样本维数Dimension=Dimensionendl;cout样本数DataNum=DataNumendl;cout类别数K=Kendl;}//****************输入待聚类样本,包括维数,个数,类别数等voidGETDATA::Input(){charflag;inti,j;doubles=0;coutendl请依次输入:维数样本数目类别数endl;coutendl维数Dimension:;cinDimension;coutendl样本数目DataNum:;cinDataNum;coutendl类别数K:;cinK;coutendl随机生成数据输入R人工输入按B:endl;delete[]DataSet;DataSet=newdouble[Dimension*DataNum];cinflag;if(flag=='R'||flag=='r'){cout输入随机数生成范围(最小值和最大值):endl最小值:;cinrand1;coutendl最大值:;cinrand2;《数据挖掘》实验报告7for(i=0;iDataNum;i++){for(j=0;jDimension;j++)DataSet[i*Dimension+j]=FRand(rand1,rand2);}}elseif(flag=='H'||flag=='h'){for(i=0;iDataNum;i++){coutendl请输入第i+1个样本的Dimension个分量;for(j=0;jDimension;j++)cinDataSet[i*Dimension+j];}}elsecoutendl非法数据!;}//****************初始化聚类样本voidGETDATA::Initial(){charch;GETDATA::Display();coutendl重新录入样本输入A开始聚类B:;cinch;while(!(ch=='A'||ch=='a')&&!(ch=='B'||ch=='b')){coutendl重新录入样本输入A开始聚类B:;cinch;}if(ch=='A'||ch=='a')GETDATA::Input();}doubleGETDATA::FRand(doublerand1,doublerand2){returnrand1+(double)(((double)rand()/(double)RAND_MAX)*(rand2-rand1));}《数据挖掘》实验报告8//***********************************************************//类SSA:K-均值算法的实现***//功能:根据设定的K,DataNum,Dimension等聚类***//***********************************************************classSAA{public: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,Clu