5.2、聚类之层次聚类实例

实例一、对莺尾花数据进行层次聚类分类

#1、加载数据
data(iris)
newiris <- iris[, 1:4]
iris_scale <- scale(newiris)
#注意:层次聚类使用的是欧式聚类,所以需要对数据进行标准化和中心化处理

#2、建模
model_hclust <- hclust(dist(iris_scale))

#3、模型评估
plot(model_hclust, hang=-1)
#hang是表明谱系图中各类所在的位置 当hang取负值时,谱系图中的类从底部画起。若是负数,则表示末端树杈长度是0,即标签对齐。
(re <- rect.hclust(model_hclust, k=3))
## [[1]]
##  [1]  51  52  53  55  57  59  62  64  65  66  67  71  72  73  74  75  76
## [18]  77  78  79  84  85  86  87  89  92  96  97  98 101 102 103 104 105
## [35] 106 108 109 110 111 112 113 114 115 116 117 118 119 121 122 123 124
## [52] 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
## [69] 142 143 144 145 146 147 148 149 150
## 
## [[2]]
##  [1]  42  54  56  58  60  61  63  68  69  70  80  81  82  83  88  90  91
## [18]  93  94  95  99 100 107 120
## 
## [[3]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47
## [47] 48 49 50
(model_id <- cutree(model_hclust, 3))
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [36] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 3 3 3 2 3 2 3 2 3 2 2 3 2 3 3 3 3 2 2 2
##  [71] 3 3 3 3 3 3 3 3 3 2 2 2 2 3 3 3 3 2 3 2 2 3 2 2 2 3 3 3 2 2 3 3 3 3 3
## [106] 3 2 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [141] 3 3 3 3 3 3 3 3 3 3
table(iris[, 5],model_id)
##             model_id
##               1  2  3
##   setosa     49  1  0
##   versicolor  0 21 29
##   virginica   0  2 48
#4、生成聚类图
library(fpc)

plotcluster((iris[, 1:4]), model_id)

实例二、各省消费数据

#1、加载数据
X<-data.frame(
  x1=c(2959.19, 2459.77, 1495.63, 1046.33, 1303.97, 1730.84,
       1561.86, 1410.11, 3712.31, 2207.58, 2629.16, 1844.78,
       2709.46, 1563.78, 1675.75, 1427.65, 1783.43, 1942.23,
       3055.17, 2033.87, 2057.86, 2303.29, 1974.28, 1673.82,
       2194.25, 2646.61, 1472.95, 1525.57, 1654.69, 1375.46,
       1608.82),
  x2=c(730.79, 495.47, 515.90, 477.77, 524.29, 553.90, 492.42,
       510.71, 550.74, 449.37, 557.32, 430.29, 428.11, 303.65,
       613.32, 431.79, 511.88, 512.27, 353.23, 300.82, 186.44,
       589.99, 507.76, 437.75, 537.01, 839.70, 390.89, 472.98,
       437.77, 480.99, 536.05),
  x3=c(749.41, 697.33, 362.37, 290.15, 254.83, 246.91, 200.49,
       211.88, 893.37, 572.40, 689.73, 271.28, 334.12, 233.81,
       550.71, 288.55, 282.84, 401.39, 564.56, 338.65, 202.72,
       516.21, 344.79, 461.61, 369.07, 204.44, 447.95, 328.90,
       258.78, 273.84, 432.46),
  x4=c(513.34, 302.87, 285.32, 208.57, 192.17, 279.81, 218.36,
       277.11, 346.93, 211.92, 435.69, 126.33, 160.77, 107.90,
       219.79, 208.14, 201.01, 206.06, 356.27, 157.78, 171.79,
       236.55, 203.21, 153.32, 249.54, 209.11, 259.51, 219.86,
       303.00, 317.32, 235.82),
  x5=c(467.87, 284.19, 272.95, 201.50, 249.81, 239.18, 220.69,
       224.65, 527.00, 302.09, 514.66, 250.56, 405.14, 209.70,
       272.59, 217.00, 237.60, 321.29, 811.88, 329.06, 329.65,
       403.92, 240.24, 254.66, 290.84, 379.30, 230.61, 206.65,
       244.93, 251.08, 250.28),
  x6=c(1141.82, 735.97, 540.58, 414.72, 463.09, 445.20, 459.62,
       376.82, 1034.98, 585.23, 795.87, 513.18, 461.67, 393.99,
       599.43, 337.76, 617.74, 697.22, 873.06, 621.74, 477.17,
       730.05, 575.10, 445.59, 561.91, 371.04, 490.90, 449.69,
       479.53, 424.75, 541.30),
  x7=c(478.42, 570.84, 364.91, 281.84, 287.87, 330.24, 360.48,
       317.61, 720.33, 429.77, 575.76, 314.00, 535.13, 509.39,
       371.62, 421.31, 523.52, 492.60, 1082.82, 587.02, 312.93,
       438.41, 430.36, 346.11, 407.70, 269.59, 469.10, 249.66,
       288.56, 228.73, 344.85),
  x8=c(457.64, 305.08, 188.63, 212.10, 192.96, 163.86, 147.76,
       152.85, 462.03, 252.54, 323.36, 151.39, 232.29, 160.12,
       211.84, 165.32, 182.52, 226.45, 420.81, 218.27, 279.19,
       225.80, 223.46, 191.48, 330.95, 389.33, 191.34, 228.19,
       236.51, 195.93, 214.40),
  row.names=c("北京","天津","河北","山西","内蒙古",
              "辽宁","吉林","黑龙江","上海","江苏","浙江",
              "安徽","福建","江西","山东","河南","湖北",
              "湖南","广东","广西","海南","重庆","四川",
              "贵州","云南","西藏","陕西","甘肃","青海" ,
              "宁夏","新疆")          
)

#2、数据预处理:标准化和中心化
dist <- dist(scale(X))

#3、聚类
model_hclust <- hclust(dist)

#4、绘制聚类图
plot(model_hclust, hang=-1)
rect_id <- rect.hclust(model_hclust, k=5, border = "blue")

### 回答1: 模糊均值聚类(fuzzy c-means clustering,FCM)是一种基于模糊理论的聚类算法,在无监督学习任务中被广泛应用。Matlab作为一种流行的科学计算软件,提供了方便实现FCM算法的工具箱,“fcm”函数即可实现模糊均值聚类。 下面以一个简单的实例来说明如何在Matlab中使用FCM算法进行聚类。假设有一个数据集,包含100个二维样本点,其中分别有三类点,如下图所示: ![image-20210518112055538](https://cdn.jsdelivr.net/gh/1045932616/CS2022/img/image-20210518112055538.png) 首先需要将数据集导入Matlab中,将其存储在一个矩阵中,每一行代表一个样本点的坐标。假设矩阵的名称为“data”。接着,使用“fcm”函数进行聚类,代码如下: ```matlab [centers,U]=fcm(data,3); %聚成3类 ``` 函数“fcm”接受两个输入参数,第一个是数据矩阵,第二个是期望的聚类数目。输出结果包括聚类中心矩阵“centers”和隶属度矩阵“U”。其中,“centers”是一个$k$行$d$列的矩阵,每一行代表一个聚类中心点的坐标,“U”是一个$N \times k$的矩阵,其中$N$为样本点数目,“k”为聚类数目,每一行代表一个样本点对于每个聚类的隶属度。 接着可以将聚类结果可视化,将每个聚类用不同颜色标记出来,代码如下: ```matlab maxU=max(U,[],2); index=[]; for i=1:3 index{i}=find(U(:,i)==maxU); end scatter(data(index{1},1),data(index{1},2),'r'); hold on; scatter(data(index{2},1),data(index{2},2),'g'); hold on; scatter(data(index{3},1),data(index{3},2),'b'); ``` 代码中,首先计算每个样本点对于三个聚类中最高的隶属度值,然后找到所有隶属于某个聚类的样本点的下标,最后用散点图将每个聚类的样本点可视化出来。 运行以上代码,得到如下结果: ![image-20210518112250370](https://cdn.jsdelivr.net/gh/1045932616/CS2022/img/image-20210518112250370.png) 如图所示,三个聚类用不同颜色标记出来,每个聚类包含了相似的样本点。通过以上步骤,我们成功使用Matlab实现了模糊均值聚类算法对样本进行聚类分析。 ### 回答2: 模糊均值聚类是一种聚类分析方法,可以用来将数据点划分成多个群组。MATLAB作为一种流行的计算工具,提供了丰富的聚类分析工具,其中之一就是模糊均值聚类。 以下是一个MATLAB模糊均值聚类实例: 先生成一组数据: x = [2.5 3.6 3.8 4.5 4.9 5.2 5.4 5.5]; y = [1.6 1.8 2.1 2.9 2.8 3.5 3.5 4.2]; figure; plot(x, y, 'o'); 使用fcm函数进行模糊均值聚类,设置聚类数量为2和迭代次数为100: [centers, U] = fcm([x; y], 2, [2.0 NaN 0.0001 0]); 其中centers表示聚类中心,U是分配给每个点的聚类概率。迭代次数可以根据需要进行调整。NaN表示默认值,0表示模糊度,其指定两个聚类间的界限。 绘制结果: plot(x, y, 'o'); maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2,:) == maxU); line([x(index1) x(index2)], [y(index1) y(index2)]); hold on plot(centers(1,1),centers(2,1),'x', 'markersize', 15, 'LineWidth', 3); plot(centers(1,2),centers(2,2),'x', 'markersize', 15, 'LineWidth', 3); hold off 结果显示出两个聚类的中心,以及分配给每个数据点的聚类概率。这些信息可以用来进一步深入分析和可视化数据。模糊均值聚类是一种灵活的聚类分析方法,可以应用于各种不同类型的数据,包括图像和时间序列。MATLAB作为一种计算工具,提供了强大的聚类分析功能,可以帮助用户有效地处理和分析大量的数据。 ### 回答3: 模糊均值聚类是指在数据样本中,根据各数据点之间相似性的度量,将数据分成K类的一种聚类分析方法。MATLAB提供了模糊聚类函数fcm来实现此种模糊均值聚类。 以下是一个利用MATLAB进行模糊均值聚类分析的实例: 假设我们有一组100个数据,每个数据有两个属性,对此数据使用模糊均值聚类进行分析,代码如下: ```matlab %生成数据 data = [randn(50,2)*0.75+ones(50,2);randn(50,2)*0.5-ones(50,2)]; %进行模糊聚类分析 options = [2.0,100,1e-5,0]; [centers, U] = fcm(data, 2, options); %绘制结果 plot(data(:,1),data(:,2),'o'); hold on; maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2,:) == maxU); line(data(index1,1),data(index1,2),'linestyle','none','marker','*','color','g'); line(data(index2,1),data(index2,2),'linestyle','none','marker','*','color','r'); plot(centers(:,1),centers(:,2),'*k'); title('Fuzzy C-Means Clustering with 2 Clusters'); ``` 运行后,我们可以得到数据的可视化图表,看到数据被成功分成了两个类别,其聚类中心分别为(-1, -1)和(1, 1)。 以上就是一个MATLAB模糊均值聚类分析的实例
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值