内在次元

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次元空間の1つの点
Pythonで学ぶ教師なし学習

Versicolorデータセットの内在次元は2つ

  • サンプルは平坦な2次元面の近くに分布
  • したがって、2つの特徴量で再現可能

3次元空間にプロットされたVersicolorのポイント:がく片の長さ × がく片の幅 × 花弁の幅

Pythonで学ぶ教師なし学習

PCAは内在次元を特定する

  • 散布図はサンプルに2または3つの特徴量がある場合のみ可能
  • PCAは特徴量がいくつでも、内在次元を特定できる
  • 内在次元 = 有意な分散を持つPCA特徴量の数
Pythonで学ぶ教師なし学習

versicolorサンプルのPCA

回転したversicolorの点を3D空間にプロット: PC1 vs PC2 vs PC3

Pythonで学ぶ教師なし学習

PCAの特徴量は分散が大きい順に並ぶ

PCA特徴数と分散の棒グラフ

Pythonで学ぶ教師なし学習

分散と内在次元

  • 内在次元は、有意な分散を持つPCA特徴量の数
  • この例:最初の2つのPCA特徴量
  • つまり、内在次元は2となる

PCA特徴量の番号と分散を示す棒グラフ

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...