R语言--聚类学习笔记

聚类分析入门《R语言实战》

(1)聚类分析的一般步骤

(2)计算距离的方法:
①dist(x,method=) 计算矩阵或行列式中所有行观察值的距离,默认距离为欧几里得距离
method =
(默认)euclidean: 欧拉距离
maximum: 距离差值的最大值
manhattan: 距离差值之和
欧几里得计算公式:
在这里插入图片描述

library(flexclust)
data <-head(nutrient)
d <- dist(data) 
/*  计算得到三角矩阵
                BEEF BRAISED HAMBURGER BEEF ROAST BEEF STEAK BEEF CANNED
HAMBURGER           95.64000                                            
BEEF ROAST          80.93429 176.49218                                  
BEEF STEAK          35.24202 130.87784   45.76418                       
BEEF CANNED        161.22410  65.87868  242.05968  196.42609            
CHICKEN BROILED    226.39002 130.76578  307.16015  261.61888    66.06277
*/
as.matrix(d)
/* 转化成矩阵表达式
                BEEF BRAISED HAMBURGER BEEF ROAST BEEF STEAK BEEF CANNED
BEEF BRAISED         0.00000  95.64000   80.93429   35.24202   161.22410
HAMBURGER           95.64000   0.00000  176.49218  130.87784    65.87868
BEEF ROAST          80.93429 176.49218    0.00000   45.76418   242.05968
BEEF STEAK          35.24202 130.87784   45.76418    0.00000   196.42609
BEEF CANNED        161.22410  65.87868  242.05968  196.42609     0.00000
CHICKEN BROILED    226.39002 130.76578  307.16015  261.61888    66.06277
*/

(3)层次聚类分析(hierarchical clustering)
①层次聚类函数 hclust(distance,method=)
–distance: 代表观察值的距离,距离在(2)中的dist()方法表示
–method: 层次聚类有5种方法:
single单联动:一个类中的点与另一个类中的点的最小距离
complete全联动:一个类中的点与另一个类中的的点的最大距离
average平均联动:一个类中的点与另一个类中的点的平均距离
centroid质心: 两类间质心的距离
ward法: 两类所有变量方差分析的平方和

data <-nutrien
row.names(data) <-tolower(row.names(data))
//修改数据框中的行列名名称的大小写
d <- dist(data)  
//观察点的距离
fit.average <- hclust(d,method="average)
plot(fit.average,hang = -1,cex=.8,main="average Linkage Clustering")
//hang=-1 使标签悬浮在最下方
fit.average <- hclust(d,method="complete")
plot(fit.average,hang = -1,cex=.8,main="complete Linkage Clustering")
fit.average <- hclust(d,method="centroid")
plot(fit.average,hang = -1,cex=.8,main="centroid Linkage Clustering")

②层次聚类算法:
定义每个观察点为一类–>计算观察点距离dist()–>把距离最短的两类合并为一类–>若只剩一类则终止不然循环
③层次聚类的意义:
层次聚类: 根据距离最小值不断地合并,能够得到变量条目之间的相似关系

(3)划分聚类方法

(4)选择类的数目确定最终方案
上述步骤能够直观的表示各个变量的相似性与相异性。但若想要将变量再划分为更少的类型,则需要确定类的数目。
①数目分析函数NbClust(data,distance="",min.nc=,max.nc=,method="")
~distance:距离的计算 ~method:聚类方法的选择
min.nc/max.nc 类分析数目范围
该函数需要包括聚类分析的基本过程,即距离测算聚类方法的选择,最终可以得到不同种聚类方法下,数据支持的数量。选择支持数较大的分类数量进行再划分

②再分配函数
cutree(cluster,k=)
~cluster:初始的聚类模型
~k=:将聚类模型划分为几类
可以得到指定数量下,数据的分配情况

aggregate(data,by=,median)
~by=list():分组依据,且必须是以list形式。

rect.hclust(cluster,k=)
聚类划分函数,将已经产生的聚类cluster的图像根据指定类的数量再进行划分

library(flexclust)
data("nutrient")    //导入数据
nutrient.scale <-scale(nutrient)  //数据标准化
nb <-NbClust(nutrient.scale,distance="euclidean",min.nc=1,max.nc=15,method="average")
table(nb)   //展示每种数量支持情况
/*
 0  1  2  3  4  5  9 10 13 14 15 
 2  1  4  4  2  4  1  1  2  1  4 
 可知当数量为2,3,5,15时聚类效果较好
*/
//得到初始标准化的聚类模型
d <-distance(nutient.scale)     //计算距离
fit.average <-hclust(d,method="average")  //得到标准模型

clusters <-cutree(fit.average,k=5) //将初始模型再划分为5类
aggregate(nutrient,by=list(cluster=clusters),median)
/*
  cluser energy protein fat calcium iron
1      1  340.0      19  29       9 2.50
2      2  170.0      20   8      13 1.45
3      3  160.0      26   5      14 5.90
4      4   57.5       9   1      78 5.70
5      5  180.0      22   9     367 2.50
依据:cluster聚类模型从1-5的测试点的中位数
*/
plot(fit.average,hang=-1.cex=.8,main="Average Linkage Clustering")   
//得到初始聚类模型图像
rect.hclust(fit.average,k=5)
//在上图中在进行类型划分 划分为5种 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
确定聚类个数是进行K-means聚类分析的重要步骤之一。以下是两种常用的方法来帮助确定合适的聚类个数: 1. 手肘法(Elbow Method) 手肘法是一种直观的方法,用于选择合适的聚类个数。该方法通过计算不同聚类个数下的簇内平方和(WCSS)来评估聚类的性能。WCSS是每个簇内数据点与该簇的质心之间距离的平方和。随着聚类个数的增加,WCSS会逐渐减小,但是当聚类个数增加到一定程度时,减少的速度会减缓。这个聚类个数对应的点形成了图形上的一个"肘部",因此称为手肘法。 以下是一个使用手肘法确定聚类个数的R代码示例: ```R library(ggplot2) library(cluster) # 读取数据 data <- read.csv("data.csv") # 计算不同聚类个数下的簇内平方和 wcss <- c() for (i in 1:10) { kmeans_fit <- kmeans(data, centers = i, nstart = 10) wcss[i] <- kmeans_fit$tot.withinss } # 绘制手肘图 ggplot(data.frame(x = 1:10, y = wcss), aes(x, y)) + geom_line() + geom_point() + labs(x = "Number of Clusters", y = "Within-Cluster Sum of Squares") + geom_vline(xintercept = 3, linetype = "dashed") # 根据手肘确定聚类个数为3 ``` 2. 轮廓系数(Silhouette Method) 轮廓系数是一种用于评估聚类质量的方法。该方法通过计算每个数据点的轮廓系数来评估聚类的性能。轮廓系数是一个介于-1和1之间的值,表示数据点与其所属簇的相似度与与其他簇的相似度之间的差异程度。轮廓系数越接近1,表示数据点与其所属簇的相似度越高,与其他簇的相似度越低,聚类效果越好。 以下是一个使用轮廓系数确定聚类个数的R代码示例: ```R library(ggplot2) library(cluster) # 读取数据 data <- read.csv("data.csv") # 计算不同聚类个数下的轮廓系数 silhouette <- c() for (i in 2:10) { kmeans_fit <- kmeans(data, centers = i, nstart = 10) silhouette[i] <- silhouette(kmeans_fit$cluster, dist(data))$avg.width } # 绘制轮廓系数图 ggplot(data.frame(x = 2:10, y = silhouette[-1]), aes(x, y)) + geom_line() + geom_point() + labs(x = "Number of Clusters", y = "Silhouette Width") + geom_vline(xintercept = 3, linetype = "dashed") # 根据轮廓系数确定聚类个数为3 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冠long馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值