자기조직화지도 SOM
요약
- 차원축소 + 군집화 딥러닝
- 다차원의 데이터를 2차원, 혹은 1차원 지도에 매핑하는 것
- 비슷한 애들끼리 가깝게 모아놓은 것
- 거리에 대한 정보는 잃지만, 그 관계(유사성)은 유지
활용 방안: 군집화, 아웃라이어
- 이웃의 범위를 지정하여(혹은 지정하지 않고) 격자를 기준으로 군집화 가능(단 촘촘한 그리드 이용)
map에 밀집도를 드러낸다면, 어디가 아웃라이언지 알 수 있을 것
개요
1. 알고리즘
1.1 구조
1.2 가중치
1.2.1 initialize
1.2.2 find BMU
1.2.3 weight updating
2. 활용
3. 주의점, 개선된 알고리즘
4. 참고 사이트
1. 알고리즘
1.1 구조
이런식으로 데이터 프레임이 있다면
X1 | X2 | X3 | X4 |
0.2 | 0.3 | 0.1 | 0.2 |
0.4 | 0.2 | 0.3 | 0.3 |
input layer은 column vector 가 될 것이다
ex. X1=(0.2,0.4) X2=(0.3,0.2) ...
input vector는 한 열을 가져온다.
ex. x=(0.2,0.3,0.1,0.2)
좀더 generalize하면
X=(x1,x2,x3 ... xm)
output node는 하나의 격자다.
예를 들어서 10*10에 매핑을 하겠다고 하면
(0,0) (0,1) .... (10,10)이 모두 output node가 된다
이렇게 이해하기 쉽게 예를 든 것이지 실제로는 output node는 하나의 scalar일 뿐이다
그렇다면 어떤 방식으로 하나의 격자를 선택(매핑) 하는가?
weight는 input node와 output node를 이어주는 하나의 다리라고 생각하면 된다.
input vector와 가까운 output node를 선택한 후, input vector은 그 다리를 건너간다고 생각하면 된다.
이때 하나의 output node만 선택된다는 점에서 SOM 을 competitive learning이라고 한다.
데이터 프레임 구조가 n(개체 수) * m(변수의 개수) 라면
input vector 은 1 * m 의 shape,
weight는 m * n(output node의 수) 의 shape
output vector 은 n * 1 의 shape가 되겠다
각각의 input node와 output node를 연결하는 w는 다음과 같은 형태다
W1(1번째 output으로 향하는 노드) | W2 | ... | |
X1 | w11 | w12 | |
X2 | w21 | w22 | |
... |
하나의 input vecor에 대해서만 보자
데이터프레임의 변수가 2개만 있고, 총 3개의 격자에 매핑을 시킨다면 다음과 같이 될 것이다
input vecotr은 X=(x1, x2)가 될 것이다.
1.2 가중치
1.2.1 가중치 초기화
The most common initialization method assigns preferably small random values to the weight vectors of nodes in the network. That means, no prior order is imposed on the network in the initialization operation [7]. The only restriction imposed by this method is to avoid similar weights.
1.2.2 find BMU
input vector 와 가장 닮은 output node 선택한다고 했다.
닮음, 유사성을 쉽게 판단할 수 있는 수치적 근거는 거리다
거리를 재는 방법에도 여러가지 있지만, 그 중에서 유클리디안 거리를 통해서 거리를 측정한다
di(t): t번째 시행에서 해당 input vector와 i번째 output node로 이어주는 가중치의 거리
x(t) : t 번째 시행의 input vector
i : 몇 번째 output node로 향하는지
j : input vector의 몇 번째 variable
이중에서 가장 가까운 output node를 택한다고 했으므로 위를 통해서 계산된 총 n개의 output node의 중
di(t) 를 가장 작게 하는 i값을 c(t)라고 하자
이게 곧 best- matching node(winning node)가 된다
1.2.3 weight updating
그 후엔 가중치를 입력벡터와 선택된 노드 사이의 거리릍 토대로 조정한다.
i번째 output node로 향하는 wi값을 고쳐준다.
그러나 이는 이웃 노드를 고려하지 않고 가중치 업데이트를 종료해서 문제가 된다.
왜냐하면 SOM은 실질적인 거리는 버려도 유사성에 대한 정보는 유지한다고 했기 때문에 위와 같이 가중치를 업데이트를 종료하면 유사성에 대한 정보가 들어갈 틈이 없다. 유사성에 대한 정보는 이웃에 대한 정보를 포함해야 하기 때문이다.
그래서 우리는 가중치를 업데이트 할 때 이웃 노드 역시 수정해준다.
위 식의 h_ci(t)는 neighborhood function 을 의미한다.
winning node의 경우 h_ci(t) =0 임을 알면 무슨 함수일지 추측할 수 있을 것이다.
위 과정을 반복하며 가중치를 수정한다.
2. 활용
제공되는 라이브러리: minisom, sompy
3. 주의점, 개선된 알고리즘
주의점
- 반드시 모든 변수들을 scaling 할 것
- output이 보통 square한 matrix일텐데 이때 한 변은 10% of p
modified som:
- sophisticated som
- growing som: 그리드를 점차 키워나가는 것
- neighbor node를 골라서 좀 더 자세하게 weight를 수정하는 방안
4. 참고 사이트
참고할만한 자료
minisom을 이용한 outlier 탐색 : github.com/JustGlowing/minisom/blob/master/examples/OutliersDetection.ipynb
참고한 자료
간단한 흐름: www.aistudy.co.kr/neural/som_kim.htm#_bookmark_a51730
간단한 흐름(예제 o): untitledtblog.tistory.com/5
'머신러닝 > 아웃라이어, 결측치' 카테고리의 다른 글
인코딩을 통한 명목형 변수 knnimputing (0) | 2021.04.13 |
---|---|
실루엣 분석Silhouette Analysis (0) | 2021.03.30 |
알고리즘 간단 요약 및 비교 (0) | 2021.03.30 |
마할라노비스 거리Mahalanobis distance (0) | 2021.03.30 |
paper 요약 (0) | 2021.03.23 |
댓글