做网站的内容样本,建设商城网站的,拼多多网站开发,网页界面设计布局聚类分析是一种常用的无监督学习方法#xff0c;是将所观测的事物或者指标进行分类的一种统计分析方法#xff0c;其目的是通过辨认在某些特征上相似的事物#xff0c;并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。
方法优点缺点适用场景K-means计算效率高需…聚类分析是一种常用的无监督学习方法是将所观测的事物或者指标进行分类的一种统计分析方法其目的是通过辨认在某些特征上相似的事物并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。
方法优点缺点适用场景K-means计算效率高需预设K值球形数据分布层次聚类可视化直观计算复杂度O(n²)小数据集/层级关系分析DBSCAN发现任意形状参数敏感噪声数据/密度差异大PAM对异常值鲁棒计算成本高中小规模数据
一、层次聚类
它是通过计算样本之间的距离来构建一个层次化的聚类结构结果通常用树状图dendrogram来表示。
实现层次聚类的常用函数是R语言内置函数hclust()还可以用cluter扩展包的agens()函数和flashClust扩展包的hclust()函数。
1、hclust()函数
下面用flexclust扩展包中的milk数据集进行讲解此数据集包含了25种哺乳动物乳汁的成分数据水分water、蛋白质protein、乳糖lactose、脂肪fat和灰分ash。
1.1 准备数据
library(flexclust)
# 第1步 准备数据查看数据
data(milk)
milk 1.2 标准化数据
# 第2步 标准化数据
milk_data - scale(milk, centerT, scaleT)
milk_data1.3 计算距离
# 第3步 计算欧几里得距离也可以选用其它方法
milk_dist - dist(milk_data, methodeuclidean)
milk_dist1.4 层次聚类 使用平均距离法进行层次聚类
# 使用平均距离法进行层次聚类
fit_average - hclust(milk_dist, methodaverge)
fit_average 使用离差平和法进行层次聚类
# 使用平均距离法进行层次聚类
fit_average - hclust(milk_dist, methodward.D2)
fit_average 1.5 可视化结果
plot(fit_average, hang-1, cex1.2,main平均距离层次聚类) plot(fit_average, hang -1, main 层次聚类树状图, xlab 样本, sub )
# 用矩形标出3个聚类
rect.hclust(fit_average, k 3, border 2:4) 1.6 切割聚类并评估
使用flexclust扩展包中的cuttree()函数将聚类结果分为3类为什么分为3类在此不细究可上网查询方法。
clusters - cutree(fit_average, k3)
# 可视化结果
plot(fit_average, hang-1, cex1, main平均距离层次最终聚类)
rect.hclust(fit_average, k3) 二、K-均值聚类
1、kmeans()函数
层次聚类是一次性的即样本点一旦被划分道一个类中就不会再被分配到其它的类中而且当样本量达到数百甚至数千时层次聚类会很难处理。
R语言中最常用的K-均值聚类函数时kmeans()函数。
1.1 数据准备
用R语言内置的iris数据集为例。首先需要将类别信息去除。
head(iris)
iris_data - iris[, 1:4]
head(iris_data) 1.2 标准化数据
# 标准化数据消除量纲的影响
iris_scaled - scale(iris_data, centerT, scaleTRUE)
head(iris_scaled) 1.3 选择最佳K值
使用肘部法选择最佳的K值通过计算不同聚类数k对应的总组内平方和Total Within-Cluster Sum of Squares, WSS找到WSS下降速度显著变缓的“肘部”点该点对应的k即为最佳聚类数。
wss - numeric(10)
for (k in 1:10) {kmeans_model - kmeans(iris_scaled, centers k, nstart 25)wss[k] - kmeans_model$tot.withinss
}
plot(1:10, wss, type b, pch 19, main 肘部法选择最佳k值, xlab 聚类数k, ylab 总组内平方和WSS)
从下面的截图可知当k3时下降速度明显变缓。 1.4 K-均值聚类
centers聚类数k。
nstart随机初始中心点的次数建议设为25以减少局部最优影响。
iter.max最大迭代次数默认10。
set.seed(123)
# 进行K-均值聚类
fit_means - kmeans(iris_scaled, centers3, iter.max100, nstart25)
1.5 可视化结果
library(factoextra)
fviz_cluster(fit_means, data iris_scaled, palette jco, # 配色方案geom point, # 仅显示点ellipse.type norm, # 添加正态分布椭圆ggtheme theme_minimal())