# 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 |