第六章 样本相似性可视化课堂练习
1 案例数据
1.1 iris:鸢尾花数据集
- R语言内置的
iris
数据集(鸢尾花数据集)是统计学和机器学习领域最经典的案例数据集之一,由英国统计学家 Ronald Fisher 在1936年首次提出。它包含了3种鸢尾花的测量数据,每个类别有50个样本,共150行数据。
变量名 | 数据类型 | 单位 | 说明 |
---|---|---|---|
Sepal.Length | numeric | cm | 花萼(萼片)长度,即花朵最外层绿色叶状结构的长度 |
Sepal.Width | numeric | cm | 花萼(萼片)宽度 |
Petal.Length | numeric | cm | 花瓣长度,即花朵内部彩色叶状结构的长度 |
Petal.Width | numeric | cm | 花瓣宽度 |
Species | factor | - | 鸢尾花种类(分类标签),包含3个水平: • setosa 山鸢尾• versicolor 变色鸢尾• virginica 维吉尼亚鸢尾 |
setosa
类的花通常较小,花瓣短而宽,与其他两类差异明显;versicolor
和virginica
在部分特征上有重叠,分类难度更高。
2 平行坐标图和雷达图
2.1 平行坐标图
ggplot(group=id)+geom_line+geom_point
绘图Species
映射为颜色
2.1.1 图形观察和代码编写的心得体会
纵轴(Y轴):
数值
,表示每个花部特征的测量值。横轴(X轴):4个离散的
指标
,对应鸢尾花的四个特征:Sepal.Length
(花萼长度)Sepal.Width
(花萼宽度)Petal.Length
(花瓣长度)Petal.Width
(花瓣宽度)
彩色折线:每条线代表一朵花的4个特征值,颜色区分不同种类
灰色点标记:突出每个特征的具体数值点。
变量相关性:
花瓣特征(Petal.Length/Petal.Width):
- 折线在这两个指标间交叉较少,说明它们高度相关。
花萼特征(Sepal.Length/Sepal.Width):
- 折线模式更分散,可能相关性较弱。
2.2 2.2 雷达图
2.3 雷达图
- 采用
ggiraphExtra::ggRadar
绘图
2.3.1 图形观察和代码编写的心得体会
雷达图清晰揭示了:
setosa
以“花萼宽、花瓣小”为标志性特征。virginica
的“花瓣尺寸”远大于其他两类。versicolor
是前两者的中间形态。花瓣特征的分类区分度高于花萼特征。
3 星图和脸谱图
3.1 星图
采用
stars
函数,对标准化数据绘制圆弧星图需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名;设置图例在合适位置,能完整显示;将图形分为10行。
3.1.1 图形观察和代码编写的心得体会
3.2 脸谱图
- 采用
aplpack::faces
函数,作Species
三个类别的脸谱图 - 需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名; - 设置图例在合适位置,能完整显示;将图形分为12列。
effect of variables:
modified item Var
"height of face " "Sepal.Length"
"width of face " "Sepal.Width"
"structure of face" "Petal.Length"
"height of mouth " "Petal.Width"
"width of mouth " "Sepal.Length"
"smiling " "Sepal.Width"
"height of eyes " "Petal.Length"
"width of eyes " "Petal.Width"
"height of hair " "Sepal.Length"
"width of hair " "Sepal.Width"
"style of hair " "Petal.Length"
"height of nose " "Petal.Width"
"width of nose " "Sepal.Length"
"width of ear " "Sepal.Width"
"height of ear " "Petal.Length"
effect of variables:
modified item Var
"height of face " "Sepal.Length"
"width of face " "Sepal.Width"
"structure of face" "Petal.Length"
"height of mouth " "Petal.Width"
"width of mouth " "Sepal.Length"
"smiling " "Sepal.Width"
"height of eyes " "Petal.Length"
"width of eyes " "Petal.Width"
"height of hair " "Sepal.Length"
"width of hair " "Sepal.Width"
"style of hair " "Petal.Length"
"height of nose " "Petal.Width"
"width of nose " "Sepal.Length"
"width of ear " "Sepal.Width"
"height of ear " "Petal.Length"
effect of variables:
modified item Var
"height of face " "Sepal.Length"
"width of face " "Sepal.Width"
"structure of face" "Petal.Length"
"height of mouth " "Petal.Width"
"width of mouth " "Sepal.Length"
"smiling " "Sepal.Width"
"height of eyes " "Petal.Length"
"width of eyes " "Petal.Width"
"height of hair " "Sepal.Length"
"width of hair " "Sepal.Width"
"style of hair " "Petal.Length"
"height of nose " "Petal.Width"
"width of nose " "Sepal.Length"
"width of ear " "Sepal.Width"
"height of ear " "Petal.Length"
3.2.1 图形观察和代码编写的心得体会
4 聚类图和热图
4.1 系统聚类树状图
- 采用
factoextra::fviz_dend
函数,对标准化后数据作图; - 需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名; - 要求分为3类,观察分类结果和
Species
的差异;树状图的外观为圆形。
[1] "聚类结果与真实物种的混淆矩阵:"
Predicted
Actual 1 2 3
setosa 49 1 0
versicolor 0 27 23
virginica 0 2 48
调整兰德指数(ARI): 0.615
聚类结果与真实物种分类有中等程度的一致性
4.1.1 图形观察和代码编写的心得体会
纵轴(Height):表示 合并距离(Merge Distance),数值越大,说明两类差异越大。
横轴(样本顺序):
- 相似样本会较早合并,差异大的样本较晚合并。
setosa
:- 由于花萼宽、花瓣小,与其他两类差异明显 → 在树状图中会单独成簇。
versicolor
和virginica
:部分样本可能重叠(尤其在
Petal.Length
和Petal.Width
上相似)。树状图中可能显示
versicolor
和virginica
的某些样本被错误分类。
4.2 K-menas聚类主成分图
采用
factoextra::fviz_cluster
函数,对标准化后数据作图;需要先将四个数值变量转化为矩阵,并将
1:150
作为矩阵的行名;要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。
检测到的异常值:
ID Species Cluster Distance Sepal.Length Sepal.Width Petal.Length
16 16 setosa 1 2.39 5.7 4.4 1.5
34 34 setosa 1 1.87 5.5 4.2 1.4
42 42 setosa 1 2.66 4.5 2.3 1.3
61 61 versicolor 2 1.97 5.0 2.0 3.5
118 118 virginica 3 2.09 7.7 3.8 6.7
119 119 virginica 3 1.82 7.7 2.6 6.9
132 132 virginica 3 2.17 7.9 3.8 6.4
Petal.Width
16 0.4
34 0.2
42 0.3
61 1.0
118 2.2
119 2.3
132 2.0
ID | Species | Cluster | Distance | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | |
---|---|---|---|---|---|---|---|---|
16 | 16 | setosa | 1 | 2.39 | 5.7 | 4.4 | 1.5 | 0.4 |
34 | 34 | setosa | 1 | 1.87 | 5.5 | 4.2 | 1.4 | 0.2 |
42 | 42 | setosa | 1 | 2.66 | 4.5 | 2.3 | 1.3 | 0.3 |
61 | 61 | versicolor | 2 | 1.97 | 5.0 | 2.0 | 3.5 | 1.0 |
118 | 118 | virginica | 3 | 2.09 | 7.7 | 3.8 | 6.7 | 2.2 |
119 | 119 | virginica | 3 | 1.82 | 7.7 | 2.6 | 6.9 | 2.3 |
132 | 132 | virginica | 3 | 2.17 | 7.9 | 3.8 | 6.4 | 2.0 |
异常值特征分析:
1. 异常值数量: 7
2. 异常值分布:
setosa versicolor virginica
3 1 3
4.2.1 图形观察和代码编写的心得体会
K-means 通过最小化 类内平方和(WCSS) 迭代优化聚类中心。
最终输出
km
包含:cluster
:每个样本的聚类标签(1、2、3)。centers
:每个聚类的中心点坐标。
横纵轴:前两个主成分(PC1 和 PC2),解释数据的主要变异方向。
颜色:不同聚类(1、2、3)用不同颜色表示。
椭圆:展示每个聚类的分布范围,椭圆重叠少说明聚类分离效果好
4.3 热图
采用
gplots::heatmap.2
函数,对原始数据绘制热力图需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名;要求横轴和纵轴均添加聚类树状图
4.3.1 图形观察和代码编写的心得体会
聚类分析:
dendrogram = "both"
表示对行和列进行层次聚类。颜色映射:使用彩虹色(
rainbow
)表示数值大小,色键(图例)显示颜色与数值的对应关系。标签调整:列名旋转30度,避免重叠;行名和列名字体缩小以提高可读性。