文档介绍:数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
1 / 27
数据挖掘关于Kmeans算法的研究(含数据集)
浙江大学算法研究实验报告
数据挖掘
题目试,无问题,测试通过.
数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
5 / 27
数据挖掘关于Kmeans算法的研究(含数据集)
ﻬ
算法描述
KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,,直到簇心的移动距离小于某个给定的值。
K—Means聚类算法主要分为三个步骤:
(1)第一步是为待聚类的点寻找聚类中心
(2)第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去
(3)第三步是计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到要求为止
下图展示了对n个样本点进行K-means聚类的效果,这里k取2:
(a)未聚类的初始点集
(b)随机选取两个点作为聚类中心
(c)计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
(d)计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
(e)重复(c),计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
(f)重复(d),计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
6 / 27
数据挖掘关于Kmeans算法的研究(含数据集)
图4-1
数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
7 / 27
数据挖掘关于Kmeans算法的研究(含数据集)
算法实现
5.1主要数据结构描述
这里我建造了一个data的结构体,如下:
typedef vector<double〉 Tuple;//存储每条数据记录
struct data
{
ﻩstring s;// 存储关键词
ﻩTuple tup;// 存储属性信息
};
关键词
属性1
属性2
属性3
...
属性n
ﻩ ﻩﻩ ﻩﻩ图5—1
5.2核心代码与关键技术说明
5.
此函数用于计算两个元祖之间的距离,对于每个元祖的属性值,对于数值型的属性值(X1,X2,X3,Xi,Xn),我们用Yi代替Xi来进行归一化处理,其中Yi计算公式如下:
数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
8 / 27
数据挖掘关于Kmeans算法的研究(含数据集)
Yi=(Xi- Xmin)/(Xmax—Xmin)
对于序数型属性值(M1,M2,M3,Mi,Mn), 我们用Qi代替Mi进行归一化处理,其中Qi计算公式如下:
Qi=(Z(Qi)-1)/(Z(Total)-1)
其中Z(Qi)表示Qi属于的组数,Z(Total)表示总共的组数,他们的计算规则如下:
Z(Total)= k
Z(Qi)= Qi/(dataNum/k)+1
(其中dataNum为总数据量,K为总分组数。)
归一化处理之后,在计算两个元祖之间的欧式几何距离,具体实现代码如下:
double getDistXY(const data &t1, const data &t2)
{
ﻩdouble sum = 0,temp1=0,temp2=0,temp3=0,temp4=0;
int zuBase,zu1,zu2; //确定分组依据
ﻩzuBase=dataNum/k;
ﻩzu1=t1。tup[4]/zuBase+1;ﻩﻩﻩﻩ //确定分组
ﻩzu2=t2。tup[4]/zuBase+1;
ﻩtemp3=(zu1—1)/6;
if(temp3>1)
ﻩtemp3=1;
ﻩtemp4=(zu2-1)/6;
ﻩif(temp4>1)
temp4=1;//修正序数度量
数据挖掘关于Kmeans算法的研究(含数据集)
数据挖掘关于Kmeans算法的研究(含数据集)
9 / 27
数据挖掘关于Kmeans算法的研究(含数据集)