次元削減,次元圧縮 (dimensionality reduction) t-SNE

Van der Maatenページによれば 次元圧縮 dimensionality reduction には 34 種類の方法があります。PCA, FA, MDS などが心理学では伝統的 無批判 に使われてきました。 心理学者は因子分析を好む 因子分析偏愛者,因子分析フェチ,factor analysis-pheria 方が多いようです。ですが,そのことを支持する理論的根拠は存在しません

PCA

  • 主成分分析 PCA: principal component analysis は一番最初に提案された手法で,固有値分解 に基づきます。
  • 特に 2 次元へのマッピングは皮質地図 cortial map との対応が考えられるので興味深い
  • 条件付き最大値を求める一般的方法でラグランジアン Lagrangian,あるいはラグランジェの未定乗数法 Lagrange multiplier が定義される。

(最初は) 知らない方が良い 知らなくても良いラグランジアン (ラグランジェ方程式) の説明

  1. Khan アカデミーのラグランジアンの説明,
  2. Constrained optimization introduction,
  3. Lagrange multipliers, using tangency to solve constrained optimization,
  4. Finishing the intro lagrange multiplier example
  5. The Lagrangian,
  6. Meaning of the Lagrange multiplier,

ちなみに ガンマ関数とは次の Python コードから分かるように,順列の一般化です

1
2
3
4
5
import math

math.gamma(1)
math.gamma(2)
math.gamma(3)

t-SNE

  • t-SNE は「ティーズニー」と発音します。
  • 心理学者以外では支配的(かも)
  • t: **-分布
  • S: Stochastic 確率的
  • N: Neigbor 隣接(隣人)
  • E: Embedding 埋め込み
  • PCA, FA, 古典的 MDS (Torgerson) が固有値に基づくのに対して,t-SNE は多次元空間と低次元空有間への写像について確率的な仮定を考え,両者の分布が近づくように学習を行う。
    • ここで,2 つの分布の距離を考える。距離の定義には様々が提案がなされているが カルバック=ライブラー ダイバージェンス(あるいは KL 距離)が用いられる。情報理論 をみてください。
  • 以下は van der Maaten and Hinton (2008) のオリジナル論文に掲載された結果


van der Maaten and Hinton (2008) Fig.2


t 分布()と標準正規分布の確率密度分布 pdf

数学恐怖症 (math-phobia) 数学愛好者 の皆様へ

スチューデントの 分布 の確率密度関数 pdf は以下のとおり:

  • おそろしい形をしていますが,ポイントは 関数(がんまかんすう)であり,内部で使われている (「にゅう」と読むギリシャアルファベット)は自由でデータ数 です。
  • ガンマ関数 であり, 階乗の連続量への拡張とみなすことができます。

  • 最も簡単な場合 を考えれば,上式は以下のようになります。

  • さらに , を考慮すれば,以下の式を得ます。

  • は円周率で定数ですから,グラフの形を考えるときには無視して構いません。従って 分布の本質は であることになります。

  • 以下のコードを colab で確認してみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import math

print(math.gamma(1/2))

for i in range(1,11):
    print(i, math.gamma(i))

math.sqrt(math.pi) == math.gamma(1/2)

# ガンマ関数の概形を描いてみましょう
import matplotlib.pyplot as plt
x = np.linspace(0.25,4)
y = [math.gamma(xi) for xi in x] 
plt.plot(x,y)

# つづいて正規分布と $t$-分布とを比較してみましょう
from scipy.stats import norm

x = np.linspace(norm.ppf(0.001), norm.ppf(0.999), 100)
nu = 1

plt.plot(x, t.pdf(x, nu), 'b-', lw=2, label='t')
plt.plot(x, norm.pdf(x),  'r-', lw=2, label='norm')
plt.legend()

参考資料