データの見える化・可視化をした結果を評価する指標を開発しました、ハイパーパラメータの設定もこれでOK (Python・MATLABプログラムあり)

応化先生と生田さんが論文 “k-nearest neighbor normalized error for visualization and reconstruction – A new measure for data visualization performance” について話しています。

応化:今日は、k3n error (k-nearest neighbor normalized error for visualization and reconstruction) についてです。

生田:なんですか、それ?

応化:変数の次元を圧縮して、データを見える化・可視化した結果を評価する指標です。

生田:データの可視化結果を評価?

応化:はい、回帰分析だったら r2, RMSE, MAE など、クラス分類だったら正解率、精度、検証率など、モデルを評価する指標がありましたよね。

生田:はい!たとえば、テストデータの r2 が大きいモデルがよいモデル、MAEが小さいモデルがよいモデル、って感じですよね。

応化:そうです。あやしかったらこちらで復習してください。

回帰モデル・クラス分類モデルを評価・比較するためのモデルの検証 (Model validation)
いろいろな回帰モデル・クラス分類モデルを構築したり、モデルの中のハイパーパラメータ (PLSの成分数など) を決めたりするとき、モデルを評価・比較しなければなりません。そのためのモデルの検証 (model validation) の方法につ...

生田:今回の k3n error は可視化手法における MAE って感じ?

応化:そんな感じです。k3n-error が小さいほどよいですよってなります。

生田:へー、中身についてはあとで聞くとして、どんなときに使えるんですか?

応化:たとえば、可視化手法として t-distributed Stochastic Neighbor Embedding (tSNE) を使うとき、perplexity を設定しなければいけませんよね。どうやって決めていましたか?

生田:10とか30とかでやってみて、見た目でこっちのがいいかなって選んでいました。

応化:そうするしかありませんよね。k3n error を使えば、perplexityを5, 10, 15,…, 95, 100 と変化させて、それぞれで k3n error を計算して、結果的に k3n error が一番小さくなった perplexityを使う、ってことができるようになります。

生田:おー、自動的に決められて便利ですね。

応化:他にも、

  • ガウシアンカーネルを用いた Kernel Principal Component Analysis (KPCA) の γ (ガンマ)
  • Generative Topographic Mapping (GTM) の マップサイズ、radial basis functions (RBFs) の数、RBFの分散、EMアルゴリズムのパラメータ
  • Isometric mapping (Isomap) の最近隣数
  • Locally Linear Embedding (LLE) の最近隣数

など、すべての可視化手法におけるハイパーパラメータの決定に使えます

生田:いい感じですね。クロスバリデーションは使えないんですか?

応化:GTM なら使えますが、他は難しいです。可視化する前の変数を X, 可視化した後を Z として、Z = f(X) のように、陽に関数の形で表せないとクロスバリデーションは使えないのです。

生田:それなら k3n error が役立ちそうですね。

k3n errorとは?

応化:では具体的な k3n error (knearest neighbor normalized error for visualization and reconstruction) の話に移ります。

生田:お願いします!

応化:k3n error は、可視化する前のサンプル間のユークリッド距離と、可視化した後のサンプル間のユークリッド距離に基づきます。

生田:可視化する前と後とで、それぞれすべてのサンプル間の距離を計算しておけば準備 OK ですね!

応化:その通りです。次に、下の“データの可視化・見える化のための手法を選ぶときの2つのポイント”の一つ目を復習します。

データの可視化・見える化のための手法を選ぶときの2つのポイント
データは、基本的に下図のように多次元で表現されていますので、(次元の数は、変数の数とお考えください。厳密には異なりますが、だいたい同じです。)工夫をしないとデータセットの全体像を見ることはできません。下図のように、多次元空間に存在するサンプ...

生田:サンプルの近接関係は、多次元空間⇔2次元平面 で保持されているか?、ということで、細かく分けると、

  • ① 多次元空間において近いところにあるサンプル同士は、2次元平面においても近いか?
  • ② 2次元平面において近いところにあるサンプル同士は、多次元空間においても近いか?

ということですよね。

応化:その通りです!k3n error では、① と ② を同時に評価します。2つとも近ければいいわけですよね。

生田:はい。

応化:① では、あるサンプルにおいて、多次元空間で最も近い k 個のサンプルを選択します。その k 個のサンプルの、2次元平面の距離を計算して小さい順に並びかえます。

生田:k個の距離があります。

応化:そうです。そして、2次元平面における最も近い k 個のサンプルの距離で、それぞれ引いてから割ります。そしてk個を足し合わせて、kで割ります。ここまでは論文中の式(1)に対応します。

生田:もし、多次元空間で最も近い k 個のサンプルと2次元平面で最も近い k 個のサンプルが同じであれば、0になる?

応化:その通りです。なので、かならず 0 以上になります。そして、それをすべてのサンプルで平均化します (論文中の式(2)).

生田:了解です。

応化:これで、上の①を評価したことになります。② については、①における多次元空間を2次元平面、2次元平面を多次元空間にかえて同じ計算を行うだけです。これら2つを足し合わせたものが、k3n errorです。

生田:なるほど、多次元空間において近いところにあるサンプル同士が2次元平面においても近いほど、2次元平面において近いところにあるサンプル同士が多次元空間においても近いほど、k3n errorが小さくなるわけですね。

応化:その通りです!多次元空間におけるユークリッド距離は、ちゃんと標準化 (オートスケーリングしてから計算しましょう。

生田:了解です。

k3n-errorのPython・MATLABコード

応化:ちなみに、k3n errorを計算するための、Python のプログラムと・MATLAB プログラムが こちらの Github にあります。DCEKit をインストールしても、k3n-error を実行できます。

DCEKit (Data Chemical Engineering toolKit) を PyPI にリリース!
これまで化学データ・化学工学データのデータ解析に役立つツールや金子研で開発された手法に関する Python コードを Github にて公開してきました。このたびは、これらのツール・手法 (の一部) に加えて、新たな機能を追加して、DCEK...

ぜひ活用してください。

生田:はい、可視化手法のハイパーパラメータを決めるときに使ってみます!

 

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

タイトルとURLをコピーしました