首先我们要解决几个问题

聚类算法主要包括哪些算法?

主要包括:K-means、DBSCAN、Density Peaks聚类(局部密度聚类)、层次聚类、谱聚类。

什么是无监督学习?

• 无监督学习也是相对于有监督学习来说的,因为现实中遇到的大部分数据都是未标记的样本,要想通过有监督的学习就需要事先人为标注好样本标签,这个成本消耗、过程用时都很巨大,所以无监督学习就是使用无标签的样本找寻数据规律的一种方法

• 聚类算法就归属于机器学习领域下的无监督学习方法。 无监督学习的目的是什么呢?

• 可以从庞大的样本集合中选出一些具有代表性的样本子集加以标注,再用于有监督学习

• 可以从无类别信息情况下,寻找表达样本集具有的特征

R中有哪些无监督学习的包?


# 需要用到的数据集和包
library(readr)
library(dplyr)
library(ggplot2)

我们有的数据集是kaggle中的pokemon dataset

# 简单查看一下数据
pokemon_raw = read_csv('Pokemon.csv')
head(pokemon_raw)
## # A tibble: 6 x 13
##     `#`                  Name `Type 1` `Type 2` Total    HP Attack Defense
##   <int>                 <chr>    <chr>    <chr> <int> <int>  <int>   <int>
## 1     1             Bulbasaur    Grass   Poison   318    45     49      49
## 2     2               Ivysaur    Grass   Poison   405    60     62      63
## 3     3              Venusaur    Grass   Poison   525    80     82      83
## 4     3 VenusaurMega Venusaur    Grass   Poison   625    80    100     123
## 5     4            Charmander     Fire     <NA>   309    39     52      43
## 6     5            Charmeleon     Fire     <NA>   405    58     64      58
## # ... with 5 more variables: `Sp. Atk` <int>, `Sp. Def` <int>,
## #   Speed <int>, Generation <int>, Legendary <chr>
# 只选择连续型变数来做聚类
pokemon = pokemon_raw %>% select(6:11)
head(pokemon)
## # A tibble: 6 x 6
##      HP Attack Defense `Sp. Atk` `Sp. Def` Speed
##   <int>  <int>   <int>     <int>     <int> <int>
## 1    45     49      49        65        65    45
## 2    60     62      63        80        80    60
## 3    80     82      83       100       100    80
## 4    80    100     123       122       120    80
## 5    39     52      43        60        50    65
## 6    58     64      58        80        65    80

k-means

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

优点:1.有效率且不容易受到初始值的影响。

缺点:1.不能处理非球形簇;2.不能处理不同尺寸,不懂密度的簇;3.离群值会有较大干扰(一定要在预处理时剔除掉

R 内置了一个函数kmeans可以用做聚类分析 kmeans中第一个参数是dataset。centers是中心点选择参数,表示聚成几类。iter.max是迭代次数的参数,即迭代次数,不写的话默认是10次。 algorithm是算法选择的参数,算法有”Hartigan-Wong”, “Lloyd”, “Forgy”,”MacQueen”四种。

# Initialize total within sum of squares error: wss
wss = 0
# 分成1至15个簇的结果
for (i in 1:15) {# 先创建一个模型: km.outkm.out = kmeans(pokemon, centers = i, nstart = 20, iter.max = 50)# 保存每个簇的组内距离平方和wss[i] = km.out$tot.withinss
}# 结果可视化,x轴是分群数,y轴是wss,每个簇内部的距离平方和,表示该簇的紧密程度。
plot(1:15, wss, type = "b", xlab = "Number of Clusters", ylab = "Within groups sum of squares")

# 根据上图我们选择分四组
k = 4# 建立一个4个群的模型
km.pokemon <- kmeans(pokemon, centers = k, nstart = 20, iter.max = 50)# 画出Defense vs. Speed这两个变数的分群结果
# 因为只能画出二维的状态,所以有很多是重叠的部分
plot(pokemon[, c("Defense", "Speed")],col = km.pokemon$cluster,main = paste("k-means clustering of Pokemon with", k, "clusters"),xlab = "Defense", ylab = "Speed")

Hierarchical clustering层次聚类

层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等。比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。

层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerative和divisive),也可以理解为自下而上法(bottom-up)和自上而下法(top-down)。自下而上法就是一开始每个个体(object)都是一个类,然后根据linkage寻找同类,最后形成一个“类”。自上而下法就是反过来,一开始所有个体都属于一个“类”,然后根据linkage排除异己,最后每个个体都成为一个“类”。这两种路方法没有孰优孰劣之分,只是在实际应用的时候要根据数据特点以及你想要的“类”的个数,来考虑是自上而下更快还是自下而上更快。

至于根据Linkage判断“类”的方法就是最短距离法、最长距离法、中间距离法、类平均法等等(其中类平均法往往被认为是最常用也最好用的方法,一方面因为其良好的单调性,另一方面因为其空间扩张/浓缩的程度适中)。为弥补分解与合并的不足,层次合并经常要与其它聚类方法相结合,如循环定位。

优点:1.距离和规则的相似度容易定义,限制少;2.不需要预先制定聚类数;3.可以发现类的层次关系;4.可以聚类成其它形状

缺点:1.计算复杂度太高;2.奇异值也能产生很大影响;3.算法很可能聚类成链状

# 查看每列 means
colMeans(pokemon)
##       HP   Attack  Defense  Sp. Atk  Sp. Def    Speed
## 69.25875 79.00125 73.84250 72.82000 71.90250 68.27750# 查看每列 standard deviations
apply(pokemon, 2, sd)
##       HP   Attack  Defense  Sp. Atk  Sp. Def    Speed
## 25.53467 32.45737 31.18350 32.72229 27.82892 29.06047# 将数据标准化
pokemon.scaled <- scale(pokemon)

聚类集合间的距离method,也就是linkage(连接方法linkage指的是衡量簇与簇之间的远近程度的方法)

最长距离法(complete) 默认;最短距离法(single) ;平均距离法(average);重心法(centroid)

# 建立 hierarchical clustering 模型: hclust.pokemon
# dist(pokemon.scaled)先需要将数据转化为两点间的距离
hclust.pokemon <- hclust(dist(pokemon.scaled), method = "complete")
# HitPoints         Attack        Defense  SpecialAttack SpecialDefense          Speed
#  69.25875       79.00125       73.84250       72.82000       71.90250       68.27750
# HitPoints         Attack        Defense  SpecialAttack SpecialDefense          Speed
#  25.53467       32.45737       31.18350       32.72229       27.82892       29.06047
# 可视化 hclust.pokemon
plot(hclust.pokemon, main = "complete")

比较 kmeans() and hclust()

# Apply cutree() to hclust.pokemon: cut.pokemon
cut.pokemon <- cutree(hclust.pokemon, k = 3)# Compare methods
table(km.pokemon$cluster, cut.pokemon)# cut.pokemon
#      1   2   3
#  1 283   0   0
#  2 114   0   1
#  3 277  11   0
#  4 114   0   0

这是个令人比较困惑的例子,可以看到kmeans()将观测结果分成了比较明显的四簇,但是hclust()几乎把所有观测结果都放在了一个簇中。我们虽然期待可以分成较多的分散集群,但是不能单单因为这个就得出哪个比较好的结论。

欢迎关注【数据小盐罐儿】一个很“咸”的数据科学公众号,不定期分享一些有趣好玩的项目以及大量的学习资源

dbscan和谱聚类_R 无监督聚类算法(1)K-means和层次聚类相关推荐

  1. 无监督机器学习中,最常见4类聚类算法总结 | 技术头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 编译 | 安然.狄思云 来源 | 读芯术(ID:AI_Discovery) 在机器学习过程中,很多数据都具有特 ...

  2. 【报告分享】2019移动互联网行业报告暨无监督机器学习下的2019行业价值人群聚类报告.pdf...

    今天给大家分享的报告是TalkingData于2020年3月31日发布的<2019移动互联网行业报告暨无监督机器学习下的2019行业价值人群聚类报告.pdf>,报告包含如下四大部分: 1. ...

  3. 机器学习算法_无监督机器学习算法:主成分分析

    之前我们曾经讲过,无监督学习是一种不使用标记数据(无目标变量)的机器学习.因此,算法的任务是在数据本身中寻找模式.无监督机器学习算法的两种主要类型分别是使用主成分分析的降维算法和聚类算法(包括K-Me ...

  4. 聚类算法 距离矩阵_机器学习基础-层次聚类

    层次聚类(Hierarchical clustering) 何时使用? 当我们希望进一步挖掘观测数据的潜在关系,可以使用层次聚类算法. 工作方式 首先我们会计算距离矩阵(distance matrix ...

  5. 聚类算法总结 划分法,层次聚类,基于网格,基于密度,谱聚类,基于模型,模糊聚类

    划分法: K-means:随机选择k个类的初始中心,对每一个样本都求解到k个中心点的距离,将它归类到距离最短的中心所在的类别.通过计算与类别内样本平均距离最小的点作为新的中心点.直到类别的聚类中心点不 ...

  6. R循环有两个_R语言数据分析与挖掘(第九章):聚类分析(2)——层次聚类

    层次聚类(hierarchical clustering)基于簇间的相似度在不同层次上分析数据,从而形成树形的聚类结构,层次聚类一般有两种划分策略:自底向上的聚合(agglomerative)策略和自 ...

  7. 9种有监督与3种无监督机器学习算法

    机器学习作为目前的热点技术广泛运用于数据分析领域,其理论和方法用于解决工程应用的复杂问题.然而在机器学习领域,没有算法能完美地解决所有问题(数据集的规模与结构.性能与便利度.可解释性等不可能三角),识 ...

  8. 聚类算法实践(一)——层次聚类、K-means聚类

    摘要: 所谓聚类,就是将相似的事物聚集在一 起,而将不相似的事物划分到不同的类别的过程,是数据分析之中十分重要的一种手段.比如古典生物学之中,人们通过物种的形貌特征将其分门别类,可以说就是 一种朴素的 ...

  9. 深度学习自学(三十三):通过结构正则化深度聚类解决无监督域自适应问题

    整理的人脸系列学习经验:包括人脸检测.人脸关键点检测.人脸优选.人脸对齐.人脸特征提取,Re-ID等学习过程总结,有需要的可以参考,仅供学习,请勿盗用.https://blog.csdn.net/Th ...

最新文章

  1. mysql8.0.15远程登陆权限,MySQL8.0给root用户赋予远程连接权限
  2. Hadoop生态Zookeeper安装
  3. 百度进军游戏;腾讯起诉抄袭者;苹果急撤 watchOS 5.1 更新 | 极客头条
  4. HTML 图片加载问题
  5. git学习-pull命令
  6. Windows下的Tomcat7安装与环境配置
  7. python使用matplotlib绘图 -- barChart
  8. 推荐10个免费的html,10个免费的HTML在线编辑工具
  9. linux 系统速度慢,Linux运维人员你知道Linux系统运行速度太慢的原因吗?
  10. jquery事件绑定的问题Uncaught TypeError: $(...).live is not a function at HTMLDocument.<anonymous> (ex5_
  11. 计算机桌面 文字大小,怎样调整电脑字体大小_怎样调整字体大小
  12. electron解决下载慢(亲测有效)
  13. Integer、new Integer()和int的区分与比较
  14. A计划(三维dfs)
  15. 关于工业相机编程调用SDK二次开发的一些步骤流程(转)
  16. 一文搞定python绘折线图(标题,自定义刻度范围,xy轴刻度值的大小,垂直xy轴的虚线,标签,图例)
  17. 出门问问引入AI,其虚拟个人助理首亮相
  18. 在局域网如何使用Git
  19. 区块链课程——高校兴起“加密教育热”
  20. ctfshow 密码挑战

热门文章

  1. 《基于MFC的OpenGL编程》Part 18 Reading objects from the OBJ File Format
  2. 2016年ICT行业前瞻:竞合生态,牵着手 一起走
  3. 2016年CIO的五个优先级
  4. ffmpeg调试相关知识点
  5. java rmi 规范学习
  6. 双系统中ubuntu的安装方法
  7. C++读写文件总结 .
  8. Windows XP、Windows Server 2003 等微软操作系统的源代码被指遭泄露
  9. ZDI 公布多个尚未修复的 Windows 高危0day详情
  10. 完美解决doc、docx格式word转换为Html