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

Author

221527138李旺仔

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 明显较低,特征值较小。

-    virginica(蓝色):面积最大,Petal.Length 和 Petal.Width 较高,特征值较大。

-    versicolor(绿色):面积居中,特征值介于两者之间。

2.2 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

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

3 星图和脸谱图

3.1 星图

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

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

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

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

  • 图形类型:星图(star plot)以多边形形式展示鸢尾花数据集的特征(Sepal.Length、Sepal.Width、Petal.Length、Petal.Width),每条射线代表一个特征,射线长度反映特征值大小。
  • 数据分布:每个物种(setosa、versicolor、virginica)对应一个多边形,setosa 的多边形可能较小(特征值较低),virginica 较大(特征值较高),反映物种间的特征差异。
  • 可视化效果:星图直观对比多维数据,圆弧图(draw.segments=TRUE)增强区分度,布局(nrow=10)整齐,边框(frame.plot=TRUE)清晰。

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

  • 数据预处理:代码中通过 summarise 计算平均值并标准化(scale=TRUE),确保特征量纲一致,避免偏误。
  • 参数优化:face.type=1 选择基本样式,ncol.plot=4 控制布局,cex=1 调整字体,需根据数据量和展示需求调整。

4 聚类图和热图

4.1 系统聚类树状图

  • 采用factoextra::fviz_dend 函数,对标准化后数据作图;
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 要求分为3类,观察分类结果和Species 的差异;树状图的外观为圆形。

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

  • 结构:图中心是聚类树,外围按颜色(绿色、红色、蓝色)分段,分别对应不同组别。
  • 数据分布:绿色部分占较大比例,红色和蓝色较小,显示不平衡分布。
  • 层次关系:从中心向外,分支逐渐细化,反映样本间的相似性,左侧标记 0-20 可能表示距离或样本数。
  • 代码思路:可用 Python 的 scipy 或 plotly 绘制,结合层次聚类算法生成。

4.2 K-menas聚类主成分图

  • 采用factoextra::fviz_cluster 函数,对标准化后数据作图;

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

  • 要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。

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

  • 数据分布:数据点分为 3 个集群,分别用红色、绿色和蓝色椭圆表示,覆盖了 73%(Dim1)和 22%(Dim2)的方差。
  • 集群特征

    • 红色集群(cluster 1):集中于 Dim1 右侧,包含较多点(如 105、123),密度较高。

    • 绿色集群(cluster 2):位于 Dim1 中间偏右,点如 61、90,分布较均匀。

    • 蓝色集群(cluster 3):在 Dim1 左侧,点如 14、46,较为分散。

  • 聚类效果:三个集群分离较明显,红色和绿色集群重叠较少,蓝色集群独立性强。
  • 代码思路:可用 scikit-learn 的 KMeans 实现,结合 PCA 降维,绘制用 matplotlib 或 seaborn。

4.3 热图

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

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

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

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

  • 图形类型:热图+层次聚类,左侧行聚类(样本),上方列聚类(特征),中间颜色矩阵表示值。
  • 数据模式:setosa 与 versicolor、virginica 分开,Petal Length 和 Petal Width 在 setosa 中低(紫色),virginica 中高(红色)。
  • 特征相关性:Sepal Length 和 Petal Length 聚类靠近,表明相关性强。
  • 代码工具:用 seaborn 的 clustermap 绘制,需加载数据(如鸢尾花数据集),标准化处理。
  • 心得体会:数据需干净,颜色映射要清晰(如 ‘viridis’),聚类参数需调整,代码应注释以便复用。
  • 可视化意义:热图直观展现模式,代码编写需兼顾效率和图形效果。