2016-04-10 52 views
0

データを視覚化するための次元削減(DR)技法を実行したいと思います。 Barnes-hut tsneを使用する予定ですが、サンプルアプリケーションには、user guideに従った通常のマトリックス形式のデータがあるため、TSNEへの入力方法はわかりません。私は5000の異なる値を持つ約1200万のレコードを持っており、私はそれらをメインメモリに格納することができません。ディメンションリダクション(DR)を実行して、2次元散布図でこれらの異なる値を視覚化したいと考えています。私は隣接リスト形式のデータを持っています(あまりにも希薄です)。スパース行列の次元削減(TSNE/PCA)

2 3 10 
4 6 
7 
7 9 10 
2 
5 6 

これらは私の最初の6を記録することになっています

は、私はレコードを以下している、としましょう。この場合、私には10の異なる値しかありません。そして、上記の行列(表)は、1番目のレコードが2,3の列を1とし、他の列が0(隣接リスト)であることを示しています。

これらの異なる値は、文書(記録)中に存在する単語(ラベル)にマッピングされます。

このようなデータを使用して高速TSNEを実行するにはどうすればよいですか。 TSNEが要求する互換フォーマットに変換する方法は?どの言語を好むべきですか?

私はPythonやMATLABを使用することを好むが、何か他のものも結構です。あなたの提案を教えてください。

P.S.私は本当に高いコンピューティングマシンは、タスクを行う必要があります。

答えて

1

バーンズ・ハットT-SNEコードは、箱から出して、これをサポートしていませんが、これをサポートようにするコードは比較的単純な変更する必要があります。具体的には、次のコード行を参照:https://github.com/lvdmaaten/bhtsne/blob/master/tsne.cpp#L123

この行は、行圧縮スパース行列形式でNxN類似性マトリックスとrow_Pcol_P、及びval_Pを充填します。つまり、row_Pは、col_Pval_Pにインデックスを含むN+1要素を持ちます。これらの要素の両方は要素(行数はN、スパース行列の0以外のエントリ数はnnz)です。 val_Pの要素は、負ではないとみなされます(たとえば、ガウスカーネル値)。

あなたができる最も簡単なことは、この関数呼び出しを、あなた自身の入力データに基づいて類似行列を計算する新しい関数を呼び出すことで置き換えることだと思います。 Matlabで類似行列計算を実装して、結果の疎行列を取得してrow_Pcol_P、およびval_PにコピーするMexコードのビットを書き込むこともできます。 Matlabでは行圧縮された疎行列形式も使用されるため、これは簡単です。 mxGetIrmxGetJc Mex-functionsを見てください。

バーンズ・ハットT-SNEコードの残りの部分は入力の類似性を計算したかの不可知論ですので、あなたが他の変更を加える必要はありません。