你好,游客 登录
背景:
阅读新闻

R语言与数据分析之四:聚类算法1

[日期:2014-12-12] 来源:CSDN博客  作者:HowardGe [字体: ]

    前面和大家分享的分类算法属于有监督学习的分类算法,今天继续和小伙伴们分享无监督学习分类算法---聚类算法。聚类算法也因此更具有大数据挖掘的味道大笑,话不多说,先贴张图,让大家对聚类有个大概的印象:

 

    上图可明显看出店群被分为3个组(类),接下来让我们来瞧瞧聚类是啥玩意得意

    聚类算法本质上是基于几何距离远近为标准的算法,最适合数据是球形的问题,首先罗列下常用的距离:

    绝对值距离(又称棋盘距离或城市街区距离)

    Euclide距离(欧几里德距离,通用距离)

    Minkowski 距离(闵可夫斯基距离),欧几里德距离 (q=2)、绝对值距离(q=1)和切比雪夫距离(q=无穷大),这些都是闵可夫斯基的特殊情况。

    Chebyshew(切比雪夫)距离

    Mahalanobis距离(咱们前面介绍的马氏距离,这里复习一下奋斗

    Lance 和Wiliams距离

    定性变量距离(二进制距离):

    其中m1为所有项目中1-1配对的总数,m2是不配对的总数

    R语言中,对上述的距离都有现成函数,只需要借参数加以制定即可,具体如下:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. dist(x,method=”euclidean”,diag=FALSE,upper=FALSE,p=2) #欧式距离 
  2. dist(x,method=”maximum” ,diag=FALSE,upper=FALSE,p=2)#切比雪夫距离 
  3. dist(x,method=”manhattan” ,diag=FALSE,upper=FALSE,p=2)#绝对值距离 
  4. dist(x,method=”canberra”, diag=FALSE,upper=FALSE,p=2)#Lance距离; 
  5. dist(x,method=”binary” ,diag=FALSE,upper=FALSE,p=2)#d定性变量距离 

 

    讲完距离后,需要对原始数据进行相应的处理,否则数据规模的差异会被算法误认为属性权重值而影响最终的聚类效果。我们需要进行数据的中心化和标准化 转换。中心化即让所有的数据都已0为中心点,常用的标准化的做法是将数据看作正态分布,只需要将数据除以标准差即可到达标准化作用。数据中心化和标准化 后,各个变量的取值大小相接近,这样各个变量都平等的发挥决策作用。

    R语言中提供了相应的函数:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Scale(x,center=TRUE,scale=TRUE) 

    接下来先介绍最古老的聚类算法——层次聚类法

    思想:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Step1:每个样本各自作为一类; 
  2. Step2:计算类之间的距离; 
  3. Step3:将距离最短的两个类合并为一个新类; 
  4. Step4:重复2-3步,即不断合并最近的两个类,每次减少一个类,直至所有样本被合并为一类; 

    接下来介绍下类间距离:

    最短距离法:两个类中所有点距离中的最小值;

    最长距离法:两个类中所有点距离中的最大值;

    中间距离法:取介于最小值和最大值两者间的距离;

    类平均法:取所有距离的评价值;

    重心法:类重心(均值)之间的距离;

    离差平法和法:各项与评价项之差的平方的总和;

    R提供了hclust()函数做层次聚类方法,下面举个简单的例子来说明下用法:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. x<-c(1,2,6,8,11) 
  2. dim(x)<-c(5,1) 
  3. d<-dist(x) 
  4. hc1<-hclust(d,"single")#最短距离法 
  5. hc2<-hclust(d,"complete")#最长距离法 
  6. hc3<-hclust(d,"median")#中间距离法 
  7. hc4<-hclust(d,"ward")#离差平方和法 
  8. cpar<-par(mfrow=c(2,2)) 
  9. plot(hc1,hang=-1) 
  10. plot(hc2,hang=-1) 
  11. plot(hc3,hang=-1) 
  12. plot(hc4,hang=-1) 
  13. par(cpar) 
  14. rect.hclust(hc1,k=2)#人工辅助告诉R分为几大类 

    结果见下图:其中的哦第一板块的红色划分认为告诉R需要分几类后,R自动画出分类的展示:



今天先和小伙伴分享到这里啦,下篇继续得意

原文链接:http://blog.csdn.net/howardge/article/details/41847445





收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款