划分聚类分析

K 均值聚类

最常见的划分方法是K均值聚类分析。从概念上讲,K均值算法如下:

  • 选择K个中心点(随机选择K行);
  • 把每个数据点分配到离它最近的中心点;
  • 重新计算每类中的点到该类中心点距离的平均值(也就说,得到长度为p的均值向量,这
    里的p是变量的个数);
  • 分配每个数据到它最近的中心点;
  • 重复步骤(3)和步骤(4)直到所有的观测值不再被分配或是达到最大的迭代次数(R把10次
    作为默认迭代次数)。

K均值聚类能处理比层次聚类更大的数据集。由于K均值聚类在开始要随机选择k个中心点,在每次调用函数时可能获得不同的方案。使用
set.seed() 函数可以保证结果是可复制的。此外,聚类方法对初始中心值的选择也很敏感。
kmeans() 函数有一个 nstart 选项尝试多种初始配置并输出最好的一个。

同样是聚类分析,上一次介绍的是层次聚类分法,这种方法输出的聚类树状图是其最大的优点,但是层次分析法的缺点就在于适合的样本数比较小,大概在150个左右。所以,当我们面临更大的数据时,划分聚类法就是更好的选择,虽然没有树状聚类图,却而代之的是圈型的聚类图。

  • 代码:
setwd("E:\\Rwork")
library(rattle)
wine <- read.csv("wine.csv")
head(wine)
df <- wine[,-1]#或者wine$Type <- NULL
head(df)
df.scaled <- scale(df)
library(NbClust)
set.seed(1234)
devAskNewPage(ask = TRUE)#按回车输出图形
nc <- NbClust(df.scaled,min.nc = 2,max.nc = 15,method="kmeans")
table(nc$Best.n[1,])
*******************************************************************
* Among all indices:
* 4 proposed 2 as the best number of clusters
* 15 proposed 3 as the best number of clusters
* 1 proposed 10 as the best number of clusters
* 1 proposed 12 as the best number of clusters
* 1 proposed 14 as the best number of clusters
* 1 proposed 15 as the best number of clusters ***** Conclusion *****                            * According to the majority rule, the best number of clusters is  3 ******************************************************************* barplot(table(nc$Best.n[1,]),xlab="Number of Clusters", ylab="Number of Criteria",main="Number of Clusters Chosen by 26 Criteria")
  • NbClust 包中的26种指标中有15种建议使用类别数为3的聚类方案

set.seed(1234)
fit.km<- kmeans(df.scaled,3,nstart = 25)#nstart=25默认推荐值
fit.km$size #查看具体分类数量
fit.km$centers#查看具体中心点
aggregate(df,by=list(culster=fit.km$cluster),mean)
ct.km<-table(wine$Type, fit.km$cluster)  #查看分类概括
ct.km1  2  31 59  0  02  3 65  33  0  0 48
  • 用 flexclust 包中的兰德指数(Rand index)来量化类型变量和类之间的协议:
library(flexclust)
randIndex(ct.km)#-1是完全不同意,1是完全同意ARI
0.897495 library(cluster)
par(mfrow=c(1,1),no.readonly = FALSE)#NbCluster将图形改为(1,2)的形式,这里将其改回(1,1)的形式
clusplot(df.scaled,fit.km$cluster,color = TRUE,shade = T,labels = 2,lines = 1)#输出聚类图

围绕中心点的划分

因为K均值聚类方法是基于均值的,所以它对异常值是敏感的。一个更稳健的方法是围绕中心点的划分(PAM)。与其用质心(变量均值向量)表示类,不如用一个最有代表性的观测值来表示(称为中心点)。K均值聚类一般使用欧几里得距离,而PAM可以使用任意的距离来计算。因此,PAM可以容纳混合数据类型,并且不仅限于连续变量。
PAM算法如下:

  • 随机选择K个观测值(每个都称为中心点);
  • 计算观测值到各个中心的距离/相异性;
  • 把每个观测值分配到最近的中心点;
  • 计算每个中心点到每个观测值的距离的总和(总成本);
  • 选择一个该类中不是中心的点,并和中心点互换;
  • 重新把每个点分配到距它最近的中心点;
  • 再次计算总成本;
  • 如果总成本比步骤(4)计算的总成本少,把新的点作为中心点;
  • 重复步骤(5)~(8)直到中心点不再改变。

参数详解:可以使用 cluster 包中的 pam() 函数使用基于中心点的划分方法。格式是 pam(x, k,metric="euclidean", stand=FALSE) ,这里的 x 表示数据矩阵或数据框, k 表示聚类的个数,metric 表示使用的相似性/相异性的度量,而 stand 是一个逻辑值,表示是否有变量应该在计算该指标之前。

> library(cluster)
> set.seed(1234)
> fit.pam <- pam(wine[-1], k=3, stand=TRUE)
> fit.pam$medoids> clusplot(fit.pam, main="Bivariate Cluster Plot")
  • 该数据中PAM法不如k-means法

ct.pam <- table(wine$Type, fit.pam$clustering)
> randIndex(ct.pam)ARI
0.6994957

无监督学习 聚类分析②相关推荐

  1. 机器学习(二)之无监督学习:数据变换、聚类分析

    文章目录 0 本文简介 1 无监督学习概述 2 数据集变换 2.1 预处理和缩放 2.2 程序实现 2.3 降维.特征提取与流形学习 2.3.1 主成分分析 2.3.2 非负矩阵分解 2.3.3 用t ...

  2. 易百教程人工智能python修正-人工智能无监督学习(聚类)

    无监督机器学习算法没有任何监督者提供任何指导. 这就是为什么它们与真正的人工智能紧密结合的原因. 在无人监督的学习中,没有正确的答案,也没有监督者指导. 算法需要发现用于学习的有趣数据模式. 什么是聚 ...

  3. 【采用】无监督学习在反欺诈中的应用

    一.反欺诈技术的发展历程 反欺诈技术的的发展经历了四个阶段,第一阶段黑名单.信誉库和设备指纹:第二阶段规则系统:第三阶段有监督的机器学习:第四阶段无监督的大数据欺诈检测.目前来说,前三种还是大家应用最 ...

  4. [Python人工智能] 十五.无监督学习Autoencoder原理及聚类可视化案例详解

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章详细讲解了循环神经网络LSTM RNN如何实现回归预测,通过sin曲线拟合实现如下图所示效果.本篇文章将分享无监督 ...

  5. 使用Scikit-learn,Spotify API和Tableau Public进行无监督学习

    I will also walk through the OSEMN framework for this machine learning example. The acronym, OSEMN, ...

  6. 机器学习中的无监督学习_无监督机器学习中聚类背后的直觉

    机器学习中的无监督学习 When it comes to analyzing & making sense of the data from the past and understandin ...

  7. 机器学习之无监督学习——聚类

    机器学习之无监督学习--聚类 无监督学习 一.基于划分的聚类方法 1.基于划分的方法 简介 A.概念 B.分组 C.分组与样本 对应关系 D.硬聚类 与 软聚类 二.基于层次的聚类方法 1.基于层次的 ...

  8. 机器学习集群_机器学习中的多合一集群技术在无监督学习中应该了解

    机器学习集群 Clustering algorithms are a powerful technique for machine learning on unsupervised data. The ...

  9. 技术+案例详解无监督学习Autoencoder

    摘要:本篇文章将分享无监督学习Autoencoder的原理知识,然后用MNIST手写数字案例进行对比实验及聚类分析. 本文分享自华为云社区<[Python人工智能] 十五.无监督学习Autoen ...

最新文章

  1. 【Java基础】多线程
  2. redhat 5.6下网卡冗余实验
  3. Elastic AMP监控.NET程序性能
  4. scala和java像不像_关于Java和Scala同步的五件事你不知道
  5. Openfire插件开发
  6. ge linux安装apt_教你如何在 Linux 中使用 apt 命令
  7. 重构:如何去掉代码中的S味
  8. 用户如何设置浏览器主页的历史记录和管理加载项
  9. pythonxy官网下载_spyder安装包
  10. PMI-ACP敏捷项目认证练习题(四)
  11. python 报错“xxx is not defined”
  12. python里offset啥意思_深度理解Jquery 中 offset() 方法
  13. 服务器修复划痕,【DIY】自己动手修复屏幕划痕及建议
  14. 多功能运算求解器_matlab中bsxfun函数
  15. Stegsolve.jar工具包准备,避坑指南,教你正确启动Stegsolve
  16. 证明技巧I——反证法
  17. windows优化大师怎么用_win7系统提示未能连接一个windows服务如何解决【详解】
  18. WuThreat身份安全云-TVD每日漏洞情报-2023-05-30
  19. U盘系统盘恢复成普通U盘
  20. 【自然语言处理】潜在语义分析【下】概率潜在语义分析

热门文章

  1. 原生JS实现拿到的时间戳“毫秒/秒”转为“时:分:秒”形式的效果
  2. 十几套JavaWeb项目,拿去当毕业设计简直太爽了(源码)
  3. ifconfig 命令详解
  4. springboot返回时间有错解决方案
  5. allegro cadence bubble 灰色不可用
  6. 一位女程序员兼俩小子妈咪的人生历程(1)
  7. 品牌与商家如何做电商直播运营的呢?
  8. 使用Backtrader对股票历史数据进行指标回测
  9. android 动态渐变,Android 动态修改渐变 GradientDrawable
  10. python+selenium 自动定时发QQ说说