본문 바로가기
  • AI (Artificial Intelligence)
Fundamental/Technical

Kohonen Network 기법(코호넨 네트워크) (데이터마이닝)

by 로샤스 2014. 5. 12.

코호넨 네트워크는 데이터 군집화에 자주 이용되는 신경망 기법의 하나이다.

k-means 군집화 기법과  차이점은 다음과 같다.

첫째, 군집 중심 및 입력데이터를 0과 1사이의 정규화된 값으로 사용한다.

둘째, 알고리즘을 수행하면서 새로운 군집 중심을 계산하는 바식에 약간의 차이가 있다.

 

Algorithm

Step1. 군집 수 k를 결정하고, 각 군집에 초기치 또는 군집 중심을 0~1사이의 값으로 할당한다.

 

Step2. 0과1 사이로 정규화된 새로운 입력 데이터를 제시한다.

 

Step3. 입력 데이터와 각 군집 중심사이의 거리를 계산한다.

 

Step4. 거리가 최소인 군집 중심을 아래와 같이 새롭게 계산한다. (여기서 α는 0과 1사이의 학습 비율이다)

            

 

Step5. 모든 데이터에 대해 Step2~Step4를 반복한다.

 

Step6. 초기의 α값에 대한 군집 중심과 α를 줄여가면서 생성된 군집 중심의 변화가 없을 때까지 반복한다.

 

Step7. 모든 데이터를 가장 가까운 군집 중심에 배속한다.

 

## 0과 1사이의 표준화 데이터 생성
row<-nrow(iris[,-5])
col<-ncol(iris[,-5])
data<-matrix(0,row,col)
for(i in 1:col){
     max<-max(iris[,i])
     min<-min(iris[,i])
     for(j in 1:row){
          data[j,i]<-(iris[j,i]-min)/(max-min)
     }
}

## 새로운 군집 중심을 계산

new_center<-function(center,data,alpha){
     row<-nrow(center)
     diff<-matrix(0,row)
     for(i in 1:row){
          diff[i]<-dist(rbind(center[i,],data))
     }
     min<-min(diff)
     for(i in 1:row){
          if(diff[i]==min){
               center[i,]<-center[i,]+alpha*(data-center[i,])
          }
     }
     center
}


kohonen_alg<-function(data, k){
     row<-nrow(data)
     col<-ncol(data)
     alpha<-0.5

     center<-matrix(0,k,col)                   ## 초기의 군집 중심 설정
     for(i in 1:k){
          for(j in 1:col){
               center[i,j]<-runif(1)
          }
     }
     c<-matrix(0,k,col)
     while(1){
          or_center<-center
          for(i in 1:row){
               n_center<-center
               center<-new_center(n_center, data[i,],alpha)
          }

          if(identical(round(center-or_center,4),c)==FALSE){
               alpha<-alpha*0.8
          }else{
               break;
          }
     }
     lastcol<-col+1
     center<-cbind(center,0)
    
     for(j in 1:row){
          diff<-matrix(0,k)
          for(i in 1:k){
               diff[i]<-dist(rbind(center[i,-lastcol],data[j,]))
          }
          min<-min(diff)
          for(i in 1:k){
               if(diff[i]==min){
                    center[i,lastcol]<- center[i,lastcol]+1
               }
          }
     }
     center
}

 

## 실행함수

kohonen_alg(data, 3)

 

 

이 또한 k-means 기법과 유사하게 초기 값에 따라 군집화 결과가 다르게 나타남을 볼 수가 있다.

 

 

 

 

 

 

출처 : http://blog.naver.com/asus1984?Redirect=Log&logNo=120065317344

 

 

 

 

 

 

 

 

 

 

댓글