logo资料库

信息检索实验报告.doc

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
信息检索参考报告 年级:2010 级 院系:计算机学院 专业:10 级软件工程 姓名:罗杰 学号:201010804029 指导老师:柳翠寅
摘要 k均值算法是聚类方法中常用方法,有很多优点,但也存在不足之处, 它对球状、凸形分布的数据具有很好的聚类效果,但对样本的输入顺 序敏感,可能产生局部最优解,而且受孤立点影响比较大。本文针对 这些不足之处,主要从数据预处理。初始聚类中心的选择和迭代过程 聚类种子计算三方面进行改进,并做了改进前后算法的对比实验。结 果表明,改进后的算法比原k均值算法具有更高的准确性,受孤立点 的影响也大大降低。 (一)课题名称:K-均值聚类(K-means clustering) (二)课题分析: K-均值聚类(K-means clustering)是 Mac Queen 提出的一种非监 督实时聚类算法,在最小化误差函数的基础上将数据划分为预定的类 数 K。该算法原理简单并便于处理大量数据,在基因表达数据分析中 得到广泛应用,如 Tavazoie 等应用 K-means 聚类酵母细胞周期表达 数据。在 K-means 算法运行前必须先指定聚类数目 K 和迭代次数或收 敛条 件,并指定 K 个初始聚类中心,根据一定的相似性度量准则, 将每一条基因分配到最近或“相似”的聚类中心,形成类,然后以每 一类的平均矢量作为这一类的聚类 中心,重新分配,反复迭代直到 类收敛或达到最大的迭代次数。 K-means 聚类算法对初始聚类中心依赖性比较大,随机选取初始 聚类中心的缺点是如果使得初始聚类中心得到的分类严重偏离全局 最优分类,这样算法可能会 陷入局部最优值。而且当聚类数比较大 的时候,这种缺点更为明显,往往要经过多次聚类才有可能达到较满 意的结果。Yeung 等提出了采用均连接层次聚类结果 初始化 K-means 聚类中心。此方法有效地排除了随机初始化过程中引入的随机性因 素,使得算法成为确定性的,可以得到稳定的聚类结果;而且,这种 初始化 方式也能够利用数据中的类结构信息,使得聚类质量相对于 随机初始化时的平均质量有显著的提高。
(三)总体检索思路: 利用 goole,baidu 等搜索引擎及校内的一些数据库进行相关内容的 检索。主要检索内容为 K-均值聚类算法的步骤,应用,前景,代码。 (四)检索过程记录: 关键词:K-均值聚类算法 搜索引擎:百度 检索内容:①K-均值聚类算法原理 ②K-均值聚类算法的应用 ③K-均值聚类算法的前景 中文数据库检索:中国知网(http://www.cnki.net/),维普期刊网。 检索年限:2010-2011 年 学科范围:信息技术 检索词:K-均值聚类算法 检出文献总数:40 (五)检索结果分析: 1. K-均值聚类算法的应用: K-均值聚类算法的应用十分广泛,遍布各个领域,其中一些应用如, 基因优化,彩色图像有意义区域的提取,多种群协同进化等。 2.K-means 聚类算法的一般步骤: 原k均值算法伪代码如下: 输入:聚类个数k,以及包含n个数据对象的数据样本集; 随机选取k个对象,初始化k个聚类中心; 设置迭代计数器t=O; while(r≠o1 把样本点分到距离最近的聚类中心所代表的簇内; 计算聚类目标函数J(11; r=J(t)-J(t-1);
重新计算各个聚类中心; t=t+l 输出聚类中心。 3.K-均值聚类算法代码: //***********引入库函数 #include "iostream.h" #include "math.h" #include "stdlib.h" #include "iomanip.h" #include "time.h" #include "fstream.h" //*************定义常量 const int TRUE=1; const int FALSE=0; const int MarkovLengh=10000; const int MaxInnerLoop=10000; const int MaxOuterLoop=60; const double CO=0.1; const double DeclineRate=0.95; const long MAX=100000; const int AcceptRate=1; const double ForceDecline=0.9; //************定义全局变量 int DataNum; int Dimension; int K; double *DataSet; int HALT=0; int Row=3; //*************************************************************** *** // 类 GETDATA: 设定全局变量,维数,样本数,和类别数等 // *** //*************************************************************** class GETDATA{ public: //聚类样本数目 //样本维数 //分类数 //指向浮点型的指针 随机生成样本或手工输入样本的类 GETDATA(); void Display(); void Initial(); void Input(); double FRand(double,double); double rand1,rand2; //随机数的高低值
}; GETDATA::GETDATA() { int i,j; Dimension=2; DataNum=50; K=4; DataSet=new double[Dimension*DataNum]; for(i=0;i>Dimension; cout<>DataNum; cout<>K; cout<>flag; if(flag=='R'||flag=='r') { cout<<" 输入随机数生成范围(最小值和最大值):" "<>DataSet[i*Dimension+j]; } } else cout<>rand1; cout<>rand2; for(i=0;i
{ } char ch; GETDATA::Display(); cout<>ch; while(!(ch=='A'||ch=='a')&&!(ch=='B'||ch=='b')) { cout<>ch; } if(ch=='A'||ch=='a') GETDATA::Input(); rand1+(double)(((double)rand()/(double)RAND_MAX)*(rand2-rand1)); K-均值算法的实现 功能:根据设定的 K,DataNum,Dimension 等聚类 } //*********************************************************** // 类 SSA: *** // *** //*********************************************************** class SAA { public: double GETDATA::FRand(double rand1,double rand2) { return struct DataType { double *data; int father; double *uncle; }; struct ClusterType { double *center; int sonnum; }; SAA(); void Initialize(); void KMeans(); void SA( ); void DisPlay();
void GetDataset(DataType *p1,double *p2,int datanum,int dim); void GetValue(double *str1,double *str2,int dim); int FindFather(double *p,int k); double SquareDistance(double *str1,double *str2,int dim); int Compare(double *p1,double *p2,int dim); void NewCenterPlus(ClusterType *p1,int t,double *p2,int dim); void NewCenterReduce(ClusterType *p1,int t,double *p2,int dim); double MaxFunc(); void Generate(DataType *p1,ClusterType *c1); double Compare(DataType *p1,ClusterType *c1,DataType *p2,ClusterType void CopyStatus(DataType *p1,ClusterType *c1,DataType *p2,ClusterType *c2); *c2); int SecondFather(DataType *p,int t,int k); double AimFunction(DataType *q,ClusterType *c); double FRand(double ,double); void KMeans1(); protected: double Temp; //double CO; //double DeclineRate; //int MarkovLengh; //int MaxInnerLoop; //int MaxOuterLoop; double AimFunc; DataType *DataMember, *KResult,*CurrentStatus,*NewStatus; ClusterType * ClusterMember,*NewCluster,*CurrentCluster; }; //end of class SAA //************建立构造函数,初始化保护成员 SAA::SAA() { int i; // DeclineRate=(double)0.9; // MarkovLengh=1000; // MaxInnerLoop=200; // MaxOuterLoop=10; // CO=1; DataMember=new DataType[DataNum]; ClusterMember=new ClusterType[K]; for(i=0;i
分享到:
收藏