第六章 样本相似性可视化课堂练习
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 图形观察和代码编写的心得体会
图形观察:
Setosa(橙色)的花瓣长度(Petal.Length)和宽度(Petal.Width)显著小于其他两类,且花萼宽度(Sepal.Width)较大,形成明显区分。
Versicolor(蓝色)和Virginica(绿色)在花萼特征上重叠较多,但花瓣特征仍有差异(Virginica 花瓣更长更宽)。
平行坐标图通过线条走向清晰展示了单个样本的多特征组合,适合发现类别间的整体差异。
代码心得:
gather()函数用于将宽数据转换为长格式,是绘制多变量图形的关键步骤。group=id确保每个样本的特征连成一条线,color=Species实现分类着色,需注意因子顺序避免颜色错乱
2.2 雷达图
- 采用
ggiraphExtra::ggRadar绘图
2.2.1 图形观察和代码编写的心得体会
图形观察:
Setosa的雷达图面积最小,尤其在花瓣特征上接近原点,与其他两类形成 “内环”。
Virginica的雷达图在花瓣长度和宽度上扩展至外环,显示其较大的花瓣尺寸。
雷达图通过极坐标直观展示多变量的 “轮廓” 差异,适合类别间的整体形状比较。
代码心得:
rescale=TRUE对数据标准化是雷达图的必要步骤,避免因变量量纲不同导致图形失真。alpha和linetype参数可优化重叠线条的可读性,需根据数据密度调整。
3 星图和脸谱图
3.1 星图
采用
stars函数,对标准化数据绘制圆弧星图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;设置图例在合适位置,能完整显示;将图形分为10行。
3.1.1 图形观察和代码编写的心得体会
图形观察:
每个星型的 4 条射线对应 4 个特征,射线长度反映标准化后的值。
Setosa的星型整体紧凑,射线短;Virginica的花瓣特征射线最长,形成 “尖刺” 状。
星图通过几何形状编码多变量,适合快速识别类别间的特征主次关系。
代码心得:
stars()函数自动按行分组(每行对应一个样本),需确保行名正确关联类别。len参数控制射线长度,避免过长导致图形重叠;nrow调整布局美观度。
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 图形观察和代码编写的心得体会
图形观察:
Setosa的脸谱眼睛位置较低(对应花萼宽度较大),嘴巴弧度小(花瓣特征值低)。
Virginica的脸谱眼睛位置高(花萼长度长),嘴巴张开幅度大(花瓣特征值高)。
脸谱图通过拟人化特征映射数据,适合直观感知类别间的 “个性” 差异,但需熟悉参数映射规则。
代码心得:
需先对数据聚合(如求均值),避免单个样本噪声影响整体特征。
face.type参数决定脸谱的复杂度,简单类型更适合数据对比。
4 聚类图和热图
4.1 系统聚类树状图
- 采用
factoextra::fviz_dend函数,对标准化后数据作图; - 需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名; - 要求分为3类,观察分类结果和
Species的差异;树状图的外观为圆形。
4.1.1 图形观察和代码编写的心得体会
图形观察:
聚类结果与实际类别高度一致:Setosa 单独成一类,Versicolor 和 Virginica 分为两类,但部分 Virginica 样本被归入 Versicolor 类。
树状图的高度反映类间距离,Setosa 与其他两类距离最远,符合其显著差异。
代码心得:
标准化是聚类分析的关键步骤,避免量纲差异主导结果。
ward.D2方法适合连续型数据,能有效最小化类内方差。
4.2 K-menas聚类主成分图
采用
factoextra::fviz_cluster函数,对标准化后数据作图;需要先将四个数值变量转化为矩阵,并将
1:150作为矩阵的行名;要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。
4.2.1 图形观察和代码编写的心得体会
图形观察:
PC1(解释方差 72.9%)主要区分花瓣特征,PC2(23.8%)区分花萼宽度。
Setosa(类别 1)完全分布在左下方,无重叠;Versicolor(类别 2)和 Virginica(类别 3)在右上方部分重叠,其中少数 Virginica 样本(如点 146-150)偏离群体,可能为异常值。
代码心得:
主成分图将高维数据降维至 2D,直观展示聚类结果,但需注意主成分的实际含义。
ellipse.type="norm"假设类别服从多元正态分布,适合评估类别分布的集中度。
4.2.2 七、热图
4.3 热图
采用
gplots::heatmap.2函数,对原始数据绘制热力图需要先将四个数值变量转化为矩阵,并将
Species作为矩阵的行名;要求横轴和纵轴均添加聚类树状图
4.3.1 图形观察和代码编写的心得体会
图形观察:
列聚类将花瓣长度和宽度聚为一组,花萼长度和宽度聚为另一组,反映花瓣与花萼特征的内部相关性。
行聚类中,Setosa 单独成一支,Versicolor 和 Virginica 部分混合;颜色深浅显示:Setosa 的花瓣特征值显著低于其他两类,花萼宽度值较高。
代码心得:
scale="column"可消除变量量纲影响,突出特征间的相对差异。热图结合聚类树状图,能同时展示数据相似性和特征分布,是探索多变量关系的有效工具。