用于二维映射的 t-SNE

Python 中的无监督学习

Benjamin Wilson

Director of Research at lateral.io

用于二维映射的 t-SNE

  • t-SNE = "t-分布随机邻域嵌入"
  • 将样本映射到 2D(或 3D)空间
  • 映射大致保持样本的邻近关系
  • 适合数据集可视检查
Python 中的无监督学习

Iris 数据集上的 t-SNE

  • Iris 数据集有 4 个测量值,因此样本为 4 维
  • t-SNE 将样本映射到 2D 空间
  • t-SNE 不知道物种类别
  • …但仍基本将物种分开

对 Iris 数据集进行 t-SNE 的散点图

Python 中的无监督学习

解读 t-SNE 散点图

  • "versicolor"和"virginica"更难区分
  • 与 k-means 惯性图一致:可支持 2 或 3 个簇

对 Iris 数据集进行 t-SNE 的散点图

Python 中的无监督学习

sklearn 中的 t-SNE

  • 2D NumPy 数组 samples
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 [ 4.9  2.4  3.3  1. ]
 [ 6.3  2.8  5.1  1.5]
 ...
 [ 4.9  3.1  1.5  0.1]]
  • 列表 species,用数字(0、1、2)表示物种标签
print(species)
[0, 0, 1, 2, ..., 0]
Python 中的无监督学习

sklearn 中的 t-SNE

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
model = TSNE(learning_rate=100)

transformed = model.fit_transform(samples) xs = transformed[:,0] ys = transformed[:,1] plt.scatter(xs, ys, c=species) plt.show()

对 Iris 数据集进行 t-SNE 的散点图

Python 中的无监督学习

t-SNE 仅有 fit_transform()

  • 只有 fit_transform() 方法
  • 同时拟合模型并转换数据
  • 无单独的 fit()transform()
  • 不能将新样本扩展到已有映射中
  • 每次都需重新开始!
Python 中的无监督学习

t-SNE 学习率

  • 为数据集选择学习率
  • 选择不当:点会挤在一起
  • 尝试 50 到 200 之间的值
Python 中的无监督学习

每次都不同

  • t-SNE 特征每次都不同
  • 皮埃蒙特葡萄酒:运行 3 次,3 张不同散点图!
  • 然而:各葡萄酒品种(=颜色)彼此的相对位置一致

 

对葡萄酒数据集进行 t-SNE 的 3 次散点图

Python 中的无监督学习

Passons à la pratique !

Python 中的无监督学习

Preparing Video For Download...