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

Author

221527115杨诗婷

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 图形观察和代码编写的心得体会

2.1.2 平行坐标图心得体会

  1. 数据观察
    • 平行坐标图适合展示多变量关系,能清晰对比不同类别(如Species)在各维度的分布差异。
    • 若线条交叉密集,说明变量间相关性弱;若线条趋势一致,则存在潜在模式。
  2. 代码技巧
    • group=id:确保每条观测独立连线,避免错误连接。
    • geom_line + geom_point:增强可视化,点标记突出关键数据位置。
    • color=Species:通过颜色分类,直观对比组间差异(如setosa可能明显分离)。
  3. 优化方向
    • 添加alpha降低线条透明度,缓解重叠问题。
    • 使用scale_color_brewer()优化调色板,提升类别辨识度。
    • 若变量量纲差异大,需标准化(如scale())避免某些维度主导图形。

2.2 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

2.2.1 图形观察和代码编写的心得体会

2.2.2 雷达图心得体会

  1. 直观对比多维度特征:雷达图通过闭合区域清晰展现不同类别(如鸢尾花品种)在各变量的差异,适合快速发现组间优劣势。

  2. 美学设计关键点

    • 透明度(alpha:降低填充色透明度避免重叠遮挡,突出边界线。
    • 图例分多行(nrow=3:节省空间,提升可读性。
    • 坐标轴标签优化:调整字体大小和颜色(如color="blue4")增强辨识度。
  3. 数据预处理

    • 变量量纲差异大时需标准化(rescale=TRUE),否则图形可能失真。
    • 若变量过多,建议筛选关键维度,避免雷达图过于复杂。
  4. 局限性

    • 变量超过6-7个时易显得杂乱,建议分拆或改用平行坐标图。
    • 仅适合展示相对差异,不适用于精确数值比较。

3 星图和脸谱图

3.1 星图

  • 采用stars 函数,对标准化数据绘制圆弧星图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 设置图例在合适位置,能完整显示;将图形分为10行。

3.1.1 图形观察和代码编写的心得体会

3.1.1.1 1. 数据观察

  • 多变量对比:星图适合展示高维数据,每个观测(如不同鸢尾花品种)以星形表示,半径长度对应变量值,便于快速对比各样本特征。
  • 标准化重要性:由于变量量纲不同(如花萼长度与花瓣宽度),必须标准化处理,避免某些维度主导图形。

3.1.1.2 2. 图形设计要点

  1. 数据预处理

    • 数值变量需转为矩阵,并将分类变量(如Species)设为行名。
    • 标准化(如Z-score)确保各变量可比。
  2. 星图绘制关键

    • 分面布局:合理设置行数(如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. 图形设计要点

  1. 数据预处理

    • 选择关键变量(如花萼长宽、花瓣长宽),避免过多维度导致脸谱特征混乱。
    • 标准化数据(如scale())使变量量纲一致,防止某一特征过度影响脸型。
  2. 脸谱图绘制关键

    • 分列显示:设置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. 图形设计要点

  1. 数据预处理
    • 将数值变量转为矩阵,行名设为Species,便于后续比对聚类标签与真实类别。
    • 欧氏距离(默认)适合连续型数据,若变量相关性高可改用马氏距离。
  2. 树状图绘制关键
    • 分3类:通过k=3明确切割为3簇,与Species的3类别对照,评估聚类合理性。
    • 圆形布局circular=TRUE增强可视化紧凑性,但需调整cex避免标签重叠。
  3. 结果解读
    • 若聚类结果与Species高度一致(如setosa独立成簇),说明数值特征能有效区分品种。
    • 分支长度反映样本相似度,短分支表明virginicaversicolor可能较难区分。

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. 图形设计要点

  1. 数据预处理
    • 标准化数据(scale())消除量纲影响,确保聚类公平性。
    • 行名设为1:150(样本ID),便于后续追踪异常观测。
  2. 聚类与可视化关键
    • 正态轮廓:通过ellipse.type="norm"绘制正态分布轮廓,清晰展示各类边界。
    • 异常值检测:关注轮廓系数(silhouette)接近0或负值的样本,或远离簇中心的点。
  3. 结果解读
    • 若聚类结果与鸢尾花真实类别(Species)高度吻合,说明数值特征区分力强。
    • setosa通常能完美分离,而virginicaversicolor可能存在重叠区域。

4.2.1.3 总结

此图通过PCA+K-means高效揭示数据聚类结构,尤其适合快速定位异常观测。需注意:K-means对初始中心敏感,可多次运行取稳定结果;正态轮廓假设可能不完全适用,需结合实际数据分布判断。

4.3 热图

  • 采用gplots::heatmap.2 函数,对原始数据绘制热力图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 要求横轴和纵轴均添加聚类树状图

4.3.1 图形观察和代码编写的心得体会

  1. 数据预处理
    • 将数值变量转为矩阵,行名设为Species,列名保留变量名(如Sepal.Length)。
    • 无需标准化(因heatmap.2默认按行归一化),但若需强调变量间差异,可手动scale
  2. 热图绘制关键
    • 行列聚类Rowv=TRUE(行聚类)和Colv=TRUE(列聚类)同时启用,树状图显示在左侧和顶部。
    • 颜色映射col=colorRampPalette(c("blue","white","red"))(100) 定义蓝-白-红渐变,突出高低值。
  3. 异常值识别
    • 颜色明显偏离同簇其他样本的点(如某versicolor的花瓣长度异常高)可能为异常值。
    • 通过trace="none"关闭行列轨迹线,减少视觉干扰。

4.3.1.1 总结

热图+双聚类树状图是多变量分析的强大工具,既能宏观把握数据分布,又能微观定位异常样本。需注意:颜色方案的选择(如避免红绿色盲冲突)和聚类方法(默认欧氏距离+完全链接)对结果的影响。