[TDA 튜토리얼] 위상수학적 데이터 분석(TDA)를 활용한 머신러닝(Machine Learning) 튜토리얼 - (2)

Seong-Heon Lee·2023년 1월 19일
0

[TDA의 기초]

목록 보기
6/8
post-thumbnail

TDA and Machine Learning Tutorial

본 포스팅은 2023년 1월 16일 - 17일 양일간 진행된 부산대학교 수학과 빅데이터 기반 미래 교육 인재 양성 프로그램(주최 : 부산대학교 빅데이터 기반 금융 수산 제조 혁신 산업수학센터)에서 필자가 시연한 TDA 튜토리얼을 기반으로 하고 있습니다.
Python 코드 실습 자료는 필자의 Github repository에서 확인하실 수 있습니다.

이번 포스팅의 프로그래밍 실습 자료는 위 깃허브 저장소에 포함되어 있습니다.
프로그래밍 구현이 궁금하신 분은 깃허브를 참고해주세요

3. Programing Practice

앞서 PH는 매끄러운 다양체가 가진 호몰로지의 추정량처럼 생각할 수 있다고 했습니다.

다음 예제들은 호몰로지가 잘 알려진 대표적인 매끄러운 다양체들(구면, 토러스, 뫼비우스의 띠, 클레인 병)에서 샘플된 점들로부터 PH를 얻어볼 것입니다.

이를통해 데이터로부터 얻은 PH가 어떤 방식으로 데이터의 기하학적 성질을 표현하는지 살펴볼 수 있을 것입니다.

이 작업을 위해 Python의 TDA를 위한 라이브러리 gudhi를 사용할 것입니다.

프로그래밍 실습은 필자의 Github repository를 참고해주세요.

3.1) Point cloud

Point cloud 데이터는 3차원 공간 상에 샘플된 점들로 구성된 데이터입니다.

Lidar 센서와 같이 3차원 공간을 인식하는 기기로부터 얻은 데이터들이 주로 point cloud 형태로 저장됩니다.

구면, 토러스, 뫼비우스의 띠, 클레인 병 모양의 실제 사물로부터 센서를 이용해 point cloud 데이터를 얻은 상황을 가정합시다.

각 데이터는 1000~2000개 사이의 점을 샘플링 하여 얻어진 것이며, 기계이기 때문에 조그만 노이즈도 포함되어 있습니다.

이런 데이터로부터 원본 사물의 모양을 특징지을 수 있는 정보를 만들어낼 수 있을까요?

(a) 구면(sphere)에서 샘플링된 포인트 클라우드 (b) 토러스(torus)에서 샘플링된 포인트 클라우드 (c) 뫼비우스의 띠(Mobius strip)에서 샘플링된 포인트 클라우드 (d) 클레인 병(Klein bottle)에서 샘플링된 포인트 클라우드

위 데이터 시각화에서 살펴볼 수 있듯, 데이터는 각 다양체들 위에서 샘플링 된 이산적인 점들의 집합입니다.

우리의 눈으로는 이 점들이 어떠한 다양체의 기하학적 경향성을 띄는 것이 보일 것입니다.

PH를 이용하면 이러한 경향성을 잘 요약하여 컴퓨터에 입력할 수 있는 자료형으로 나타낼 수 있습니다.

3.2) Persistence Barcode and Diagrams

gudhi 라이브러리를 이용하면 다음의 단계를 거쳐서 point cloud 데이터로부터 PH를 계산하여 줍니다.

  1. 립스 컴플렉스 생성 : gudhi.RipsComplex 함수 이용해 데이터 포인트들의 거리 파라미터를 점점 증가시켜나가며 연결시켜 나갑니다.
  2. 심플렉스 트리 생성 : 저장된 립스 컴플렉스에 .create_simplex_tree 메서드를 사용하면 호몰로지가 생성되고 죽는 과정을 분석합니다.
  3. 지속성 자료 생성 : 저장된 심플렉스 트리에 .persistence 메서드를 사용하면 심플렉스 트리로부터 Persistent homology를 계산하여 (호몰로지 차원, 생성시점, 소멸시점) 형태로 구성된 데이터를 만들어냅니다.
  4. 자료 시각화 : Persistent homology가 담고 있는 정보를 Persistence Barcode 또는 Persistence diagram 형태로 알기 쉽게 시각화합니다. 이는 각각 gudhi.plot_persistence_barcode 함수와 gudhi.plot_persistence_diagram 함수로 구현됩니다.

Homology of Sphere

3차원 공간상의 구면 S2S^2의 호몰로지에 대한 랭크 (또는 Betti-number)는 아래와 같습니다.

rankH0(S2)=1,rankH1(S2)=0,rankH2(S2)=1\text{rank}{H_0(S^2)} = 1, \text{rank}{H_1(S^2)} = 0, \text{rank}{H_2(S^2)} = 1

rankH0(S2)\text{rank}{H_0(S^2)}는 위상공간이 가진 연결성분(Connected component)의 수를, rankH1(S2)\text{rank}{H_1(S^2)}는 위상공간이 가진 루프(loop)의 수를, rankH2(S2)\text{rank}{H_2(S^2)}는 위상공간이 가진 공동(void)의 수를 나타냅니다.

예를들어, 구면은 하나의 연결성분과 하나의 공동을 가지는 위상공간입니다.

구면 포인트 클라우드의 Persistence Barcode(위)와 Persistence Diagram(아래). 0th barcode 하나와 2nd barcode 하나씩이 가장 긴 persistence를 보여주고 있다. (2nd barcode는 그림에서 나타나있지 않다.)

Persistence Barcode(PB)는 거리 파라미터가 증가할때마다 각 호몰로지 클래스들이 언제 탄생(birth)하고

언제 소멸(death)하는지를 구간 [b,d][b,d] 형태로 보여줍니다.

각 구간의 길이는 개별 호몰로지 클래스의 수명(lifespan) 또는 지속성(persistence)을 나타냅니다.

지속성이 긴 클래스는 다양체의 성질에서 얻어진 것이라 할 수 있고, 짧은 클래스는 노이즈에 의해 발생한 정보라고 할 수 있습니다.

Persistence Diagram(PD)은 PB에서 각 구간들의 탄생시점(bb)과 소멸시점(dd)을 좌표평면에 좌표 (b,d)(b,d)로 나타낸 것으로, 두 자료형은 정확히 같은 정보를 나타내고 있습니다.

코드를 통해 얻은 PD에서 살펴볼 수 있듯, 위 데이터는 0th-homology class 하나와 2nd-homology class 하나가 무한한 지속성을 가지고 있는 것을 관찰할 수 있습니다.

여기서 원래 다양체 S2S^2가 가지는 호몰로지의 정보와 동일하다는 것을 관찰할 수 있습니다.

아래의 다른 예제들(토러스, 뫼비우스의 띠, 클레인 병)에서도 동일한 결과를 관찰할 수 있습니다.

Homology of Torus

3차원 공간상의 토러스 T2T^2의 호몰로지에 대한 랭크 (또는 Betti-number)는 아래와 같습니다.

rankH0(T2)=1,rankH1(T2)=2,rankH2(T2)=1\text{rank}{H_0(T^2)} = 1, \text{rank}{H_1(T^2)} = 2, \text{rank}{H_2(T^2)} = 1
토러스 포인트 클라우드의 Persistence Barcode(위)와 Persistence Diagram(아래)

Homology of Mobius band

3차원 공간상의 뫼비우스의 띠 MM의 호몰로지에 대한 랭크 (또는 Betti-number)는 아래와 같습니다.

rankH0(M)=1,rankH1(M)=1,rankH2(M)=0\text{rank}{H_0(M)} = 1, \text{rank}{H_1(M)} = 1, \text{rank}{H_2(M)} = 0
뫼비우스의 띠 포인트 클라우드의 Persistence Barcode(위)와 Persistence Diagram(아래)

Homology of Klein bottle

3차원 공간상의 클레인 병 KK의 호몰로지에 대한 랭크 (또는 Betti-number)는 아래와 같습니다.

rankH0(K)=1,rankH1(K)=1,rankH2(K)=0\text{rank}{H_0(K)} = 1, \text{rank}{H_1(K)} = 1, \text{rank}{H_2(K)} = 0
클레인 병 포인트 클라우드의 Persistence Barcode(위)와 Persistence Diagram(아래)
profile
TDA와 DL을 연구하는 대학원생입니다.

1개의 댓글

comment-user-thumbnail
2024년 4월 6일

TDA 기초부터 지금까지 쭉 읽어보면서 개념을 잡아가고 있는 중인데, 정말 좋은 자료인 듯 싶습니다. 도움을 주신 작성자님께 정말 감사드립니다.

답글 달기