第六章 样本相似性可视化课堂练习
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 图形观察和代码编写的心得体会
- 图形观察: 平行坐标图通过不同颜色区分物种(Species),各指标(Sepal/Petal参数)的数值分布趋势清晰,但图例位置可优化以避免遮挡数据。
代码心得: 需注意函数名拼写、颜色参数修正(如fill="gray50"),并确保主题设置语法正确。
2.2 雷达图
- 采用
ggiraphExtra::ggRadar绘图
2.2.1 图形观察和代码编写的心得体会
- 雷达图展示了不同鸢尾花物种(Species)在四个指标上的分布,但y轴刻度显示不完整(如“6-”)且线条透明度(alpha=0)可能导致图形不可见。
3 星图和脸谱图
3.1 星图
采用
stars函数,对标准化数据绘制圆弧星图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;设置图例在合适位置,能完整显示;将图形分为10行。
3.1.1 图形观察和代码编写的心得体会
- 图形观察: 星图因
key.loc坐标设置不合理导致图例超出绘图区域,且scale=TRUE未正确缩放数据,需调整参数以清晰展示不同物种的数值特征。
代码心得: 修正图例位置(如key.loc=c(1,0)),并确保数据列名与代码引用一致(如Species大小写)。
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 图形观察和代码编写的心得体会
- 图形观察: 脸谱图通过面部特征差异直观呈现不同鸢尾花物种(Species)在各指标上的均值分布,形态对比鲜明但需结合变量含义解读细节。
代码心得: 数据聚合与矩阵转换逻辑清晰,参数(如scale=TRUE标准化)合理控制图形比例,管道操作符(|>)提升代码可读性。
4 聚类图和热图
4.1 系统聚类树状图
- 采用
factoextra::fviz_dend函数,对标准化后数据作图; - 需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名; - 要求分为3类,观察分类结果和
Species的差异;树状图的外观为圆形。
4.1.1 图形观察和代码编写的心得体会
- 图形观察: 圆形树状图通过颜色区分3个聚类类别,直观展示鸢尾花物种(Species)的层次聚类结果,但需验证分类与真实物种标签的匹配程度。
代码心得: 数据标准化与聚类方法(ward.D2)选择合理,需注意颜色参数一致性(如k=3时k_colors应匹配3种颜色)及函数参数命名(如type="circular"正确指定图形类型)。
4.2 K-menas聚类主成分图
采用
factoextra::fviz_cluster函数,对标准化后数据作图;需要先将四个数值变量转化为矩阵,并将
1:150作为矩阵的行名;要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。
4.2.1 图形观察和代码编写的心得体会
- 图形观察: K-means主成分图清晰展示三类的空间分布,正态椭圆反映类别密度,部分边缘点(如61、64)可能因特征偏离主群被标记为异常。
代码心得: 数据标准化与主成分降维结合合理,repel=TRUE有效避免标签重叠,参数(如ellipse.type)配置直观增强结果可解释性。
4.3 热图
采用
gplots::heatmap.2函数,对原始数据绘制热力图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;要求横轴和纵轴均添加聚类树状图
4.3.1 图形观察和代码编写的心得体会
- 图形观察: 热图通过行列聚类树状图展示鸢尾花数值特征的结构关系,但轴标签存在拼写错误(如“PealWidth”应为“Petal.Width”),且颜色键标题需更明确。
代码心得: 使用dendrogram="both"实现双向聚类,srtCol调整标签角度避免重叠。