机器学习——层次聚类(超详细).pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
机器学习——层次聚类 (超详细) 层次聚类 层次聚类 :层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中 层次聚类类型 :⾃下⽽上 (bottom-up)或称聚合(agglomerative)、⾃上⽽下(top-down)或称分裂 (divisive) 谨记 :层次聚类中每个样本只属于⼀个类,所以层次聚类属于硬聚类 (⼀般来说聚类分为硬聚类和软聚类,硬聚类明确 ⼀个样本只属于⼀ 个类,⽽软聚类的⼀个样本可以属于多个类) 聚合聚类 开始将每个样本各分到⼀个类,之后将距离相近的两类合并,建⽴⼀个新的类,重复此操作直到满⾜停⽌条件,得到层次化的类别 分裂聚类 开始将所有的样本分到⼀个类,之后将已有类中相距最远的样本分到两个新的类,重复此操作直到满⾜停⽌条件,得到层次化的类别 实际问题中多以聚合聚类为主,故本⽂仅研究聚合聚类算法. 聚合聚类三要素 : (1)距离或相似度 (可⽤闵可夫斯基距离、马哈拉诺⽐斯距离、相关系数、夹⾓余弦) ; (2)合并规则 (类间距离最⼩) ; (3)停⽌条件 (类的个数达到阈值) 聚合聚类算法 输⼊ :n个样本组成的样本集合及样本之间的距离; 输出:对样本集合的⼀个层次化聚类 (1)计算n个样本两两之间的欧⽒距离{dij },记作矩阵D=[dij ]n*n. (2)构造n个类,每个类只包含⼀个样本 (3)合并类间距离最⼩的两个类,其中最短距离为类间距离,构建⼀个新类 (4)计算新类与当前各类的距离 若类的个数为 1,终⽌计算,否则回到步 (3) 3 聚合层次聚类的时间复杂度是O(n m),其中m样本的维数,n是样本个数 举个例⼦,将26个字母随机分配了坐标(x,y) 假设 K=3 ,合并的步骤为 : (1)26个字母⾸先被分配成 26 个簇 (2)两两欧⽒距离最近的两个簇合并,此时簇变成了 13 个 (3)再次两两欧⽒距离最近的两个簇合并,此时⼀共有 12 个簇合并成了6个簇,还余下⼀个簇,因此此时剩下 6+ 1=7 个簇 (4)⼀直重复上⼀步的操作,直到簇的数量为 3 的时候,就算是分簇完成 相应python代码如下 : # !/ usr/bin/py thon3.4 # - *- coding : utf-8 - *- import random # ⽣成坐标字典 def buildclusters() : clusters = {} keys = [chr(i) for i in range(ord(A) ord(Z) + 1)] # [ A , B, , D, E, F , G, H, I, J , K, L , M , N , O, P, Q, R, S, T, U, V, W, X , Y, Z ] # ⽣成第 ⼀个分簇坐标 for i in range(0 9) : # A-I temp = {} x = random.randint(0 40) y = random.randint(0 40) temp[x] = x temp[y] = y clusters[keys[i]] = temp clusters[keys[i]] = temp # ⽣成第⼆个分簇坐标 for i in range(9 18) : # J-R temp = {} x = random.randint(60 100) y = random.randint(0 40) temp[x] = x temp[y] = y clusters[keys[i]] = temp # ⽣成第三个分簇坐标 for i in range(18 26) : # S-Z temp = {} x = random.randint(40 60) y = random.randint

文档评论(0)

135****0879 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档