6.1 군집분석(Cluster Analysis)
6.1.1 군집 분석의 의의
변수 또는 개체(item)들이 속한 모집단 또는 범주에 대한 사전정보가 없는 경우에 관측값
들 사이의 거리(또는 유사성)를 이용하여 변수 또는 개체들을 자연스럽게 몇 개의 그룹 또
는 군집(cluster)으로 나누는 분석법
쉽게 말하면, 사전 정보 없이 자료를 컴퓨터에게 주고 “유사한 대상끼리 묶어보아라!” 라고 명령을 내리는 분석 방법
6.1.2 군집분석이 응용되는 분야의 예
- 고객을 특성에 따라 분류 (경영학)
- 생물을 특성에 따라 분류 (생물분류학)
- 성격의 유형에 따라 개인을 분류 (심리학)
- 인체의 체형에 따라 분류 하여 표준 치수체계를 작성 (의상학)
6.1.3. 군집분석과 구별되는 개념 : 판별분석
6.1.3.1 판별분석
만약 관측된 개체들이 사전에 어느 집단에 속해 있는지를 아는 경우(=지도학습)에는 이들 사이의 거리 등을 이용하여 개체들을 원래의 소속집단으로 가장 잘 판별 해주는 판별식을 구하여 새로이 관측된 개체가 어느 집단에서 관측되었는지를 판정
6.1.3.2 군집분석
소속집단 또는 범주에 대한 사전 정보가 없으며(비지도학습) 단지 개체들 사이의 거리
(distance) 또는 유사성(similarity)을 이용하여 전체를 자연스럽게 몇개의 집단(cluster)으로
나누는 분석법, 즉 개체 뿐만이 아니라 변수들도 그 유사정도에 따라 집단화할 수 있다.
6.1.4. 군집분석 시 수행하는 연구방법(기술)
군집으로 나누는 방법에 따른 분류
① 계층적(hierarchical) 방법
가까운 개체끼리 차례로 묶거나 멀리 떨어진 개체를 차례로 분리해 가는 군집방법
한 번 병합된 개체는 다시 분리되지 않는 것이 특징
② 비계층적(nonhierarchical) 방법 또는 최적분화방법(partitioning method)
다변량 자료의 산포를 나타내는 여러 가지 측도를 이용하여 이들 판정기준을 최적화시키
는 방법으로 군집을 나누는 방법
한 번 분리된 개체도 반복적으로 시행하는 과정에서 재분류될 수 있는 것이 특징
③ 조밀도에 의한 방법
④ 그래프를 이용하는 방법
다차원 자료들을 2 차원 또는 3차원으로 축소할 수 있다면 눈으로 자연스러운 군집을 형
성할 수 있다.
이외에도 다차원척도법(multidimensional scaling), 산점도행렬(matrix of scatterplots)
Stars, Andrews Plots, Chernoff Face 등의 방법이 있다.
6.2 K-Means Clustering
6.2.1 의의
주어진 데이터를 k개의 클러스터로 묶는 알고리즘으로, 각 클러스터와 거리 차이의 분산을 최소화하는 방식으로 동작한다. 이 알고리즘은 자율 학습의 일종으로, 레이블이 달려 있지 않은 입력 데이터에 레이블을 달아주는 역할을 수행한다.
6.2.2 프로세스
1) 분석자가 설정한 K개의 군집 중심점을 랜덤하게 선정
2) 관측치를 가장 가까운 군집 중심에 할당한 후 군집 중심을 새로 계산
3) 기존의 중심과 새로 계산한 군집 중심이 같아질 때까지 반복
6.3. 실습
6.3.1 CARET (당근) : Classification And REgression Training

caret 패키지는 예측모델을 만들기 위한 데이터 학습 시 간편한 함수를 제공
6.3.2 학습을 위한 데이터 만들기
6.3.2.1 난수생성
1> 난수 생성 : runif
>runif(10) #아무 수치10개를 봅아준다.
2> 난수 생성 : sample
1부터 30까지의 숫자 중에서 5개를 무작위로 추출하고 싶은 경우에는 아래와 같이 코딩하면 된다.
>sample(x=1:30,size=5)
>sample(x=1:30,size=10,replace=T) #복원추출
>sample(x=1:30,size=10,replace=F) #비복원추출
3> 고정 값으로 난수 생성 : set seed
> set.seed(1) #난수 패턴을 지정함, 난수 패턴1이다. 이런식.
> sample(x=1:30,size=10,replace=T)
# sample은 실행시킬때 마다 값이 달라진다.
4> 이항분포, 정규분포 난수생성
> rbinom(n=10, size=1, prob=0.5)
> rnorm(n=5, mean=0, sd=1)
6.3.2.2 특정 데이터 테이블에서 난수 생성하기
1> 내장데이터 iris보기
>head(iris)
>View(iris)
2> iris 데이터 정리
training 데이터로 모델(70%)을 만들고, testing 데이터로 모델(30%)을 평가 하기 위한 사전 작업입니다.
>install.packages("caret")
>library(caret)
>set.seed(1712)
>inTrain <- createDataPartition(y = iris$Species, p = 0.7, list = F)
#트레이닝용 70% 검증 30%
>training <- iris[inTrain,]
>testing <- iris[-inTrain,]
>training
# testing / training 확인해볼것
> training.data <- scale(training[-5])
#비교되는 변수의 범주가 다른 경우 정규화로 비슷하게 맞춤
> summary(training.data)
3> 범주 나누기
범주를 3개로 나눈다
>iris.kmeans <- kmeans(training.data[,-5], centers = 3, iter.max = 10000)
>iris.kmeans$centers
군집 분석 결과를 training 데이터셋에 할당하고, 결과를 시각화
>training$cluster <- as.factor(iris.kmeans$cluster)
>qplot(Petal.Width, Petal.Length, colour = cluster, data = training)
결과표 보기
table(training$Species, training$cluster)
댓글
댓글 쓰기