본문 바로가기

나 취준생/R

R SOM(Self Organizing Map) 분석

320x100

# SOM(Self Organizing Map) 분석

 

비지도학습 신경망으로 고차원의 데이터를 이해하기 위해 저차원의 뉴런으로 정렬하여

지도(map)의 형태로 형상화 하는 기법

-> 비지도학습 + 신경망

 

# 예제 실습

iris 데이터를 som 비지도학습 신경망을 이용해서 군집화

 

1. 아이리스 데이터의 컬럼 이름 확인 및 건수 확인

 

colnames(iris)

nrow(iris) # 150

 

2. 아이리스의 정답인 Species 가 팩터이므로 level 확인

levels(iris$Species) # "setosa" "versicolor" "virginica"

 

3. som 패키지 설치

install.packages("kohonen")

library(kohonen)

 

4. 훈련 데이터와 테스트 데이터를 3 1로 분류 (훈련 데이터 100, 테스트는 50)

 

train <- sample(1:150, 100) #무작위로 100개 추출 (학습데이터)

train_Set <- list( x = as.matrix(iris[train,-5]), Species = as.factor(iris[train,5])) #학습 데이터 list

test_Set <- list(x = as.matrix(iris[-train,-5]), Species = as.factor(iris[-train,5])) #테스트 데이터 list

train_Set

 

설명: som 함수가 list 형태의 데이터를 원하므로 list 형태로 변환

 

5.  somgrid 함수를 이용해서 경쟁층을 구현

gr <- somgrid(xdim = 3, ydim = 5, topo = "hexagonal") #grid 개수 및 모양 설정

 

# 토폴로지 : 컴퓨터 네트워크의 요소들(링크, 노드 등)을 물리적으로 연결해 놓은 것

 

6.  훈련 데이터 100개로 som 학습 시키기

 

ss <- supersom(train_Set, gr, rlen = 200, alpha = c(0.05, 0.01)) #som 학습하기

# rlen = 200 : 150개의 데이터를 200번 학습시키겠다.

# alpha = c(0.05, 0.01) 러닝 레이트(learning rate)를 0.05 에서 시작해서 0.01 까지 학습시키겠다.

ss

 

som 함수 파라미터 설명

-> https://www.rdocumentation.org/packages/kohonen/versions/3.0.10/topics/supersom

 

7. 군집화가 잘 되었는지 시각화 하면서 확인

# 학습이 진행될수록 경쟁층의 뉴런과 입력 데이터와의 거리가 짧아지는지 확인

 

plot(ss, type="changes")

 

 

#8.  som 모델의 각 뉴런(경쟁층의 뉴런)이 몇 개의 입력 데이터와 맵핑이 되는지 확인

 

plot(ss, type="count", main="Node Counts")

 

 

9. 경쟁층의 각 뉴런끼리의 거리를 확인하는 방법

# 나는 친구가 10명이고 옆에 뉴런은 친구가 8명인데 알고보니 옆에 뉴런이

# 나와 같은 성향의 뉴런이어서 같은 종류였음을 확인하고 싶을때 유용함

 

plot(ss, type="dist.neighbours", main = "SOM neighbour distances")

 

 

10. 경쟁층의 뉴런에 속한 입력층의 친구들(아이리스는 3가지 종류중에 무엇인지)이 누군지 확인하는 방법

 

plot(ss, type="codes")

 

 

# 11. 테스트 데이터를 잘 맞추는지 확인

test_Set$Species # 실제 정답

test.pred <- predict(ss,  newdata = test_Set)  # 테스트 데이터로 예측합니다.

test.pred$predictions$Species

table(test.pred$predictions$Species,test_Set$Species)

 

반응형

'나 취준생 > R' 카테고리의 다른 글

R k-means 군집 분석  (0) 2021.02.15
R 연관규칙  (0) 2021.02.14
R 신경망  (0) 2021.02.05
R 회귀분석 - 2  (0) 2021.02.01
R 회귀분석 - 1  (0) 2021.02.01