第六章 样本相似性可视化课堂练习

Author

221527129江泽涛

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 类的花通常较小,花瓣短而宽,与其他两类差异明显;versicolorvirginica 在部分特征上有重叠,分类难度更高。

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对数据标准化是雷达图的必要步骤,避免因变量量纲不同导致图形失真。

    • alphalinetype参数可优化重叠线条的可读性,需根据数据密度调整。

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"可消除变量量纲影响,突出特征间的相对差异。

    • 热图结合聚类树状图,能同时展示数据相似性和特征分布,是探索多变量关系的有效工具。