R语言--聚类分析

聚类算法:

  • K-均值聚类(K-Means)
  • K-中心点聚类(K-Meaoids)
  • 密度聚类(Densit-based Spatial Clustering of Application with Noise,DBSCAN)
  • 系谱聚类(Hierarchical Clustering)
  • 期望最大化聚类(Expectation Maximization,EM)
  • 其他算法

K-均值聚类算法

算法原理

K-均值聚类算法,是一种迭代算法,其采用距离作为判断对象之间相似性的指标,距离越近即相似度越高。这里的距离是欧式距离:m维空间中两点之间的真实距离。如二维空间中点(x1,y1)和点(x2,y2)的欧式距离为: \(\sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}}\) 。三维空间两点之间欧式距离为 \(\sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}+(z_{2}-z_{1})^{2}}\) 。多维数据可以通过PCA(主成分分析)降维,或者直接计算欧式距离。
算法过程:

  1. 随机选取的K(簇个数,如游戏分为:顶级、高级、中级、低级,则k = 4)个样本作为起始中心点(簇)。
  2. 计算每个样本的点与各起始中心点的距离,将其余样本归入距离最近的簇,这就将所有样本完成了第一次分类。
  3. 确定当前类(簇)中样本坐标均值,作为新的起始中心点,然后计算各样本和各个新的起始中心点的距离,将样本按照距离归入距离最近的簇中。这是第二次分类。
  4. 确定新的起始中心点,把样本归类,依次循环迭代,直至所有样本归属类别不在变动(即最后确定了分类)。


上图中10个样本,想分为3类,首先随机选取了3个样本点(黑色标记样本:1,2,3)(图Ⅰ)。然后计算其余样本点与这三个样本点的距离,然后根据距离分类(图Ⅱ)。计算当前分类中样本坐标均值,作为新的起始中心点(图Ⅲ,黑色小方块),然后计算样本与各新的起始中心点的距离进行分类(图Ⅳ)。然后图Ⅳ分类中再计算各类中样本坐标均值作为新的起始中心点(图Ⅳ中的黑色小方块),计算各样本和各新的起始中心点的距离,进行分类(图Ⅴ),发现图Ⅳ和图Ⅴ相同,即分类不在变化,标志分类完成。

R的实现

K-Means算法在R中的实现的核心函数为stats包中的kmeans()函数。

kmeans(x, centers, iter.max = 10, nstart = 1,
       algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
                     "MacQueen"), trace=FALSE)
## S3 method for class 'kmeans'
fitted(object, method = c("centers", "classes"), ...)
  • x:待进行聚类分析的数据集
  • centers:预设分类(簇)数目,即K值
  • iter.max:最大迭代次数,默认值为10
  • nstart:选择随机起始中心点的次数,默认值为1
  • algorithm:该参数提供了四种参数选择,默认为Hartigan-Wong
  • trace:该参数仅用于默认算法(Hartigan-Wong),如果设定为正(或TRUE),则生成算法进程相关的进程信息,如果数据量大的可能生成会生成跟多的进程信息。

实例

以iris数据集进行聚类分析,iris数据集:安德森鸢尾花卉数据集,包含150个样本(行),每个样本的5中特征向量(花萼长度,花萼宽度,花瓣程度,花瓣宽度,品种)。

观察数据发现,有三个品种,每个品种为50个样本数据

kc <- kmeans(x = iris[1:4],centers = 3)     # 以前四个特征数据进行聚类,分成3类。


分成3类,第一类:38个样本;第二类:62个样本;第三类:50个样本。根据源数据可知,只有一类分类完全正确,有12个样本分类错误。

fitted(kc)    # 查看最终分类后,各类的样本坐标均值,即该类的起始中心点
# 结果:
 Sepal.Length Sepal.Width Petal.Length Petal.Width
1     5.006000    3.428000     1.462000    0.246000
3     5.901613    2.748387     4.393548    1.433871
2     6.850000    3.073684     5.742105    2.071053
table(iris$Species,kc$cluster)    # table函数:通过交叉分类构建因子水平频数列联表。
# 结果:
   1  2  3
  setosa     50  0  0
  versicolor  0  2 48
  virginica   0 36 14

列联表可以比较直观的看出分类的具体情况,从上面可以看出:setosa50个样本完全分类正确;把14个virginica样本分为versicolor,同时把2个versicolor分为virginica

可视化

plot(iris[c("Sepal.Length","Sepal.Width")],col = kc$cluster,pch = as.integer(iris$Species))    


上面可视化:以花萼长度和花萼宽度散点图,以形状对源数据分类进行分组显示,以颜色作为聚类分组显示,即原来每种50个样本,如果分类正确则每种颜色,每种形状点有50个。
圆点:setosa;三角形:versicolor;十字形:virginica
白色:setosa;绿色:versicolor;红色:virginica
从图中可以看到:
圆点、白色一致,即setosa分类完全正确
绿色三角形48个,红色三角形2个,即versicolor有48个分类正确,有两个被归入virginica
红色十字形36个,绿色十字形14个,即virginica种的36个样本正确归类为virginica,有14样本被归类为versicolor

原文地址:https://www.cnblogs.com/sakura-d/p/11170901.html

时间: 2024-10-10 13:12:37

R语言--聚类分析的相关文章

R语言聚类分析

聚类分析有很多种, 效果好不好大概要根据数据特征来确定.最常见的是kmeans法聚类 > setwd("D:\\R_test") > data_in <- read.delim("tmp_result.txt", header=T) > fit <- kmeans(data_in, 3) > library(cluster) > clusplot(data_in, fit$cluster, color=T, shade=T,

用R语言对NIPS会议文档进行聚类分析

一.用R语言建立文档矩阵 (这里我选用的是R x64 3.2.2) (这里我取的是04年NIPS共计207篇文档做分析,其中文档内容已将开头的作者名和最后的参考文献进行过滤处理) ##1.Data Import  导入自己下的3084篇NIPStxt文档 library("tm")#加载tm包 stopwords<- unlist(read.table("E:\\AllCode\\R\\stopwords.txt",stringsAsFactors=F)) d

R语言 系统聚类分析1

#聚类分析是一类将数据所研究对象进行分类的统计方法,这一类方法的共同特点是:#事先不知道类别的个数与结构 据以进行分类的数据是对象之间的相似性 或差异性数据#将这些相似(相异)性数据看成是对象之间的距离远近的一种度量 将距离近的对象#归入一类 不同类之间的对象距离较远#聚类分析根据分类对象不同分为Q型聚类分析(指的是对样本进行聚类) 和R型聚类分析(指的是对变量进行聚类) #距离和相似系数#聚类分析是研究对样本或变量的聚类 变量可以分为两类1定量变量 通常指的是连续量#2 定性变量(有序变量+名

R语言数据挖掘实战系列(1)

R语言数据挖掘实战(1) 一.数据挖掘基础 数据挖掘:从数据中"淘金",从大量数据(包括文本)中挖掘出隐含的.未知的.对决策有潜在价值的关系.模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法.工具和过程. 数据挖掘的任务 利用分类与预测.聚类分析.关联规则.时序模式.偏差检测.智能推荐等方法,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力. 数据挖掘建模过程 定义挖掘目标,即决定到底想干什么? 数据取样.抽取一个与挖掘目标相关的样本数据子集.抽取数据的

主成分分析(PCA)原理及R语言实现

原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及计算步骤 - 文库 主成分分析之R篇 [机器学习算法实现]主成分分析(PCA)——基于python+numpy scikit-learn中PCA的使用方法 Python 主成分分析PCA 机器学习实战-PCA主成分分析.降维(好) 关于主成分分析的五个问题 主成分分析(PCA)原理详解(推荐) 多变

R语言数据挖掘实战系列(5)

R语言数据挖掘实战系列(5)--挖掘建模 一.分类与预测 分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值. 1.实现过程 (1)分类 分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别.分类模型建立在已有类标记的数据集上,模型在已有样本上的准确率可以方便地计算,所以分类属于有监督的学习. (2)预测 预测是建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制.

数据分析,R语言

数据结构 创建向量和矩阵 1 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 1 函数mean(), sum(), min(), max(), var(), sd(), prod() 帮助文档 1 函数help() 生成向量 1 seq() 生成字母序列letters 新建向量 1 Which()函数,rev()函数,sort()函数 生成矩阵 1 函数matrix() 矩阵运算 1 函数t(),矩阵加减 矩阵运算 1

R语言 文本挖掘 tm包 使用

#清除内存空间 rm(list=ls()) #导入tm包 library(tm) library(SnowballC) #查看tm包的文档 #vignette("tm") ##1.Data Import 导入自带的路透社的20篇xml文档 #找到/texts/crude的目录,作为DirSource的输入,读取20篇xml文档 reut21578 <- system.file("texts", "crude", package = &quo

K-means算法原理与R语言实例

聚类是将相似对象归到同一个簇中的方法,这有点像全自动分类.簇内的对象越相似,聚类的效果越好.支持向量机.神经网络所讨论的分类问题都是有监督的学习方式,现在我们所介绍的聚类则是无监督的.其中,K均值(K-means)是最基本.最简单的聚类算法. 在K均值算法中,质心是定义聚类原型(也就是机器学习获得的结果)的核心.在介绍算法实施的具体过程中,我们将演示质心的计算方法.而且你将看到除了第一次的质心是被指定的以外,此后的质心都是经由计算均值而获得的. 首先,选择K个初始质心(这K个质心并不要求来自于样