内在维度

Python 中的无监督学习

Benjamin Wilson

Director of Research at lateral.io

航线的内在维度

  • 2 个特征:航线点的经度和纬度
  • 数据集看似是二维
  • 但可用一个特征近似:沿航线的位移
  • 本质上一维
latitude  longitude
  50.529     41.513
  50.360     41.672
  50.196     41.835
...

经度对纬度的散点图

Python 中的无监督学习

内在维度

  • 内在维度 = 近似该数据集所需的特征数
  • 维度约简的核心思想
  • 样本的最紧凑表示是什么?
  • 可用 PCA 检测
Python 中的无监督学习

Versicolor 数据集

  • "versicolor",鸢尾花的一个物种
  • 仅 3 个特征:萼片长、萼片宽、花瓣宽
  • 样本是 3D 空间中的点
Python 中的无监督学习

Versicolor 数据集的内在维度为 2

  • 样本接近一张平的二维"薄片"
  • 因此可用 2 个特征近似

Versicolor 点在 3D 空间:萼片长 对 萼片宽 对 花瓣宽

Python 中的无监督学习

PCA 识别内在维度

  • 散点图仅适用于有 2 或 3 个特征的样本
  • PCA 可在任意特征数时识别内在维度
  • 内在维度 = 具有显著方差的 PCA 特征数
Python 中的无监督学习

Versicolor 样本的 PCA

旋转后的 versicolor 点在 3D 空间:PC1 对 PC2 对 PC3

Python 中的无监督学习

PCA 特征按方差降序排列

柱状图:PCA 特征编号 vs 方差

Python 中的无监督学习

方差与内在维度

  • 内在维度是具有显著方差的 PCA 特征数
  • 本例:前两个 PCA 特征
  • 因此内在维度为 2

柱状图:PCA 特征编号 vs 方差,红线位于 1 与 2 之间的垂直线

Python 中的无监督学习

绘制 PCA 特征的方差

  • samples = versicolor 样本数组
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

pca = PCA()
pca.fit(samples)
PCA()
features = range(pca.n_components_)
Python 中的无监督学习

绘制 PCA 特征的方差

plt.bar(features, pca.explained_variance_)
plt.xticks(features)
plt.ylabel('variance')
plt.xlabel('PCA feature')
plt.show()

柱状图:PCA 特征编号 vs 方差

Python 中的无监督学习

内在维度可能有歧义

  • 内在维度是一种理想化
  • ……并不总有唯一正确答案!
  • 皮埃蒙特葡萄酒:可辩称为 2、3,或更多

柱状图:葡萄酒数据集的 PCA 特征编号 vs 方差

Python 中的无监督学习

开始练习!

Python 中的无监督学习

Preparing Video For Download...