トポロジカルデータ分析の理解

# はじめに

# 位相空間とは

- 集合に「近さ」や「連続性」の概念を導入するための数学的構造
- 集合の元（点）間の具体的な距離を定義することなく、点の集まりがどのように「近接」しているか、または「開いているか」を抽象的に扱うことを可能にする
- 位相空間の定義には主に「開集合系」という概念が用いられ、この系に基づいて空間の位相的性質が定義される

位相空間の概念によって、連続性、収束、内部、境界、閉集合などの位相的性質が抽象的に定義されます。このフレームワークは非常に柔軟で、距離空間から離散空間まで、多岐にわたる数学的構造を記述するのに適しています。


## トポロジカル不変量とは

- 位相空間が持つ性質
- それらの空間を連続変形しても変わらない量のことを指す
- 位相空間の分類や比較に使用される
- 例.穴の数や結び目の絡まり方、空間の次元数などがトポロジカル不変量に該当する 


## トポロジカル不変量をあらわす量

ベッチ数、基本群、ホモロジー群、コホモロジー群などがある。
これらの不変量を用いることで、位相空間がどのように構成されているか、異なる空間が本質的に同じであるかどうか（同相かどうか）を判断する。

### ベッチ数
- トポロジカル空間のホモロジー群のランクを表す
- こ空間内の穴の数を数えるのに使われ、異なる次元における「穴」の数を示す
- 例.
    - 0次のベッチ数は連結成分の数を表す
    - 1次のベッチ数はループ（2次元では「穴」）の数を表す
    - 2次のベッチ数は空洞（3次元では「空間内の空間」）の数を表す


### 基本群、ホモロジー群、コホモロジー群

| 特徴           | 基本群                                   | ホモロジー群                               | コホモロジー群                              |
|--------------|---------------------------------------|-----------------------------------------|----------------------------------------|
| **定義**       | 空間内のループのトポロジカルな性質を研究する群      | 位相空間内の穴の数や連結性を数学的に記述する群   | ホモロジー群の双対として定義される群           |
| **目的**       | 空間の1次元的な性質、特にループの性質を捉える       | 空間の穴の数や形状の特徴を捉える                | 空間の構造だけでなく、その上の関数や量の性質を捉える   |
| **特性**      | 空間のループや結び目の構造に関する情報を提供     | 各次元における穴の数や空間のトポロジーを分析      | ホモロジー群よりも細かい代数的構造を研究         |
| **計算方法**    | 閉ループの連続変形によって得られる群を計算        | 空間を単純化された部分（単体など）に分解して計算    | ホモロジー群の計算方法を双対的に適用           |
| **応用分野**   | 位相幾何学、微分幾何学                     | 位相空間のトポロジカルな性質の研究に用いられる       | 物理学や数学での空間上に定義された量の研究に用いられる |
| **重要性**     | 空間がどのようにループで結ばれているかを理解するのに役立つ | 位相空間の形状や構造に関する基本的な情報を提供     | ホモロジー群に比べ情報量が多く、より詳細な分析が可能    |


# トポロジカルデータ分析(TDA)

データの「形」や「連続性」に焦点を当てることで、従来の数値解析や統計的手法では見過ごされがちな、データセット内の本質的なパターンや特徴を明らかにします。

## TDAの主な特徴

**1. スケール不変性**: TDAはデータのスケールや密度に依存せず、形状そのものの特性を捉えるため、様々なサイズや密度のデータに対して一貫した分析を行うことができる

**2. ノイズ耐性**: データのトポロジカルな特徴は、ノイズの影響を受けにくいため、ノイズの多いデータセットでも本質的な構造を抽出することが可能

**3. 多様なデータへの適用**: 空間データ、ネットワークデータ、時系列データなど、さまざまな種類のデータに適用できる

## TDAの主な手法

### 永続ホモロジー
データセットのスケールを変えながらトポロジカルな「穴」の出現と消失を追跡し、データの本質的な形状を捉える


```python
from ripser import ripser
from persim import plot_diagrams
import matplotlib.pyplot as plt
import numpy as np

# 合成データセットの生成（例: 2つの円）
t = np.linspace(0, 2*np.pi, 100)
x1 = np.sin(t)
y1 = np.cos(t)

x2 = np.sin(t) + 5
y2 = np.cos(t) + 5

data = np.vstack((np.column_stack((x1, y1)), np.column_stack((x2, y2))))

# 永続ホモロジーの計算
diagrams = ripser(data)['dgms']

# 永続図の可視化
plot_diagrams(diagrams, show=True)

```


### マッパー法
データをフィルタリングしてクラスタリングし、高次元データの構造を低次元の「地図」として可視化する

```python

import numpy as np
import kmapper as km
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA

# データセットの生成 (ここでは合成データを使用)
data, labels = datasets.make_moons(n_samples=1000, noise=0.05)

# KeplerMapper オブジェクトの初期化
mapper = km.KeplerMapper(verbose=1)

# データにフィルタリング関数を適用 (PCAによる次元削減をフィルターとして使用)
projected_data = mapper.fit_transform(data, projection=PCA(n_components=1))

# カバーの設定とクラスタリングアルゴリズムの適用
graph = mapper.map(projected_data, data, clusterer=DBSCAN(eps=0.3, min_samples=10))

# 可視化 (ここではHTMLファイルとして出力)
mapper.visualize(graph, path_html="mapper_visualization.html", title="Mapper visualization of moon dataset")

```

## TDAの応用例

1. 生物学: ゲノムデータやタンパク質の構造解析など、生命科学の分野で複雑な生物学的データの解析に利用されます。

2. 材料科学: 新材料の設計や性質予測において、材料の微細構造データから重要な特徴を抽出するために使われます。

3. ネットワーク分析: ソーシャルネットワークやインターネットのトポロジー分析により、コミュニティの構造や情報の流れを解析します。
4. 金融: 時系列データから市場の構造的変化を検出し、リスク管理や投資戦略の策定に役立てられます。

## TDAのためのライブラリ


| ライブラリ名          | 言語     | 特徴                                                                                      |
|---------------------|--------|------------------------------------------------------------------------------------------|
| [GUDHI](https://gudhi.inria.fr/index.html)               | C++/Python | 複雑なデータセットのトポロジーを研究するための強力なツール。シンプレクシャル複体の構築と永続ホモロジーの計算に特化。|
| [Ripser](https://github.com/scikit-tda/ripser.py)              | C++/Python | 大規模データセットの永続ホモロジーを高速に計算するための軽量ライブラリ。                                            |
| [HomCloud](https://homcloud.dev/)            | Python | 永続ホモロジーを利用してデータ解析を行うためのパッケージ。多次元データの解析に適している。                            |
| [Dionysus 2](https://mrzv.org/software/dionysus2/)          | C++/Python | 永続ホモロジーとその他の位相的構造を計算するためのライブラリ。                                                         |
| [TDAstats](https://cran.r-project.org/web/packages/TDAstats/index.html)            | R      | R言語で位相的データ解析を行うためのパッケージ。永続ホモロジーの計算と可視化を提供。                                  |
| [Javaplex](https://appliedtopology.github.io/javaplex/)            | Java   | 永続ホモロジーと関連する位相的概念を計算するためのライブラリ。                                                         |



# さいごに

TDAは、データから深い洞察を引き出すための強力なツールであり、さまざまな分野での研究や実践において、その価値が認識されつつあります。