densMAP: 高次元データの分布の密度を反映した埋め込み手法

densMAPは、高次元データの分布の密度を反映した埋め込み手法です。この手法は、UMAPの拡張として開発され、データの密度情報を保持しながら次元削減を行うことができます。最新のumap-learnパッケージ（バージョン0.5.5以降）では、densMAPがデフォルトで組み込まれており、より簡単に利用できるようになりました。

UMAPについて

https://qiita.com/yo-naka/items/66bc83e4ebf1e50d364c

## densMAPの理論

UMAPは、データが何らかの多様体上に一様に分布しているという仮定に基づいています。これは多くの場合効果的ですが、データの相対的な局所密度に関するより多くの情報を保持したい場合があります。densMAPは、局所密度の推定値を計算し、それらの推定値を低次元表現の最適化における正則化項として使用します。

## Pythonでの実装例

densMAPは、`umap-learn`パッケージを使用して簡単に実装できます。以下に基本的な例を示します：

```python
import umap
from sklearn.datasets import load_digits

digits = load_digits()

embedding = umap.UMAP(densmap=True).fit_transform(digits.data)
```

この例では、scikit-learnの手書き数字データセットに対してdensMAPを適用しています。

## パラメータの調整

densMAPには以下のような重要なパラメータがあります：

- `n_neighbors`: 局所的な多様体構造の近似に使用される近傍点の数（デフォルト: 15）
- `min_dist`: 埋め込み空間での点の圧縮の度合いを制御（デフォルト: 0.1）
- `dens_lambda`: 密度保存目的の重み（デフォルト: 2.0）
- `dens_frac`: 密度保存項を含む反復の割合（デフォルト: 0.3）

これらのパラメータを調整することで、結果を最適化できます：

```python
embedding = umap.UMAP(n_neighbors=25, min_dist=0.1, n_components=2,
                      densmap=True, dens_lambda=2.0, dens_frac=0.3).fit_transform(data)
```

## Rでの実装例

densMAPは、Rの`densvis`パッケージを使用しても実装できます。以下に基本的な例を示します：

```R
library(densvis)
set.seed(42)
x <- matrix(rnorm(200), ncol=2)
result <- densmap(x)
```

この例では、2次元の正規分布データに対してdensMAPを適用しています。`densvis`パッケージの`densmap`関数も同様なパラメータを持っています：

- `n_components`: 埋め込み空間の次元数（デフォルト: 2）
- `dens_frac`: 密度保存項を含む反復の割合（デフォルト: 0.3）
- `dens_lambda`: 密度保存目的の重み（デフォルト: 0.1）
- `n_neighbors`: 局所的な多様体構造の近似に使用される近傍点の数（デフォルト: 30）

これらのパラメータを調整することで、結果をカスタマイズできます：

```R
result <- densmap(x, n_components = 2, dens_frac = 0.3, dens_lambda = 0.1, n_neighbors = 30)
```

## 応用例

densMAPは様々なデータセットに適用できます。特に、高次元データの可視化や、クラスター分析に有効です。

### 単細胞トランスクリプトームデータの解析

densMAPは、単細胞RNAシーケンシングデータの解析に特に有用です。細胞の遺伝子発現パターンの密度を保持しながら、低次元空間に埋め込むことができます。

### 画像データセットの可視化

MNIST、Fashion-MNIST、Galaxy10SDSSなどの画像データセットの可視化にも適用できます。これらのデータセットでは、densMAPがクラス間の密度の違いをより明確に表現することができます。

## まとめ

densMAPは、高次元データの密度情報を保持しながら次元削減を行う強力な手法です。UMAPと比較して、データの密度構造をより正確に反映した埋め込みを生成することができます。特に、クラスター間の密度の違いが重要な場合や、データの局所的な構造を保持したい場合に有効です。

`umap-learn`パッケージ（Python）や`densvis`パッケージ（R）を使用することで、簡単にdensMAPを実装し、様々なデータセットに適用することができます。パラメータを調整することで、密度の影響を制御し、目的に応じた最適な埋め込みを得ることができます。

様々な研究環境や分析ワークフローに組み込まれている実績があります。

## 参考文献
1. [umap-learn · PyPI](https://pypi.org/project/umap-learn/) (アクセス日: 2024-08-15)
2. [GitHub - lmcinnes/umap: Uniform Manifold Approximation and Projection](https://github.com/lmcinnes/umap) (アクセス日: 2024-08-15)
3. [UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction](https://arxiv.org/abs/1802.03426)
4. [Assessing Single-Cell Transcriptomic Variability through Density-Preserving Data Visualization](https://www.nature.com/articles/s41587-020-00801-7)
5. [Parametric UMAP: learning embeddings with deep neural networks for representation and semi-supervised learning](https://arxiv.org/abs/2009.12981)
6. [densmap: Density-preserving UMAP](https://rdrr.io/bioc/densvis/man/densmap.html) (アクセス日: 2024-08-15)
8. [GitHub - hhcho/densvis: Density-preserving data visualization tools den-SNE and densMAP](https://github.com/hhcho/densvis) (アクセス日: 2024-08-15)
9. [densvis source: R/densmap.R](https://rdrr.io/bioc/densvis/src/R/densmap.R) (アクセス日: 2024-08-15)
10. [Using UMAP for Clustering — umap 0.5 documentation](https://umap-learn.readthedocs.io/en/latest/clustering.html) (アクセス日: 2024-08-15)