今回は機械学習の教師なし学習、「次元削減(t-SNE)」のアルゴリズムについて記事を書いていきます。
次元削減にはいくつかの有名なアルゴリズムがありますが、ここでは多次元データに適した手法のt-SNEについて書いていきたいと思います。
次元削減とは入力データの説明変数を少なくする変換のことで、元の入力データの情報を保ちつつも少ない変数で元のデータの特徴を説明できるようにすることです。
例えば、Aさんの年齢(目的変数y)を予想したいと考えた時にAさんの情報として身長(説明変数x1)、体重(説明変数x2)のみ与えられているものとします。大人になると子供よりも身長、体重がともに高くなっていくのである程度年齢と相関がありそうです。この時の身長、体重という2つの変数を次元削減しようとするとこの2つの変数の情報をある程度保ちつつも変数を1つにすることを考えます。そうすると、身長、体重の関係から「体格」という一つの変数を作れそうです。そして、その体格という変数を用いて年齢を予想することもできそうです。このように、いくつかある変数を一つにまとめることを次元削減といいます。
通常は変数が何十何百とある多変数データを2つ、3つの変数までに削減することが一般的です。
では、なぜわざわざ次元削減を行うかというと理由は大きく2つあります。1つ目は多次元データを視覚化するためです。視覚化することによってパッとみよくわからないデータでも人間の頭の中で把握しやすくなります。データの傾向をとらえやすくなれば、EDAや分析結果の評価などでもより説明しやすくなります。2つ目は「次元の呪い」を防ぐことです。次元の呪いとはおおまかにいうとデータの持つ変数の数が多すぎる(次元数が多い)と機械学習の色々なアルゴリズムにおいて性能が低下してしまうことです。私も次元の呪いについてさほど詳しくないのですが、全データの持つ情報は変わらないとして、変数が多いよりも変数が少なく、一つの変数あたりの情報量が多いほうがアルゴリズムの性能が高まりやすいそうです。
では、t-SNEのアルゴリズムについて考えていきたいと思います。改めて、PCAのようないくつかある次元削減手法の中でt-SNEは使い勝手がいいです。t-SNEの特徴は、多様体空間(部分的に多次元空間でも2点間の距離が表せるような空間)に分布したデータを次元圧縮して可視化できることです。ちなみにPCAは線形のデータ全体をみて次元削減することが得意ですが、t-SNEは非線形データを局所的(2点間)をみて削減するのが得意です。つまり、t-SNEは多次元の構造を極力残してデータ間の距離の着目することで2~3次元へ削減します。
t-SNEのベースはSNEというアルゴリズムなのでまずこちらから説明します。
SNEは
の数式です。
これは、与えられたiという条件におけるjの条件付確率です。あくまでも表しているのは確率ですが、これにより、高次元空間のデータ間の近さを表現します。
その中身はそっくりそのまま多変量でのガウス分布の式になっています。3次元以上で扱われる正規分布のようなものだと理解していますが、詳しくは別記事を参照ください。
重要なのはxとは圧縮前のデータ集合Xの中の一つのデータ点です。