第六章 样本相似性可视化课堂练习
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 图形观察和代码编写的心得体会
2.1.2 平行坐标图心得体会
- 数据观察:
- 平行坐标图适合展示多变量关系,能清晰对比不同类别(如
Species
)在各维度的分布差异。
- 若线条交叉密集,说明变量间相关性弱;若线条趋势一致,则存在潜在模式。
- 平行坐标图适合展示多变量关系,能清晰对比不同类别(如
- 代码技巧:
group=id
:确保每条观测独立连线,避免错误连接。
geom_line + geom_point
:增强可视化,点标记突出关键数据位置。
color=Species
:通过颜色分类,直观对比组间差异(如setosa
可能明显分离)。
- 优化方向:
- 添加
alpha
降低线条透明度,缓解重叠问题。
- 使用
scale_color_brewer()
优化调色板,提升类别辨识度。
- 若变量量纲差异大,需标准化(如
scale()
)避免某些维度主导图形。
- 添加
2.2 雷达图
- 采用
ggiraphExtra::ggRadar
绘图
2.2.1 图形观察和代码编写的心得体会
2.2.2 雷达图心得体会
直观对比多维度特征:雷达图通过闭合区域清晰展现不同类别(如鸢尾花品种)在各变量的差异,适合快速发现组间优劣势。
美学设计关键点:
- 透明度(
alpha
):降低填充色透明度避免重叠遮挡,突出边界线。
- 图例分多行(
nrow=3
):节省空间,提升可读性。
- 坐标轴标签优化:调整字体大小和颜色(如
color="blue4"
)增强辨识度。
- 透明度(
数据预处理:
- 变量量纲差异大时需标准化(
rescale=TRUE
),否则图形可能失真。
- 若变量过多,建议筛选关键维度,避免雷达图过于复杂。
- 变量量纲差异大时需标准化(
局限性:
- 变量超过6-7个时易显得杂乱,建议分拆或改用平行坐标图。
- 仅适合展示相对差异,不适用于精确数值比较。
- 变量超过6-7个时易显得杂乱,建议分拆或改用平行坐标图。
3 星图和脸谱图
3.1 星图
采用
stars
函数,对标准化数据绘制圆弧星图需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名;设置图例在合适位置,能完整显示;将图形分为10行。
3.1.1 图形观察和代码编写的心得体会
3.1.1.1 1. 数据观察
- 多变量对比:星图适合展示高维数据,每个观测(如不同鸢尾花品种)以星形表示,半径长度对应变量值,便于快速对比各样本特征。
- 标准化重要性:由于变量量纲不同(如花萼长度与花瓣宽度),必须标准化处理,避免某些维度主导图形。
3.1.1.2 2. 图形设计要点
数据预处理:
- 数值变量需转为矩阵,并将分类变量(如
Species
)设为行名。
- 标准化(如Z-score)确保各变量可比。
- 数值变量需转为矩阵,并将分类变量(如
星图绘制关键:
- 分面布局:合理设置行数(如10行)避免图形重叠,提升可读性。
- 图例优化:调整图例位置(如底部或右侧),确保类别标签完整显示。
- 分面布局:合理设置行数(如10行)避免图形重叠,提升可读性。
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"
3.2.1 图形观察和代码编写的心得体会
3.2.1.1 1. 数据观察
- 多变量可视化:脸谱图通过人脸特征(如眼睛大小、嘴巴弧度)编码多维数据,适合直观对比不同类别(如鸢尾花的三个品种)的整体差异。
- 数据要求:需将数值变量转为矩阵,并确保行名(如
Species
)与观测一一对应,以便识别。
3.2.1.2 2. 图形设计要点
数据预处理:
- 选择关键变量(如花萼长宽、花瓣长宽),避免过多维度导致脸谱特征混乱。
- 标准化数据(如
scale()
)使变量量纲一致,防止某一特征过度影响脸型。
- 选择关键变量(如花萼长宽、花瓣长宽),避免过多维度导致脸谱特征混乱。
脸谱图绘制关键:
- 分列显示:设置
ncol.plot=12
将图形分为12列,避免拥挤。
- 图例整合:通过
main
参数添加标题说明类别,或配合legend()
手动添加图例(需额外代码)。
- 分列显示:设置
4 聚类图和热图
4.1 系统聚类树状图
- 采用
factoextra::fviz_dend
函数,对标准化后数据作图; - 需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名; - 要求分为3类,观察分类结果和
Species
的差异;树状图的外观为圆形。
4.1.1 图形观察和代码编写的心得体会
4.1.1.1 1. 数据观察
- 聚类效果评估:通过树状图可直观观察样本(如鸢尾花)的聚类结构,判断
Species
分类与数值特征的吻合程度。
- 标准化必要性:花萼和花瓣的尺寸量纲不同,需标准化(如
scale()
)以避免变量权重偏差。
4.1.1.2 2. 图形设计要点
- 数据预处理:
- 将数值变量转为矩阵,行名设为
Species
,便于后续比对聚类标签与真实类别。
- 欧氏距离(默认)适合连续型数据,若变量相关性高可改用马氏距离。
- 将数值变量转为矩阵,行名设为
- 树状图绘制关键:
- 分3类:通过
k=3
明确切割为3簇,与Species
的3类别对照,评估聚类合理性。
- 圆形布局:
circular=TRUE
增强可视化紧凑性,但需调整cex
避免标签重叠。
- 分3类:通过
- 结果解读:
- 若聚类结果与
Species
高度一致(如setosa
独立成簇),说明数值特征能有效区分品种。
- 分支长度反映样本相似度,短分支表明
virginica
与versicolor
可能较难区分。
- 若聚类结果与
4.1.1.3 总结
圆形树状图通过层次聚类揭示数据内在分组结构,既能验证已知分类(如Species
)的合理性,也能发现潜在异常样本。需注意距离度量和标准化方法的选择对结果的影响。
4.2 K-menas聚类主成分图
采用
factoextra::fviz_cluster
函数,对标准化后数据作图;需要先将四个数值变量转化为矩阵,并将
1:150
作为矩阵的行名;要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。
4.2.1 图形观察和代码编写的心得体会
4.2.1.1 1. 数据观察
- 降维可视化:主成分分析(PCA)将高维数据压缩至2D平面,结合K-means聚类(
k=3
),可直观评估样本分布与聚类效果。
- 异常值识别:偏离所属簇中心或落在簇边缘的样本(如轮廓系数低者)可能为异常值。
4.2.1.2 2. 图形设计要点
- 数据预处理:
- 标准化数据(
scale()
)消除量纲影响,确保聚类公平性。
- 行名设为
1:150
(样本ID),便于后续追踪异常观测。
- 标准化数据(
- 聚类与可视化关键:
- 正态轮廓:通过
ellipse.type="norm"
绘制正态分布轮廓,清晰展示各类边界。
- 异常值检测:关注轮廓系数(
silhouette
)接近0或负值的样本,或远离簇中心的点。
- 正态轮廓:通过
- 结果解读:
- 若聚类结果与鸢尾花真实类别(
Species
)高度吻合,说明数值特征区分力强。
setosa
通常能完美分离,而virginica
与versicolor
可能存在重叠区域。
- 若聚类结果与鸢尾花真实类别(
4.2.1.3 总结
此图通过PCA+K-means高效揭示数据聚类结构,尤其适合快速定位异常观测。需注意:K-means对初始中心敏感,可多次运行取稳定结果;正态轮廓假设可能不完全适用,需结合实际数据分布判断。
4.3 热图
采用
gplots::heatmap.2
函数,对原始数据绘制热力图需要先将四个数值变量转化为矩阵,并将
Species
作为矩阵的行名;要求横轴和纵轴均添加聚类树状图
4.3.1 图形观察和代码编写的心得体会
- 数据预处理:
- 将数值变量转为矩阵,行名设为
Species
,列名保留变量名(如Sepal.Length
)。
- 无需标准化(因
heatmap.2
默认按行归一化),但若需强调变量间差异,可手动scale
。
- 将数值变量转为矩阵,行名设为
- 热图绘制关键:
- 行列聚类:
Rowv=TRUE
(行聚类)和Colv=TRUE
(列聚类)同时启用,树状图显示在左侧和顶部。
- 颜色映射:
col=colorRampPalette(c("blue","white","red"))(100)
定义蓝-白-红渐变,突出高低值。
- 行列聚类:
- 异常值识别:
- 颜色明显偏离同簇其他样本的点(如某
versicolor
的花瓣长度异常高)可能为异常值。
- 通过
trace="none"
关闭行列轨迹线,减少视觉干扰。
- 颜色明显偏离同簇其他样本的点(如某
4.3.1.1 总结
热图+双聚类树状图是多变量分析的强大工具,既能宏观把握数据分布,又能微观定位异常样本。需注意:颜色方案的选择(如避免红绿色盲冲突)和聚类方法(默认欧氏距离+完全链接)对结果的影响。