! t-SNEの可視化を読むときに気をつけること

高次元データを二次元の図に落とし込む手法として、t-SNEはよく使われます。

単語の埋め込みベクトルや画像の特徴量など、人間には直接見えないデータを「地図」のように描き出してくれるのは魅力的です。

ただ、この手法で作った図には、見た目の分かりやすさと裏腹に、解釈できる情報が意外と限られているということ。

簡単に言えば、高次元のデータを、2次元に落とし込んで見る以上、見る角度によって、いかようにも見える点があります。
ピラミッドを見る角度によって、三角にも四角にも見えるようなことです。
だからこそ、何を正しく表現するための図なのかを意識する必要があります。
t-SNEは「近さ」という角度に特化した見方を提供してくれるのです。

関連記事

1. t-SNEが保証しているのは近さだけ

t-SNE(t-distributed Stochastic Neighbor Embedding)の仕組みを整理すると、この手法のポイントは「元の高次元空間で近い点同士を、低次元でも近くに配置する」ことです。
逆に言えば、それ以外の性質についてはあまり保証がありません。

t-SNEが保証しているのは近さだけ ✓ 保証される 近い点同士は 近くに配置 ✗ 保証されない ・クラスタ間距離 ・全体配置 図で離れて見える ≠ 実際に遠い ? ポイント:局所的な近傍関係のみを保持

たとえば、図の中でクラスタAとクラスタBが離れて描かれていたとします。
これを見て「元データでも遠いんだろう」と思いがちですが、実はそうとは限りません1
t-SNEは大域的な距離関係を維持する設計になっていないからです。
そのため、離れて見えるクラスタ同士でも実際には近い場合もあります。

ここが、PCA(主成分分析)のような線形の次元削減とは大きく違います2
PCAなら点間の距離にも一定の意味がありますが、t-SNEではそれが成り立たないと考えています。

1.1. t-SNEの手法

t-SNEは「高次元で近い点同士は、低次元でも近くに配置したい」という目標を、確率を使って実現します。

t-SNEの仕組み 1 高次元確率化 点間距離を 確率に変換 A B C 近い→高確率 遠い→低確率 ガウス分布 2 低次元確率化 2次元配置で 同様に確率化 A B C 密集を防ぐ t分布 3 最適化 確率の ズレを 最小化 KL-div
  1. 高次元での「近さ」を確率で表す
  2. 低次元でも同じような確率分布を作る
  3. 2つの確率分布を近づける
  4. 繰り返し最適化

つまりt-SNEは、「近さの関係性」を確率で捉えて、それを低次元でも再現しようとする手法です。

高次元空間              低次元空間
[A・B  C・D][A B    C D]
                      ・・    ・・

近い点同士の関係を     t分布で適度に
ガウス分布で表現  →   離しながら配置Code language: CSS (css)

元の高次元空間で、各点のペアについて「どれくらい近いか」を確率で表現します。
この確率は、ガウス分布(正規分布)を使って計算します。距離が近いほど確率が高くなります。

  • 点Aから見て点Bが近い → 高い確率
  • 点Aから見て点Cが遠い → 低い確率

2次元空間にランダムに点を配置し、そこでも同じように「近さ」を確率で表します。
ただし、低次元ではt分布(スチューデントのt分布)を使います。
これにより、点が密集しすぎる問題を回避できます。

高次元での確率分布と、低次元での確率分布の「ズレ」を測り、それを小さくするように点の位置を調整します。
このズレの測定には、KLダイバージェンス(Kullback-Leibler divergence)という指標を使います。

勾配降下法という手法で、少しずつ点を動かしながら、2つの確率分布のズレを小さくしていきます。
これを数千回繰り返すと、最終的な2次元の配置が得られます。

2. パラメータで印象が変わる

t-SNEにはperplexity(パープレキシティ)という重要なパラメータがあります。
これは「各点が何個くらいの近傍を持つか」を調整する値です。

パラメータで印象が変わる Perplexity 近傍点の数を調整 推奨値:5〜50 反復回数 収束まで十分に 目安:5000回程度 小さい Perplexity → 細かく分離 大きい Perplexity → 密集した配置 ⚠ 同じデータでも設定次第で全く違う図に

この設定次第で図の見え方がガラリと変わります。

perplexityを小さくすると、データは細かいクラスタに分かれて描かれます。
大きくすると、全体が密集した配置になります3
同じデータでも、設定によっては「明確な群がある」ように見えたり、「全体が均質」に見えたりするわけです。

もう一つ注意したいのが反復回数です。
t-SNEは最適化を繰り返して図を作りますが、途中で止めてしまうと点が線状に引き伸ばされたり、本来分かれるべきクラスタが潰れたりします。
最低でも1000回、できれば数千回は回さないと、安定した結果にならないことが多いです4

2.1. クラスタの大きさには意味がない

t-SNEで描かれた図を見ると、あるクラスタは大きく広がっていて、別のクラスタは小さくまとまっているように見えることがあります。
普通に考えると「広がっているクラスタは、元データでも分散が大きいんだろう」と思いますよね。

クラスタの大きさには意味がない 密度の均一化が働く 密な領域を広げ、疎な領域を縮める ✗ 誤った解釈 大きい ! 重要 ✓ 正しい理解 = サイズは元の分散を反映しない

ところが、t-SNEは意図的に密度を均一化する働きを持っています。
密な領域を広げ、疎な領域を縮める5
その結果、元データでは分散が全然違う集団が、図では同じくらいの大きさで描かれてしまいます。

この性質を知らずに「このクラスタは大きいから重要そうだ」と判断するのは危険です。

3. ノイズでも構造が見える

もう一つ厄介なのが、ランダムなデータでも「それらしい構造」が現れる点です。

クラスタの大きさには意味がない 密度の均一化が働く 密な領域を広げ、疎な領域を縮める ✗ 誤った解釈 大きい ! 重要 ✓ 正しい理解 = サイズは元の分散を反映しない

高次元空間にランダムに散らばった点を可視化すると、perplexityの設定によっては、きれいに分かれたクラスタが見えることがあります。
これは人間の視覚が、どんなデータにもパターンを見出そうとする性質によるものです。

実際、論文や解説記事では、ガウスノイズをt-SNEで可視化した例が紹介されていて、そこにははっきりした塊が描かれています6
データに意味のある構造がなくても、図だけ見ると「何か意味がありそう」に見えてしまうわけです。

だからこそ、可視化結果だけを根拠に「ここに群がある」と結論づけるのは避けるべきだと考えています。
元データに戻って検証するか、他の手法と比較する必要があります。

3.1. 形やトポロジーも慎重に

t-SNEの図には、時折リング状の構造や、あるクラスタが別のクラスタを包むような配置が現れることがあります。
こういった形状は、データの連続性や包含関係を示唆しているように見えます。

形やトポロジーも慎重に リング状構造 連続性を示唆? 包含構造 包含関係? 再現性の確認が重要 1. Perplexityを変える 2. 複数回実行する 3. 共通する特徴のみ   検討する

ただ、これも設定や初期値に依存して変わることが多いです。
一度の実行で現れた形を信じるのではなく、perplexityを変えたり、何度か実行したりして、再現性を確認する方が安全です。

複数回試しても共通して現れる特徴であれば、それは検討に値する手がかりになります7

4. 結局どこまで信じるか

ここまで書いてきたことをまとめると、t-SNEの可視化で信頼できるのは「近くに描かれた点同士は、元の空間でも近い可能性が高い」という一点にほぼ限られます。

距離、大きさ、形、全体配置については、そのまま受け取らない方がいい8

とはいえ、t-SNEが役に立たないわけでは全くありません。
データの中に潜む近傍関係を直感的に掴むには、よい手法の一つです。
問題は、その図から読み取れることと読み取れないことの境界を、使う側・見る側が理解しているかどうかです。

可視化は結論ではなく、仮説を生む道具です。
図を見て「面白いな」と思ったら、それを出発点として、元データでの検証や別の分析に進む。
そういう使い方をするなら、t-SNEは強力な味方になります。

美しい図に引き込まれすぎず、冷静に向き合う。
それがt-SNEとの付き合い方で大事です。

  1. Distill誌に掲載されたWattenbergらの論文では、3つのクラスタの距離関係が異なるデータセットに対して、perplexityの設定によってはクラスタ間距離が正しく保存されないことが実例で示されています。 – How to Use t-SNE Effectively
  2. PCAは高次元空間の分散を最大化する方向に射影する線形変換のため、点間の相対的な距離関係がある程度保たれます。一方、t-SNEは局所的な近傍関係の保持を優先する非線形変換です。 – t-SNEを理解して可視化力を高める
  3. 原著論文では、perplexityの推奨値を5から50の範囲としています。perplexityは各データ点の有効な近傍点の数を推定するパラメータで、データの局所的特性と大域的特性のバランスを調整します。 – Visualizing Data using t-SNE
  4. Distill論文では、実験において5000回のイテレーションを標準として使用しています。データセットによって収束に必要な回数は異なりますが、5000回程度を目安とするのが実用的です。 – How to Use t-SNE Effectively
  5. この現象は、t-SNEが低次元空間でt分布(自由度1のコーシー分布)を使用することで、crowding問題を解決している副作用として生じます。高次元から低次元への写像時に点が密集しすぎる問題を回避するため、結果として密度の均一化が起こります。 – t分布型確率的近傍埋め込み法 – Wikipedia
  6. Distill論文では、完全にランダムに生成された点群に対してt-SNEを適用すると、特定のperplexity設定で明確なクラスタ構造が現れる実例が示されています。これはt-SNEの誤動作ではなく、低いperplexityで局所的な変動を強調した結果です。 – 高次元のデータを可視化するt-SNEの効果的な使い方
  7. t-SNEの最適化は勾配降下法に基づいており、初期値によって結果が変わることがあります。そのため、異なるランダムシードで複数回実行し、再現性を確認することが推奨されます。 – t-SNE – MATLAB & Simulink
  8. Martin Wattenberg、Fernanda Viégas、Ian Johnsonによる2016年のDistill論文「How to Use t-SNE Effectively」では、t-SNEの可視化結果を正しく解釈するための具体的なガイドラインが、インタラクティブな例とともに示されています。 – How to Use t-SNE Effectively