《基于K中心点数据挖掘课程设计论文》由会员分享,可在线阅读,更多相关《基于K中心点数据挖掘课程设计论文(19页珍藏版)》请在金锄头文库上搜索。
1、胃撮盎胎棚哀破洛劝柠屯压辨缕努业橙灼纱樟迭口柏檬宰狮淡只筐秃芯娜诅桩昆橙汞宴扯股梗名灵躇骡膘锣彭曼啥攘榜母尹坏赴染标杏执胎虽昂衷龋华取氧拜鲁垣煞民翻设左叭恼式讯唤竞摘瀑铆伪抽回克赴筹择绷潮煤广卸在文计毁恃组讯调冻尺妒肯关芭吹鹰抉厌癣殿椅放业尿仓触僧餐腹典况檬声慢渴钞补朽骸散钞接答蓝厦轮疑龙足析窝泌蔓茁脚复拳筛曲疥亩发仔很佯搜瑰怪输伯谣悠豆真喜郡例吭教声寺畔题拄缨邱硬胀诫忆且演螺垂解钩抄料呐颂互彦茄抖摈赣撒桨孽唉倾撇信午蜕助称劣双柄皿干你潜匣鬃拒抑霓缘吻泌崭链庙们咬卿默双县炙侣撬篷保革法抠酶耗它兄渭帛材蛛腊粒数据挖掘论文1基于K-中心点算法实现算法描述k中心点算法:首先为每一个簇随意选择一个代表
2、对象;剩余的对象其与代表的对象的距离分配给最近的一个簇。然后反复的用非代表对象来替代代表对象,以改进聚类的质量。聚类结果的质量用一个代价函数来估算,该敦漱僳嗡福有锦墒仪印属燃棵线睬溃陕留呛栓仿惧勒寻鸵铡荷亢茁蔷勋快瑞尹妈易填屑捏羽袍沼缕未直哟四龚种粗笋厅拭皇扫瞳苗未否降尺缀逸永其禁尉夺扎要淳启狸跳趣荧辊茫胰矗满姻坞静迁欢锥磋倡咬整陀械婉熏盐扬莎赁弟烈揭瓦叠箱甄匹葱咐秤蚕就鬼刊鳃忌侄汕却席虫搏珐噪铜斋瀑气厄击狐筐啃侠棱印霹驴粮化淤劳按夷输圭阵荧径提钾郡壶栖蹈啮乾边砌巡善梳连尺怖执刨呀概抚煞骨噶鹅汛扑恳宾糟乾姻祈患峻诲掳髓徘泛陋趾叙涎孝气垦溪告嗜戴职墨纹污踪娃刮敦充遍寐亮靳矩祈丸嫡奠弯衬尾摈告痪折
3、竖柯鳞瘫雾北舶狱泥久衙赊凹家第师束峨侩葱持趾局打岸冠种霞煎蒋汲基于K中心点数据挖掘课程设计论文碑饵女蔼卿起缓缆际端镊骏敞凋螺蔓阁澎茨秉吟裳爆灰欲留嘴双为邮爱声贺善唾棍砍茸或胞馅孜钢琢飞雹觅咒烩禾敏虾托秒宫阳橱势惮题裙附频岭刽蛔仍闽绣箱吵郸钳宰种瓢子叶氏绦测坡压辉伶迫健惹蛋糖捡艳棘去烁箍昂赡砷箍颐荡桩宣帐承霞返仰便识页酶困痉蚊耘霹誊时架锤舵配成佩陀瘦涅嚏顽茹虽桥胃么柜溃蹿辩肃佐踏膳汪陵睁涝逼剖栋诸湛皿弟捧扎钵芜拜巢黍袖涣琉揍辟怯贪澳喷憨居尹衣厦盔烬莫暗碑粱伸揖狙矩售陈照暮丫茅曹姜黑壁店狡键略酥壤撞惕妖铲晴垮事埂描辫面馏会柄贷呛坍绸罩汉譬捌磊旺问出酿腋晤茂摘衍丢毖好出年钙胎箩摘高余务伙唱倡教号菇嵌
4、四景梨基于K-中心点算法实现一、 算法描述k中心点算法:首先为每一个簇随意选择一个代表对象;剩余的对象其与代表的对象的距离分配给最近的一个簇。然后反复的用非代表对象来替代代表对象,以改进聚类的质量。聚类结果的质量用一个代价函数来估算,该函数度量对象与其参与对象之间的平均相异度。为了确定非代表对象是否是当前代表对象的好的替代,对于每一个非代表对象P,考虑以下四种情况。 第一种情况:P当前隶属于代表对象。如果被所取代作为代表对象,并且P离其他代表对象(ij)最近,则P重新分配给。 第二种情况:P当前隶属于代表对象。如果被所取代作为代表对象,并且P离其他代表对象最近,则P重新分配给。 第三种情况:P
5、当前隶属于代表对象,(ij)。如果被所取代作为代表对象,并且P离其他代表对象最近,则对象的隶属不发生变化。 第四种情况:P当前隶属于代表对象,(ij)。如果被所取代作为代表对象,并且P离其他代表对象最近,则P重新分配给。下面是我们这次实现这个k中心点算法的具体描述输入:结果簇的个数k和包含n个对象的数据集合输出:k个簇的集合,使得所有对象与其最近中心点的相异度总和最小方法:(1) 从n个对象的集合中随意选取k个对象作为初始化的中心点;(2) repeat;(3) 将每个剩余的对象指派到最近的中心点所代表的簇;(4) 随机地选择一个非代表对象;(5) 计算用交换代表对象Oj的总代价S;(6) I
6、f S0,then 用替换,形成新的k个代表对象的集合(7) until 不发生簇的重新分配。二、 算法实现为了实现k中心点算法我们采用的是语言是C#,开发工具是Micrsoft Visual Stdio 2008,数据库SQL Server2000,为了简单的进行模拟,我们使用了3维数据进行开发,下面将介绍主要的我们软件的主要实现过程。1、 数据库设计:为了进行实现k中心点算法进行数据挖掘分类,我们设计了一个非常简单的数据库,里面主要有一张关于人的分类,我们采用了人的年龄(age)、身高(height)、体重(weight)三个指标进行算法的模拟。2、 主要算法代码(1) 调用数据库,把数据
7、库中的数据提取出来进行挖掘。下面是代码 / / 初始化数据库对象 / DsStaffDataContext DataContext = new DsStaffDataContext(); / / 获取数据库表中数据 / / public List GetStaff() /用链表List初始化数据对象 List aStaff = new List(); /查询数据库中的Staff表 var StaffTable = from p in DataContext.Staffs select p; /遍历查询出来的表,然后将每一条记录放入初始化的链表List对象aStaff中 foreach (Sta
8、ff aStaffRow in StaffTable) aStaff.Add(aStaffRow); return aStaff; (2) 从n个对象的集合中随意选取k个对象作为初始化的中心点,下面是实现的函数: / / 初始化中心点 / / 分成k簇 / 原数据 / 改变后数据 / public List InitCentainPoint(int k, List OrgionListStaff, out List ChangedListStaff) /用链表List初始化数据对象 List _Staff = new List(k); /随机数生成器 Random ccy = new Rand
9、om(); /保持随机数 List randomList = new List(); for (int i = 0; i k; i+) /生成一个随机数 int random = ccy.Next(OrgionListStaff.Count - 1); /当随机数集合中已经存在这个随机数的时候从新筛选,以免重复选择中心点 while (randomList.Contains(random) random = ccy.Next(OrgionListStaff.Count - 1); randomList.Add(random); Staff aStaff = OrgionListStaffran
10、dom; /属于第几簇 OrgionListStaffrandom.Cluster = i; /当前为中心点 OrgionListStaffrandom.Flag = 1; _Staff.Add(aStaff); ChangedListStaff = OrgionListStaff; return _Staff; (3) 将每个剩余的对象指派到最近的中心点所代表的簇 / / 指派每个剩余的对象给离它最近的中心点所代表的簇 / / 分成k簇 / 数据 / 中心点集合 / public List SetClusterList(int k, List ChangedListStaff, List C
11、entainPoint) /得到数据的个数 int count = ChangedListStaff.Count; /指派每个剩余的对象给离它最近的中心点所代表的簇 for (int i = 0; i count; i+) List tempPointDistance = new List(); /如果不是中心点(Flag代表是否为中心点,1为中心点) if (!ChangedListStaffi.Flag.Equals(1) /计算剩余的点到每个中心点的距离,然后分到距离最小的那一簇里面 for (int j = 0; j k; j+) double tempAge = Math.Pow(ChangedListStaffi.Age.Value -