本質的次元

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

航路の本質的次元

  • 2特徴: 航路上の各点の経度・緯度
  • データは一見2次元
  • ただし1特徴(経路に沿った変位)で近似可
  • 実質1次元
latitude  longitude
  50.529     41.513
  50.360     41.672
  50.196     41.835
...

経度対緯度の散布図

Pythonで学ぶ教師なし学習

本質的次元

  • 本質的次元=データ近似に必要な特徴数
  • 次元削減の基本概念
  • 最もコンパクトな表現は何か?
  • PCAで検出可能
Pythonで学ぶ教師なし学習

versicolorデータセット

  • 「versicolor」はアヤメの一種
  • 特徴は3つ: がく片長、がく片幅、花弁幅
  • サンプルは3次元空間の点
Pythonで学ぶ教師なし学習

versicolorの本質的次元は2

  • サンプルは平らな2次元シート近くに分布
  • よって2特徴で近似可能

3D表示のversicolor点: がく片長 vs がく片幅 vs 花弁幅

Pythonで学ぶ教師なし学習

PCAは本質的次元を特定する

  • 散布図は特徴が2~3個のときのみ有効
  • PCAは特徴数に関わらず本質的次元を特定
  • 本質的次元=分散が有意なPCA特徴の数
Pythonで学ぶ教師なし学習

versicolorサンプルのPCA

回転後のversicolor点を3次元で表示: PC1 と PC2 と PC3

Pythonで学ぶ教師なし学習

PCA特徴は分散の降順で並ぶ

バー図: PCA特徴番号と分散

Pythonで学ぶ教師なし学習

分散と本質的次元

  • 本質的次元=分散が有意なPCA特徴の数
  • 本例では最初の2特徴
  • したがって本質的次元は2

バー図: PCA特徴番号と分散。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特徴番号と分散

Pythonで学ぶ教師なし学習

本質的次元は曖昧なことがある

  • 本質的次元は理想化概念
  • …常に唯一の正解があるとは限らない
  • ピエモンテワイン: 2や3、さらに多いとも主張可能

ワインデータセットのPCA特徴番号と分散のバー図

Pythonで学ぶ教師なし学習

練習しましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...