数据挖掘论文 double randomTempAge= Math. Pow (randomAge-cluserRow Age Value, 2) double random TempHeight Math Pow (randomHeight cluserRow. Height Value, 2) double randomTempWeight Math Pow (randomWeight Value, 2) double randomDistance Math Sart (random TempAge randomTempHeight randomTempWeight) orgCount + orgDistance: randomCount + randomDistance //得到交换后它们的代价 sub randomCount - orgCount (5)核心函数k中心点算法函数体内调用了上面的函数 7//<summary> ///k中心点算法 7//</summary) //< param name="k">分成k簇</ param> //< param name=" OrgionListstaff">原数据</ param> /// <returns></returns public List<Staff> K method (int k, List<Staff> OrgionListStaff) /初始化总代价 double s =0 //判断是否所有的中心点不在变化标志 bool Changed true /初始化一个随机数生成器 Random ccy new Random o //得到所有数据的个数 int count OrgionListStaff Count //初始化整个数据变化后保存的链表集合 List<Staff> ChangedListStaff new List<Staff>o //初始化k个中心点保存链表集合 List<staff> CentainPoint this InitCentainPoint(k, OrgionListStaff ChangedListStaff) while(Changed) //指派每个剩余的对象给离它最近的中心点所代表的簇 ChangedListStaff this. SetClusterList(k, OrgionListStaff CentainPoint //得到原始的中心点集合 List<staff> firstCentainPoint CentainPoint 6
数据挖掘论文 6 double randomTempAge = Math.Pow(randomAge - cluserRow.Age.Value, 2); double randomTempHeight = Math.Pow(randomHeight - cluserRow.Height.Value, 2); double randomTempWeight = Math.Pow(randomWeight - cluserRow.Weight.Value, 2); double randomDistance = Math.Sqrt(randomTempAge + randomTempHeight + randomTempWeight); orgCount += orgDistance; randomCount += randomDistance; } //得到交换后它们的代价 sub = randomCount - orgCount; return sub; } (5) 核心函数 k 中心点算法(函数体内调用了上面的函数) /// <summary> /// k中心点算法 /// </summary> /// <param name="k">分成k簇</param> /// <param name="OrgionListStaff">原数据</param> /// <returns></returns> public List<Staff> K_method(int k, List<Staff> OrgionListStaff) { //初始化总代价 double s = 0; //判断是否所有的中心点不在变化标志 bool Changed = true; //初始化一个随机数生成器 Random ccy = new Random(); //得到所有数据的个数 int count = OrgionListStaff.Count; //初始化整个数据变化后保存的链表集合 List<Staff> ChangedListStaff = new List<Staff>(); //初始化k个中心点保存链表集合 List<Staff> CentainPoint = this.InitCentainPoint(k, OrgionListStaff, out ChangedListStaff); while (Changed) { //指派每个剩余的对象给离它最近的中心点所代表的簇 ChangedListStaff = this.SetClusterList(k, OrgionListStaff, CentainPoint); //得到原始的中心点集合 List<Staff> FirstCentainPoint = CentainPoint;
数据挖掘论文 for (int j=0; j< k: j++) /得到一个随机数 int random ccy. Next(count- 1) //如果这个数据是中心点,重新得到一个新的随机数(Flag是中心点标志 while(ChangedListStaff [random]. Flag. Equals (1)) random ccy. Next(count-1) random f (random ==0) random //得到交换中心点的总代价 s= this Gets(random, j, ChangedListStaff) /如果总代价<0 //将 Random换成新的中心点 ChangedListStaff [random]. Flag =1 //原中心点在数据的位置 int OjIndex= ChangedListStaff. IndexOf( CentainPoint [j]) //把以前的中心点变成普通点 ChangedListStaff [OjIndex] Flag =0 CentainPoint [j] ChangedListStaff[random] /如果经过循环后所有中心点中心点都保持不变,循环结束 f(FirstCentainPoint Equals(CentainPoint)) // Changed为 false后循环结束 Changed fal // Changed为true后循环继续 Changed true return Changedliststaff
数据挖掘论文 7 for (int j = 0; j < k; j++) { //得到一个随机数 int random = ccy.Next(count - 1); //如果这个数据是中心点,重新得到一个新的随机数(Flag是中心点标志) while (ChangedListStaff[random].Flag.Equals(1)) { random = ccy.Next(count - 1); if (random == count - 1) { random -= 1; } if (random == 0) { random += 1; } } //得到交换中心点的总代价 s = this.GetS(random,j, ChangedListStaff); //如果总代价 < 0 if (s < 0) { //将Orandom换成新的中心点 ChangedListStaff[random].Flag = 1; //原中心点在数据的位置 int OjIndex = ChangedListStaff.IndexOf(CentainPoint[j]); //把以前的中心点变成普通点 ChangedListStaff[OjIndex].Flag = 0; CentainPoint[j] = ChangedListStaff[random]; } } //如果经过循环后所有中心点中心点都保持不变,循环结束 if (FirstCentainPoint.Equals(CentainPoint)) { //Changed为false后循环结束 Changed = false; } else { //Changed为true后循环继续 Changed = true; } } return ChangedListStaff;