GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

lmcinnes

umap – 一様マニホールド近似と投影

投稿日:

一様マニホールド近似と投影

UMAP

均一マニフォールド近似と投影(UMAP)は、t-SNEと同様に視覚化に使用できる次元削減技術ですが、一般的な非線形次元削減にも使用できます。 このアルゴリズムは、データに関する3つの仮定

  1. データはリーマン多様体上に一様に分布している。
  2. リーマンメトリックは局所的に一定です(または近似できます)。
  3. マニホールドはローカルに接続されています。

これらの仮定からマニホールドをファジーな位相構造でモデル化することが可能である。 埋め込みは、可能な限り同等のファジートポロジー構造を有するデータの低次元投影を探索することによって見出される。

基礎となる数学の詳細は、 ArXivの論文で見つけることができます。

McInnes、L、Healy、J、 UMAP:次元削減のための一様マニホールド近似と投影 、ArXiv e-prints 1802.03426、2018

重要なことは、あなたはそれについて心配する必要はないということです.IMAPを次元削減と視覚化のために、scikit-learnのt-SNEの置き換えとして簡単に使用することができます。

UMAPの使い方

umapパッケージはsklearnクラスを継承しているため、同じ呼び出しAPIを持つ他のsklearnトランスのすぐ隣に落ちます。

import umap
from sklearn.datasets import load_digits

digits = load_digits()

embedding = umap.UMAP().fit_transform(digits.data)

UMAPクラスに設定できるパラメータはいくつかあります。 主要なものは次のとおりです。

  • n_neighbors :これは、マニホールド構造の局所近似で使用される隣接点の数を決定します。 値を大きくすると、詳細なローカル構造が失われても、グローバルな構造が保持されます。 一般に、このパラメータは5〜50の範囲にあることがよくありますが、10〜15の選択が適切なデフォルトです。
  • min_dist :これは、埋め込みが圧縮ポイントをどれくらい緊密に許容するかを制御します。 大きな値を指定すると、埋め込みポイントがより均等に分散されますが、値が小さいほど局所構造に関してより正確にアルゴリズムを最適化できます。 感知可能な値は、0.001から0.5の範囲であり、0.1が妥当なデフォルト値である。
  • metric :これは、入力スペース内の距離を測定するために使用されるメトリックの選択を決定します。 さまざまなメトリックがすでにコード化されており、numbaによってJITdされている限り、ユーザー定義関数を渡すことができます。

これらのオプションを使用する例:

import umap
from sklearn.datasets import load_digits

digits = load_digits()

embedding = umap.UMAP(n_neighbors=5,
                      min_dist=0.3,
                      metric='correlation').fit_transform(digits.data)

UMAPはまた、疎な行列データへの適合をサポートする。 これは現在の実験的なものであり、最終的な最終実装よりも遅くなる可能性があります。

詳細とチュートリアルが来ています。

UMAPの利点

UMAPは、現行のインカネーションにおいて、いくつかの重要な勝利を収めています。

まず第一に、UMAPは高速です。 ほとんどのt-SNEパッケージで管理できるものを超えて、大規模なデータセットや高次元のデータを処理することができます。

第二に、UMAPは次元を埋め込むことでうまくスケールされます – それは視覚化のためだけではありません! UMAPは、他の機械学習タスクの予備ステップとして、汎用次元削減技術として使用できます。 ちょっと注意して(慎重になる方法のドキュメントが来ています)、 hdbscanクラスタリングライブラリとうまく連携します。

第3に、UMAPは、t-SNEよりもデータのグローバルな構造の側面を保存する方が優れていることがよくあります。 これは、データのより良い「全体像」を提供し、ローカル近隣関係を維持することができることを意味します。

第4に、UMAPは、 コサイン距離および相関距離などの非メトリック距離関数を含む広範囲の距離関数をサポートする。 あなたは最終的に余弦距離を使って適切に単語ベクトルを埋め込むことができます!

最後に、UMAPは、多様な学習において確かな理論的基盤を持っています(論文は近刊)。 これはアプローチを正当化し、すぐにライブラリに追加されるさらなる拡張(データフレームの埋め込み、半監督による次元削減など)を可能にします。

パフォーマンスと例

UMAPは、大きな高次元のデータセットを埋め込む際に非常に効率的です。 特に、入力ディメンションと埋め込みディメンションの両方でうまくスケールされます。 したがって、70000個のデータサンプルを有する784次元のMNISTディジットデータセットのような問題の場合、UMAPは約2.5分で埋め込みを完了することができる(ほとんどのt-SNE実装では約45分である)。 このランタイム効率にもかかわらず、UMAPは依然として高品質埋め込みを生成します。

3.1 GHz Intel Core i7プロセッサ(n_neighbors = 10、min_dist = 0.001)を使用して、2分22秒で埋め込まれた必須MNIST数字データセット。

しかし、MNIST数字データセットはかなり簡単です。 より良いテストは、ファッションアイテムの画像のより最近の「ファッションMNIST」データセット(7800次元の70000データサンプル)です。 UMAPはこの埋め込みを2分で正確に生成しました(n_neighbors = 5、min_dist = 0.1)。

UCIシャトルデータセット(8ディメンションで43500サンプル)は、2分39秒で相関距離が十分に埋め込まれています(相関距離計算に必要な時間が長いことに注意してください)。

インストール

UMAPはscikit-learn依存しており、 numpyscipyようなscikit-learnの依存関係に依存します。 UMAPではパフォーマンス上の理由からnumba要件が追加されています。 元のバージョンではCythonを使用していましたが、Numbaのコードの明瞭さ、シンプルさ、パフォーマンスが改善されました。

要件:

  • 貧弱
  • サイキー
  • シキット学習

インストールオプション

Condaは、conda-forgeチームの素晴らしい仕事によってインストールします。

conda install -c conda-forge umap-learn

conda-forgeパッケージは、Linux、OS X、およびWindows 64ビットで使用できます。

numbaとsklearnとそのすべての要件(numpyとscipy)がインストールされていると仮定してPyPIをインストールします:

pip install umap-learn

pipが依存関係を引きつけるのが難しい場合は、anacondaを使って手動で依存関係をインストールしてから、pipからumapを引くことをお勧めします。

conda install numpy scipy
conda install scikit-learn
conda install numba
pip install umap-learn

手動でインストールするには、このパッケージを入手してください:

wget https://github.com/lmcinnes/umap/archive/master.zip
unzip master.zip
rm master.zip
cd umap-master

要件をインストールする

sudo pip install -r requirements.txt

または

conda install scikit-learn numba

パッケージをインストールする

python setup.py install

ヘルプとサポート

このプロジェクトはまだ若いです。 私は現在、ノートブックとドキュメンテーションのサンプルを手に入れようとしていますが、利用可能になるまでにはしばらく時間がかかるかもしれません。 その間に問題開いてください。私は可能な限りの助けと指導を提供しようとします。 コードのドキュメンテーションストリングもチェックしてください。このドキュメンテーションは、パラメータの説明を提供します。

引用

あなたの仕事でこのアルゴリズムを引用したいのであれば、ArXiv論文は現在の参考文献です:

@article{2018arXivUMAP,
     author = {{McInnes}, L. and {Healy}, J.},
     title = "{UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction}",
     journal = {ArXiv e-prints},
     archivePrefix = "arXiv",
     eprint = {1802.03426},
     primaryClass = "stat.ML",
     keywords = {Statistics - Machine Learning, Computer Science - Computational Geometry, Computer Science - Learning},
     year = 2018,
     month = feb,
}

ライセンス

umapパッケージは3節BSDライセンスです。 楽しい。

貢献する

寄付は大歓迎です! 潜在的なプロジェクトには多くの機会がありますので、お手伝いしたい場合はお気軽にお問い合わせください。 コードからノートブック、サンプル、ドキュメントまですべて同じ価値があるので、あなたが貢献できないと感じないでください。 貢献するには、プロジェクトフォークして変更を加え、プルリクエストを提出してください。 私たちは、あなたの問題を解決し、コードをメインブランチに統合するよう最善を尽くします。







-lmcinnes

執筆者: