ストリーミングデータ用のt-SNEのバージョンはありますか?


19

t-SNEとBarnes-Hut近似の私の理解は、すべての力の相互作用を同時に計算し、各ポイントを2d(または低次元)マップで調整できるように、すべてのデータポイントが必要であるということです。

ストリーミングデータを効率的に処理できるt-sneのバージョンはありますか?したがって、私の観測が一度に1つずつ到着している場合、新しい観測を配置するのに最適な2Dマップ上の位置を見つけるか、2Dマップ上のすべてのポイントを継続的に更新して新しい観測を考慮します。

これは理にかなっていますか、それともt-sneの設定に反しますか?


Barnes-Hut近似により、t-SNEは非常にスケーラブルになります(少なくとも、100,000行で使用できます)。:あなたはRからそれを呼び出すことができますcran.r-project.org/web/packages/Rtsne/index.html
RUser4512

どうもありがとう!この回答セクションに回答があれば、私はあなたの回答に投票できてうれしいです。
トム

3
ニューラルネットワークで実装されたパラメトリックバージョンについては、こちらをご覧ください。lvdmaaten.github.io/publications/papers/AISTATS_2009.pdf
eyaler

回答:


15

私はまったく同じ質問をして、数週間前にアンドレジ・カルパシーが行ったCS231n講義のYouTubeビデオに投稿しました。Andrejの回答が続く、私が投稿した質問は次のとおりです。

https://www.youtube.com/watch?v=ta5fdaqDT3M&lc=z12ji3arguzwgxdm422gxnf54xaluzhcx

Q:

t-SNEは、低次元の特徴空間を作成するために画像のバッチ全体(より一般的にはデータ)を必要としますか?PCAを使用すると、データのバッチ上に低次元のフィーチャスペースを作成し、「再トレーニング」することなく、同じスペースに新しいデータポイントを投影できます。t-SNEについても同様ですか?

scikit-learnには多様体クラスの一部としてt-SNEがありますが、そのモジュールにはPCAのようにtransform()メソッドがないことに気づいたので、お願いします。したがって、少なくとも、sklearnでは、これは不可能に思えます。

私の質問はこれに要約されます。新しい画像で視覚化を継続的に更新したいストリーミングまたはオンラインの状況で、t-SNEをどのように適用しますか?おそらく、新しいイメージごとにバッチ全体にアルゴリズムを適用したくないでしょう。

A:

+ Evan Zamirはい、これはt-SNEで可能ですが、通常のt-SNE実装ではすぐにサポートされない可能性があります。通常、各ポイントの位置は最適化のパラメーターですが、高D->低D(例:ニューラルネット)からマッピングを作成し、位置を介してバックプロップすることもできます。その後、埋め込み関数になり、新しいポイントを投影できます。したがって、原則としてこれを妨げるものはありませんが、使用頻度が低いため、一部の実装ではサポートされない場合があります。


11

ストリーミングデータを扱う場合、1つのt-SNEマップにすべてのポイントを履歴に埋め込むことは望ましくない/必要ない場合があります。別の方法として、次の簡単な手順に従ってオンライン埋め込みを実行できます。

  1. 関心のある各パターンがウィンドウ期間に少なくとも数回現れるように、期間Tの時間ウィンドウを選択します。

  2. データストリームとしてウィンドウをスクロールします。タイムステップdtはTよりはるかに小さくなります。ウィンドウの各位置について、タイムウィンドウ内のデータポイントのt-SNE埋め込みを計算します。

  3. 各埋め込みに前の結果をシードします。t-SNEでは、低次元空間のデータポイントの初期座標を選択する必要があります。この場合、Tよりもはるかに小さいdtを選択するため、2つの連続する埋め込みがほとんどのデータポイントを共有します。すべての共有データポイントについて、現在の埋め込みの初期座標を前の埋め込みの最終座標に一致させます。このステップにより、類似のパターンが連続する埋め込み全体で一貫した表現を持つことが保証されます。(Python のsklearn実装では、seedパラメーターは「init」です。デフォルトでは、sklearn実装はポイントの初期位置をランダムに設定します)

注1:ウィンドウがデータセットをスライドするときに表現のメモリが失われないように、対象のパターンが任意の時間ウィンドウに少なくとも1回表示されることが重要です。実際、t-SNEは通常、一意のソリューションに収束せず、ローカルミニマムにのみ収束するため、メモリが失われると、埋め込みの2つのインスタンスで類似のパターンが非常に異なる方法で表される場合があります。

注2:この方法は、非定常時系列を処理する場合に特に関連します。非定常時系列では、時間の経過とともにゆっくりと進化するパターンを追跡する必要があります。実際、ここで各埋め込みは、計算される小さな時間ウィンドウに合わせて特別に調整されており、最良の方法で一時的に局所的な構造をキャプチャします(非定常データセット全体の完全な埋め込みとは対照的に)。

注3:この方法では、次の埋め込みをシードするために前の埋め込みの結果が必要になるため、連続する埋め込みを並列化することはできません。ただし、シード(つまり、ポイントの初期座標)はほとんどのポイント(連続する埋め込み間で共有されるすべてのポイント)に対して適切に選択されるため、通常、埋め込みは数回の反復で非常に高速に収束します。

非定常時系列へのこの方法の適用例については、この記事(ICLR 2016、Learning a stable representations in changing world in the online t-SNE:proof of concept of songbird)が正常に適用されたこの記事を参照してください鳴き鳥の開発全体で音節の出現を追跡する。


2
コミュニティへようこそ。自己盗作はクールではありません。ここで最初の投稿を参照します。もちろん、複数の回答に同じ理論的根拠を使用し、フレーズを1つまたは2つコピーして貼り付けるか、前の回答に直接リンクすることができます。ただし、これらは、最初の文が変更された以前の回答の逐語的なコピーに投稿を下げないでください。CVのコンテンツの品質を低下させ、あなたによる学力の乏しいスポーツマンシップを示します。
usεr11852は回復モニック語る

5
@usεr11852他のスレッドがこのスレッドの複製であるため、問題が発生しました。したがって、私はもう一方を閉じて、これとマージし、余分な答えを削除しました。一般的に、Stéphaneは、2つのスレッドでまったく同じ返信を投稿することに触発されたときはいつでも、それらの1つを重複としてフラグを立てて、それらを結合できるようにしてください。
whuber

2
@usεr11852OK、重複した回答でごめんなさい、私は新しい貢献者なので、まだベストプラクティスがわかりません。
ステファン拒否

1
@whuber質問をマージしてくれてありがとう。
ステファン拒否

1
その結果、2つのアップ投票を失ったようです。それは残念です。+1 :) CVへようこそ。
アメーバは、モニカを復活させる

7

A-tSNEと呼ばれる最近公開されたバリアントがあります。これは、関心領域に基づいて、またはユーザー入力に基づいて、新しいデータを動的に追加し、クラスターを精製することをサポートします。以下にリンクされている論文には、これに関するいくつかの非常に良い例があります。

引用:arXiv:1512.01655

プログレッシブのVisual Analyticsの近似とユーザー操作可能なtSNE ニコラPezzotti、ボウドレンPF Lelieveldt、Maatenデア・ローレンスバン、トーマスHöllt、エルマーEisemann、アンナ・ビラノバ

概要:

Progressive Visual Analyticsは、可視化と中間結果との相互作用により、既存の分析手法の対話性を改善することを目的としています。データ分析の1つの重要な方法は、たとえば、効率的に視覚化および分析できる2D埋め込みを作成するための次元削減です。t-Distributed Stochastic Neighbor Embedding(tSNE)は、いくつかの高次元データの視覚化に適した手法です。tSNEは意味のある中間結果を作成できますが、プログレッシブビジュアルアナリティクスでのアプリケーションを制限する初期化が遅いという問題があります。インタラクティブなデータ探索を可能にするために、速度と精度をトレードオフする制御可能なtSNE近似(A-tSNE)を導入します。リアルタイムの視覚化技術を提供し、密度ベースのソリューションと近似度を検査するためのマジックレンズが含まれます。このフィードバックを使用して、ユーザーはローカルの改良を決定し、分析中に近似レベルを操作できます。インタラクティブなデータ分析の有効性を示すために、実際の研究シナリオと高次元ストリームのリアルタイム分析で、いくつかのデータセットを使用してこの手法を実証します。


サイトへようこそ。私たちは質の高い統計情報の永続的なリポジトリを質問と回答の形で構築しようとしています。したがって、linkrotによるリンクのみの回答には注意が必要です。完全な引用と情報の要約をリンクに投稿できますか?
GUNG -復活モニカ

6

Barnes-Hut近似により、t-SNEは非常にスケーラブルになります(少なくとも、100,000行で使用できます)。Rから呼び出すことができます:Rtsne

実装されたアルゴリズムの複雑さは Onログn 素朴な実装の複雑さは On2。基礎となる近似の詳細については、ツリーベースのアルゴリズムを使用したt-SNEの高速化をご覧ください


1
250Kの密集した1Kのラインで使用しました-実際にはかなり良かったのですが、メモリに縛られています。
ウラジミールチュパヒン

2

バージョン0.17.0以降、Barnes-Hut近似がscikit-learnのデフォルトの方法になりました。

デフォルトでは、勾配計算アルゴリズムはO(NlogN)時間で実行されるBarnes-Hut近似を使用します。method = 'exact'は、O(N ^ 2)時間でより遅いが正確なアルゴリズムで実行されます。最近傍エラーを3%より良くする必要がある場合は、正確なアルゴリズムを使用する必要があります。ただし、正確な方法を数百万の例に拡張することはできません。バージョン0.17の新機能:Barnes-Hutによる近似最適化方法。


これは質問を解決しません。BHは高速ですが、ストリーミングをサポートしていません。たぶん、あなたはこれがこの答えに対するコメントであることを意味したのでしょう。
merv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.