第六章 样本相似性可视化课堂练习
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 图形观察和代码编写的心得体会
图形观察:同种类型数据相连,可以清晰对比各指标不同类型数据的大小。
代码编写:将宽数据转为长格式,便于ggplot2绘制。平行坐标图需要将宽格式转为长格式,保持变量原始顺序很重要(fct_inorder),线条粗细、透明度和点标记的微小调整显著影响可读性,图例位置和样式对整体美观很重要,这种实现方式平衡了代码简洁性和可视化效果,是展示高维数据分类模式的优秀方案。
2.2 雷达图
- 采用
ggiraphExtra::ggRadar绘图
2.2.1 图形观察和代码编写的心得体会
图形观察:更适合多维度对比,通过极坐标映射多变量,直观展示组间差异。
代码编写:
escale=FALSE保持数据原始范围,适合需要绝对值的场景,ylim强制统一轴范围,避免误导性解读,先定义主题,再应用到图形,逻辑分明。
3 星图和脸谱图
3.1 星图
采用
stars函数,对标准化数据绘制圆弧星图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;设置图例在合适位置,能完整显示;将图形分为10行。
3.1.1 图形观察和代码编写的心得体会
图形观察:每个观测(行)对应一个星形或圆弧,每个变量(列)对应一个放射状轴或圆弧段,
draw.segments=TRUE生成圆弧图(填充扇形),比星形图(连线)更直观。代码编写:
stars()通过draw.segments切换星形图/圆弧图,适应不同需求,先转换数据,再绘图,逻辑清晰。
3.2 脸谱图
- 采用
aplpack::faces函数,作Species三个类别的脸谱图 - 需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名; - 设置图例在合适位置,能完整显示;将图形分为3列。
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 图形观察和代码编写的心得体会
图形观察:每个变量映射到人脸的一个特征,利用人类对人脸的高度敏感度增强数据解读。
代码编写:
face.type支持不同风格,适应不同审美需求,先聚合数据,再转换格式,最后绘图,逻辑清晰。
4 聚类图和热图
4.1 系统聚类树状图
- 采用
factoextra::fviz_dend函数,对标准化后数据作图; - 需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名; - 要求分为3类,观察分类结果和
Species的差异;树状图的外观为圆形。
4.1.1 图形观察和代码编写的心得体会
图形观察:通过树形结构展示样本的聚类过程,分支高度反映类间距离。
代码编写:与数据预处理、聚类计算、可视化相关的参数分块编写,逻辑分明。
4.2 K-menas聚类主成分图
采用
factoextra::fviz_cluster函数,对标准化后数据作图;需要先将四个数值变量转化为矩阵,并将
1:150作为矩阵的行名;要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。
4.2.1 图形观察和代码编写的心得体会
图形观察:直接划分样本到指定簇数(centers=3),适合球形分布的数据,通过 ellipse.type=“norm” 绘制正态置信椭圆,直观显示簇的分布范围。
代码编写:可视化灵活性,repel=TRUE 解决标签重叠问题,适合密集数据点,ellipse.type 和 pointsize 增强图形可解释性。
4.3 热图
采用
gplots::heatmap.2函数,对原始数据绘制热力图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;要求横轴和纵轴均添加聚类树状图
4.3.1 图形观察和代码编写的心得体会
图形观察:由热力图和树状图组成,使用彩虹色阶,能更加明显的看出差异。
代码编写:
as.matrix()确保热图函数兼容性,select(-Species)聚焦数值变量,先准备数据,再调用热图函数,逻辑清晰。