《R语言与数据挖掘》⑦聚类分析建模

书籍:《R语言与数据挖掘》

作者:张良均

出版社:机械工业出版社

ISBN:9787111540526

本书由北京华章图文信息有限公司授权杭州云悦读网络有限公司电子版制作与发行

版权所有·侵权必究


写在前面

目前主流的聚类算法主要分为以下几种

  • K-Means K-均值聚类
  • K-Medoids K-中心聚类
  • DBSSCAN Density-based Spatial Clustering of Application with Noise 密度聚类
  • HC Hierarchical Clustering 层次聚类,或者叫系谱聚类
  • EM Expectation Maximization 期望最大聚类
    在这里插入图片描述

K-Means K-均值聚类

但对于异常值或极值敏感,稳定性差,因此适合处理分布集中的大样本数据集。
聚类过程描述:
它的思路是以随机选取的k(预设类别数)个样本作为起始中心点,将其余样本归入相似度最高中心点所在的簇(cluster),再确立当前簇中样本坐标的均值为新的中心点,依次循环迭代下去,直至所有样本所属类别不再变动。算法的计算过程非常直观,下图以将10个点聚为3类为例展示算法步骤。
在这里插入图片描述

code showing

# K - Means聚类
# 设置工作空间
setwd("D:/数据及程序/第7章/示例程序")
# 读入数据
Data <-  read.csv("./data/consumption_data.csv", header = TRUE)[, 2:4] 
# K - Means聚类分析建模,聚类个数为3
km <- kmeans(Data, center = 3)
# 查看聚类结果
print(km)
# 聚类后各类数据所占比例
km$size / sum(km$size)
# 将数据按聚类结果分组
Data.cluster <- data.frame(Data, km$cluster)
Data1 <- Data[which(Data.cluster$km.cluster == 1), ]
Data2 <- Data[which(Data.cluster$km.cluster == 2), ]
Data3 <- Data[which(Data.cluster$km.cluster == 3), ]
# 客户分群“1”的概率密度函数图
par(mfrow = c(1, 3))    
plot(density(Data1[, 1]), col = "red", main = "R")
plot(density(Data1[, 2]), col = "red", main = "F")
plot(density(Data1[, 3]), col = "red", main = "M")
# 客户分群“2”的概率密度函数图
par(mfrow = c(1, 3))    
plot(density(Data2[, 1]), col = "red", main = "R")
plot(density(Data2[, 2]), col = "red", main = "F")
plot(density(Data2[, 3]), col = "red", main = "M")
# 客户分群“3”的概率密度函数图
par(mfrow = c(1, 3))    
plot(density(Data3[, 1]), col = "red", main = "R")
plot(density(Data3[, 2]), col = "red", main = "F")
plot(density(Data3[, 3]), col = "red", main = "M")
kmeans(x,  centers,  iter.max = 10,  nstart = 1,  algorithm = c(“Hartigan-Wong”, 
   “Lloyd”,  “Forgy”,  “MacQueen”),  trace = FALSE)

其中x为进行聚类分析的数据集; centers为预设类别数k; iter.max为迭代的最大值,且默认值为10; nstart为选择随机起始中心点的次数,默认取1;而参数algorithm则提供了4中算法选择,默认为Hartigan-Wong算法。

K-Medoids K-中心聚类

# K - 中心点聚类
# 加载函数包cluster
library(cluster)
# 设置随机种子
set.seed(0)
# 生成服从正态分布的随机数数据集
x <- rbind(cbind(rnorm(10, 0, 0.5), rnorm(10, 0, 0.5)), 
           cbind(rnorm(15, 5, 0.5), rnorm(15, 5, 0.5)))
# K - 中心点聚类
pamx <- pam(x, 2)  # 聚为2类
# 查看聚类结果              
print(pamx)
# 绘制聚类结果
plot(pamx)

DBSSCAN Density-based Spatial Clustering of Application with Noise 密度聚类


# 加载函数fpc包
library(fpc)
# 设置随机种子
set.seed(665544)
# 示例数据
n <- 600
x <- cbind(runif(10, 0, 10) + rnorm(n, sd = 0.2), runif(10, 0, 10) + rnorm(n, sd = 0.2))
# 密度聚类
ds <- dbscan(x, 0.2)
# 查看聚类结果
print(ds)
# 绘制聚类结果
plot(ds, x)

HC Hierarchical Clustering 层次聚类,或者叫系谱聚类

层次聚类(系谱聚类)的名称在于,其聚类的过程可以通过类似于系谱图的形式呈现出来。相比K-均值算法与K-中心点算法,系谱算法的突出特点在于,不需事先设定类别数k,这是因为它每次迭代过程仅将距离最近的两个样本/簇聚为一类,其运作过程将自然得到k=n至k=1(n为待分类样本总数)个类别的聚类结果。

在这里插入图片描述

code showing

# 层次聚类
# 生成等差序列
n <- seq(1, 50, by = 4) 
# 对示例数据集USArrests进行等差抽样
(x <- USArrests[n, ]) 
# 聚类的合并方法为"complete"
hc1 <- hclust(dist(x), method = "complete")
# 将数据中心标准化后聚类
hc2 <- hclust(dist(scale(x)), method = "complete")
# 聚类的合并方法为"ave" 
hc3 <- hclust(dist(x), method = "ave")
# 查看聚类结果
print(hc1);print(hc2);print(hc3)
# 对聚类结果进行剪枝
# 利用剪枝函数cutree()中的参数k控制输出聚类结果
cutree(hc1, k = 4)
cutree(hc2, k = 4)
cutree(hc3, k = 4)
# 利用剪枝函数cutree()中的参数H控制输出聚类结果
cutree(hc1, h = 50)
cutree(hc2, h = 2)
cutree(hc3, h = 50)
# 绘制聚类树,并使用rect.hclust()在聚类树中查看聚类结果
# 分别绘制聚类树
plot(hc1)
plot(hc2)
plot(hc3)
# 用红色矩形框出4分类的聚类结果
rect.hclust(hc3, k = 4, border = "red")
# 用深灰色矩形框出高度指标为100时的聚类结果
rect.hclust(hc3, h = 100, border = "dark grey")

EM Expectation Maximization 期望最大聚类

# EM聚类
# 加载函数包mclust
library(mclust)
nNoise <- 100
set.seed(0)  # 设置随机种子
# 生成示例数据
Noise <- apply(faithful, 2, function(x) 
  runif(nNoise, min = min(x) - .1, max = max(x) + .1))
data <- rbind(faithful, Noise)
# 绘制示例数据散点图
plot(faithful)
points(Noise, pch = 20, cex = 0.5)
# EM聚类
set.seed(0)
NoiseInit <- sample(c(TRUE, FALSE), size = nrow(faithful) + nNoise, 
                   replace = TRUE, prob = c(3, 1) / 4)
mod5 <- Mclust(data, initialization = list(noise = NoiseInit))
# 查看模型建模结果
summary(mod5, parameter = TRUE)
# 绘制聚类结果的概率分布图
plot(mod5, what = "classification")


距离选择

使用格式为:dist(x, method = “euclidean”,d iag = FALSE, upper = FALSE, p = 2)
其中,x是样本矩阵或者数据框;method表示计算距离的方法,method的取值有:euclidean(欧几里德距离,即欧氏距离)、maximum(切比雪夫距离)、manhattan(曼哈顿距离,即绝对值距离)、canberra(Lance距离)、minkowski(明可夫斯基距离,使用时要指定p值)、binary(定性变量距离),默认选择euclidean; diag 为TRUE的时候给出对角线上的距离;upper为TURE的时候给出上三角矩阵上的值。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
R语言是数据科学中非常流行和强大的一种编程语言,用于数据分析和数据挖掘。尽管它提供了丰富的功能和包,但在使用R进行数据挖掘时,仍然存在一些常见的问题。 首先,R语言的学习曲线相对陡峭,尤其对于初学者来说。R语言的语法和概念与其他编程语言有所不同,需要一定的时间和精力来掌握。因此,在开始使用R进行数据挖掘之前,建议用户先学习基本的R语言知识和技能。 其次,R语言的数据处理速度相对较慢。由于R是一种解释型语言,对于大型数据集的处理可能会显得比较缓慢。为了提高数据挖掘的效率,可以使用一些优化技巧,如向量化、使用并行计算等。此外,R在内存管理方面也有一些限制,处理大型数据集时可能会导致内存溢出等问题。 另外,R语言社区的包和函数数量庞大,但质量参差不齐。用户在进行数据挖掘时,可能会遇到某些包或函数不兼容、文档不全面等问题。为了解决这些问题,用户可以仔细查看包的文档和说明,寻求社区的帮助和讨论,或者使用经过广泛测试和应用的常用包。 此外,数据挖掘分析中常涉及到特征选择、数据清洗、模型选择和调参等问题。这些问题需要专业背景和经验支持。对于初学者或者没有相关领域知识的人来说,可能需要花费更多的时间和精力来理解和解决这些问题。 总之,虽然R语言数据挖掘领域有着广泛的应用,但在实际操作中也存在一些常见的问题。通过学习和积累经验,用户可以更好地应对和解决这些问题,提高数据挖掘的效率和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wency(王斯-CUEB)

我不是要饭的

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

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

打赏作者

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

抵扣说明:

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

余额充值