지난번 포스팅에서는 분할적 군집화(Partitional Clustering) 중에서 프로토타입 기반(Prototype-based)의 군집화 기법인 K-중심 군집(K-Centroid Clustering)에 대해서 알아보았습니다.

 

이번 포스팅에서는 분할적 군집화(Partitional Clustering) 중에서 프로토타입 기반(Prototype-based) 군집화 기법의 두번째로 퍼지 군집 (Fuzzy Clustering)에 대해서 알아보겠습니다.

 

퍼지 군집 (Fuzzy Clustering)은 혼합 분포 군집(Mixture Distribution Clustering)과 함께 "Soft Clustering"이라고도 하는데요, 각 관측치가 (단 하나의 군집에만 속하는 것이 아니라) 여러 군집에 속할 수 있으며, 이를 각 군집에 속할 가능성(possibility), 확률(probability)로 제시해줍니다.

(가령, 관측치 3번은 군집 1 속할 가능성이 0.7, 군집 2에 속할 가능성이 0.3)

 

 

[ Partitional Clustering > Prototype-based > Fuzzy Clustering ]

 

 

 

 

퍼지 군집에 대해 자세히 살펴보기 전에 먼저 퍼지 논리(Fuzzy Logic)에 대해서 간략히 살펴보겠습니다.

 

Fuzzy를 영어사전에서 찾아보면 '애매 모호함' 이라는 뜻입니다. 

 

(뜻이) (be) vague (idea), obscure, fuzzy, inexplicit, puzzling, ambiguous (meaning), hazy (notion), dim (memory), doubtful, evasive, equivocal, elusive

 

Fuzzy Set Theory, Fuzzy Logic은 '애매 모호한 대상을 다루는 논리'입니다. 

 

고전 논리 연산(Boolean Logic)에서는 1(참, Truth) 아니면 0(거짓, False), 모 아니면 도, 아군 아니면 적군으로 단순 명쾌하게 구분을 합니다.

 

반면에 Fuzzy 논리(Fuzzy Logic)에서는 진리값(Truth Value)이 0~1 사이의 실수값(real nummber between 0 and 1)으로 확장하여 소속도(degrees of membership)에 대한 애매모호한 정도, 가능성의 정도(degrees of possibility)를 표현합니다.

 

 

[ Boolean Logic vs. Fuzzy Logic ]

 

 

 

위의 '키(Height)'를 예를 들어보면요, 고전 논리(Boolean Logic)에서는 키 175 cm 를 기준으로 해서, 175cm 미만은 키가 작은 집단 ('0', short group), 175cm 이상은 '키가 큰 집단' ('1', tall group)으로 구분하고 있습니다.  따라서 고전 논리에 따르면 키 174.999cm인 사람은 '키가 작은 집단'('0', short group)에 속하게 되며, 키 175.001 cm인 사람 (키 174.999 cm인 사람보다 단지 0.002 cm 큼)은 '키가 큰 집단' ('1', tall group)에 속하게 됩니다. 0.002 cm 차이가 두 사람이 속하는 그룹을 나누었는데요, 뭔가 불합리하다는 생각이 들지요?

 

반면에, 퍼지 논리 (Fuzzy Logic)에서는 소속도(degrees of membership)의 가능성(Possibility)을 진리 값(Truth Value)이 0~1 사이의 연속된 실수값으로 확장해서 나타내준다고 했지요?! 위의 키 예를 살펴보면요, 174.999 cm 인 사람이 '키가 큰 집단'에 속할 가능성이 0.499 이고 & '키가 작은 집단'에 속할 가능성(possibilty)이 0.501 입니다.  키가 175.001 cm 인 사람이 '키가 큰 집단'에 속할 가능성이 0.501 이고 & '키가 작은 집단'에 속할 가능성은 0.499 입니다. 

 

키나 몸무게, 나이, 시력, 청력... 등 연속된 개념에 대해서는 아무래도 고전 논리(Boolean Logic)보다는 퍼지 논리(Fuzzy Logic)이 애매 모호함의 정도(degrees)를 나타내기에 더 적합해 보입니다.  사실, 인간이 사용하는 용어, 표현, 개념의 "상당 부분이 애매모호한것 같습니다" (<= 이 표현 자체가 바로 애매 모호함 그 자체이지요. "상당 부분"? "같습니다"?).  퍼지 논리, 퍼지 집합론(Fuzzy set theory)을 이용하면 컴퓨터가 인간이 생각하고 표현하는 애매 모호함을 인식하고 연산할 수 있습니다.  

 

 

군집분석으로 다시 돌아와서 생각해보면요, K-중심 군집(K-Centroid Clustering)에서는 각 관측치가 특정 군집에 속하거나('1') 혹은 아니거나('0')의 둘 중 하나였습니다(each data point can only belong to exactly one cluster)반면에, 퍼지 군집(Fuzzy Clustering)에서는 퍼지 이론(Fuzzy set theory)에 기반해서 각 관측치가 여러 군집에 동시에 속할 수 있으며(data points can potentially belong to multiple clusters), 각 군집별로 속할 가능성(degrees of possibility, probability)을 제시해줍니다.

 

 

[ Soft Clustering compared to Hard(Non-fuzzy) Clustering ]

 

 

 

관측치 중에서 각 군집과 군집의 중간 사이에 위치해서 특정 군집에 할당하기에 애매 모호한 관측치가 많이 있는 데이터셋이라면 '집단에 속할 가능성'을 나타내주는 퍼지 군집(Fuzzy Clustering)이 '단순 무식하게 여기 아니면 저기'로 배타적으로(exclusively) 나누어주는 K-중심군집(K-Centroid Clustering)보다 상대적으로 더 적합하다고 볼 수 있습니다.  (연산량이 많아지는 단점이 있긴 합니다만, 요즘엔 컴퓨팅 파워가 높으므로 예전 대비 문제가 덜 한편이죠)

 

 

개념에 대해 소개했으니, 이제 알고리즘으로 한단계 내려가 보겠습니다.

 

퍼지 군집 알고리즘으로 가장 많이 사용되는 것으로 Fuzzy C-means(FCM) Clustering Algorithm 입니다. FCM 알고리즘은 1973년 J.C.Dunn이 개발하였고, 1981년 J.C.Bezdek 이 발전시켰습니다. (* source : https://en.wikipedia.org/wiki/Fuzzy_clustering)  이번 포스팅에서는 Fuzzy C-means Clustering Algorithm을 가지고 설명하겠습니다.

 

Fuzzy C-means Clustering Algorithm은 K-means Algorithm 과 매우 유사합니다.  군집 내 관측치들 간의 유사성을 최대화하고 (즉, 군집의 중심과 관측치 간 거리의 합을 최소화), 군집 간 비유사성을 최대화 (즉, 군집의 중심 간 거리의 합을 최대화) 하는 최적 해(optimal solution)를 반복적인 연산을 통해 찾는 개념은 똑같습니다.  K 개의 군집을 분석가가 사전적으로 지정해주는 것도 같습니다.  유사성의 측도로서 거리(distance)를 사용하는 것도 같습니다 (정확히는 비유사성(dis-similarity)의 측도).

 

다만, 퍼지 군집에서는 각 관측치가 특정 군집에 속할 가능성, 가중치 w 를 계산하는 것이 다를 뿐입니다. (아래에는 군집 개수를 K로 통일해서 Fuzzy K-means Clustering 으로 사용하겠음)

 

 

[ Fuzzy K-means Clustering Algorithm ]

 

 

1. Choose a number of clusters, K.

2. Assign randomly to each point coefficients for being in the clusters.

3. Repeat

  - Compute the centroid for each cluster.
  - For each point, compute its coefficients of

  being in the clusters.

 

4. until

  the algorithm has converged

  (that is, the coefficients' change between

  two iterations is no more than the given

  sensitivity threshold)
 

 

1. 군집의 개수 K를 선택함

 

2. 각 관측치가 특정 군집에 속할 가중치
  (가능성) 값을 무작위로 할당함

 

3. Repeat

 - 각 군집의 중심을 계산함

 - 각 관측치에 대해 특정 군집에 속할
  가중치(가능성) 값을 다시 계산함

 

4. until

 알고리즘이 수렴할 때까지 반복함

 (즉, 3번의 2개 반복에서 더이상 가중치 값의
 변화가 주어진 민감도 기준치 미만일 때)

 

 

 

 

위의 알고리즘 내용을 수식으로 표현하기 전에 표기법부터 정리해보죠. 군집화를 하려고 하는 데이터셋 집합이 m개의 변수, n개의 관측치, K개의 군집이 있고, 각 군집에 속할 가능성을 가중치 값 w 로 표기한다고 하면 아래와 같습니다.  

 

[ 표기법 (Notation) ]

 

 

 

퍼지 군집 모형은 아래 두 개의 분할 조건을 만족합니다.

 

1) 데이터 가 각 군집 에 속할 가능성의 가중값 합은 1이다. (즉, 확률 합이 1)

  

    ---- (식 1)

 

2) 각 군집 는 하나 이상의 데이터가 0이 아닌 가중값을 가지며, 그 군집의 모든 가중값이 1이 될 수는 없다. (모두 0이거나 모두 1이면 군집분석 효용성 없음)

 

   ---- (식 2)

 

 

 

퍼지 군집을 하는 원리가 '군집 내 유사성 최대화 (즉, 관측치와 퍼지 군집 중심과의 거리 합 최소화)', '군집 간 비유사성 최대화 (즉, 군집의 중심 간 거리 합 최대화)' 하는 것이라고 했습니다 (K-means clustering 과 원리 동일). 

 

'군집 내 유사성 최대화 (즉, 관측치와 퍼지 군집 중심과의 거리[d(xi, ck)] 합 최소화)'를 달리 표현하면 '퍼지 군집 내 오차 제곱 합(SSE : Sum of Squared Error) 최소화'라고 할 수 있습니다.

 

  ---- (식 3)

 

위의 식에서 p는 1보다 큰 상수로서, 가중값의 정도를 조절하는 매개변수(parameter) 입니다. p 값이 1이면 K-means Clustering과 결과가 비슷해집니다. (K-means Clustering을 Fuzzy Clustering의 특수한 경우이며,  Fuzzy Clustering이 더 포괄적이라고 생각할 수 있습니다.)

 

위의 (식 3)에서 SSE를 최소로 하는 각 군집의 평균 를 구하기 위해서 (식 3)을 에 대해 편미분(partial derivative with respect to ) 한 후 '0'으로 놓고 연립방정식을 풀면 아래와 같은 해를 얻습니다.  (K-means clustering 에서 각 군집의 중심 평균을 구할 때는 해당 군집의 관측치 값만 사용하는데 반해서, Fuzzy K-means Clustering 에서는 전체 관측치에다가 각 군집에 속할 가능성인 가중치를 곱한 값을 사용함)

 

   ---- (식 4)

 

 

 

 

위의 (식 3)에서 SSE를 최소로 하는 가중값 를 구하기 위해서 (식 3)을 에 대해 편미분(partial derivative with respect to ) 한 후 '0'으로 놓고 연립방정식을 풀면 아래와 같은 해를 얻게 됩니다.

 

     ---- (식 5)

 

 

 

p 값이 커지면 커질수록 각 군집의 평균이 전체 평균에 가까워져서 한 군집으로 데이터를 분류하는 것이 점점 더 모호(fuzzier)해집니다. 일반적으로 위의 (식 5)의 가중값 의 재계산식을 간편히 하기 위해 p=2를 많이 사용합니다.

 

p=2 를 (식 5)에 대입하면 (식 5)가 아래와 같이 계산하기 용이하게 정리됩니다.

 

       ---- (식 6)

 

 

위의 (식 6)의 분자를 살펴보면, 관측치 가 군집 에 속할 가능성, 가중치 는 관측치 와 군집의 중심 의 거리(distance) 제곱에 반비례함을 알 수 있습니다. 즉 관측치와 군집의 중심 간 거리가 짧을 수록 (즉, 유사할 수록, 그 군집에 속할 가능성이 높을 수록) 는 커지게 됩니다. 

(* 출처 : 이정진)

 

이때 분모는 각 데이터와 군집 1 ~ K 까지의 거리 제곱의 역수의 합이며, 이것으로 분자(특정 군집 K와 관측치 간의 거리 제곱의 역수)를 나누어주게 되면 여러 군집에 속하는 가중값의 합이 1이 되도록 해주는 표준화 상수 역할을 하게 됩니다.

 


 

간단한 예제를 가지고 Fuzzy K-means Clustering을 반복 수행해보겠습니다. 

 

n = 4 (관측치 4개),

m = 2 (변수 2개),

K = 2 (군집 2개),

p = 2 (가중치 계산 상수 parameter),

군집 중심과 관측치간의 거리는 유클리드 제곱 거리(Squared euclidean distance) 인

 

간단한 예제이며, 엑셀로 수식 걸어서 반복 수행하였습니다. (아래 첨부한 엑셀 파일 참조하세용~)

Fuzzy_Clustering_example.xlsx

 

 

[ 데이터셋 ]

data x1 x2
obs 1 -1 -2
obs 2 -2 -1
obs 3 1 3
obs 4 3 2

[ x1, x2 축 기준 관측치 산점도 ]

 

 

무작위로 obs 2, obs 4에 군집 1 가중값(wi1)으로 0.8, 군집 2 가중값(wi2)으로 0.2를 할당하고, obs 1, obs 3에는 군집 1 가중값(wi1)으로 0.2, 군집 2 가중값(wi2)으로 0.8을 할당하였습니다. (각 관측치의 모든 군집이 가중값 합의 1이 되어야 하므로 군집 1 가중값이 정해지면 나머지 군집 2의 가중값은 1-wi1 으로 자동으로 정해짐)

 

관측치가 군집 에 속할 가능성인 가중값  는 (식 6)에 의해서, 군집 의 중심  는 (식 4)에 의해서 구했습니다.

 

 

1st iteration

data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)
^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.2

-0.04

-0.08

0.12

0.8

-0.64

-1.28

0.14

obs 2

0.8

-1.28

-0.64

0.12

0.2

-0.08

-0.04

0.16

obs 3

0.2

0.04

0.12

0.15

0.8

0.64

1.92

0.14

obs 4

0.8

1.92

1.28

0.12

0.2

0.12

0.08

0.09

new centroid
(new mean)

 

0.47

0.50

 

 

0.03

0.50

 

 

 

가중값 가 수렴할 때까지 위 계산을 반복을 합니다.

(위의 표 'Fuzzy K-means Clustering Algorithm' 참조)

 

 

2nd iteration

data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)
^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.46

-0.22

-0.43

0.09

0.54

-0.29

-0.57

0.18

obs 2

0.43

-0.37

-0.19

0.10

0.57

-0.64

-0.32

0.21

obs 3

0.52

0.27

0.82

0.21

0.48

0.23

0.68

0.11

obs 4

0.56

0.95

0.63

0.14

0.44

0.58

0.38

0.08

new centroid
(new mean)

 

0.63

0.84

 

 

-0.12

0.16

 

 

 

3rd iteration
data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)
^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.34

-0.11

-0.23

0.05

0.66

-0.44

-0.88

0.55

obs 2

0.32

-0.21

-0.10

0.06

0.68

-0.92

-0.46

0.63

obs 3

0.66

0.44

1.31

0.56

0.34

0.12

0.35

0.06

obs 4

0.65

1.28

0.86

0.33

0.35

0.36

0.24

0.05

new centroid
(new mean)

 

1.30

1.70

 

 

-0.78

-0.66

 

 

 

4th iteration
data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.09

-0.01

-0.02

0.03

0.91

-0.83

-1.66

1.94

obs 2

0.08

-0.01

-0.01

0.04

0.92

-1.69

-0.84

2.02

obs 3

0.90

0.82

2.45

0.86

0.10

0.01

0.03

0.04

obs 4

0.88

2.31

1.54

0.74

0.12

0.05

0.03

0.05

new centroid
(new mean)

 

1.94

2.48

 

 

-1.45

-1.44

 

 

 

5th iteration
data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.02

0.00

0.00

0.03

0.98

-0.96

-1.93

2.00

obs 2

0.02

0.00

0.00

0.04

0.98

-1.93

-0.97

2.00

obs 3

0.96

0.92

2.75

0.83

0.04

0.00

0.01

0.04

obs 4

0.94

2.65

1.77

0.77

0.06

0.01

0.01

0.05

new centroid
(new mean)

 

1.98

2.51

 

 

-1.49

-1.49

 

 

 

6th iteration

data

cluster 1

cluster 2

weight
wi1

wi1^2*xi
(x1, x2)

1/d(xi, c1)^2

weight
wi2

wi2^2*xi
(x1, x2)

1/d(xi, c2)
^2

obs 1

0.02

0.00

0.00

0.03

0.98

-0.97

-1.93

2.00

obs 2

0.02

0.00

0.00

0.04

0.98

-1.93

-0.97

2.00

obs 3

0.96

0.91

2.74

0.82

0.04

0.00

0.01

0.04

obs 4

0.94

2.67

1.78

0.78

0.06

0.01

0.01

0.05

new centroid
(new mean)

 

1.98

2.51

 

 

-1.49

-1.49

 

 

 

5번째 반복과 6번째 반복의 가중값의 변화가 거의 없으므로 (즉, 수렴하였으므로) 퍼지 군집 알고리즘을 종료합니다.

 

결과적으로 obs 1 과 obs 2 는 군집 2 (cluster 2)에 속하고, obs 3 과 obs4 는 군집 1로 분류가 되었습니다.

(obs 1의 w11 = 0.02, w12 = 0.98,

 obs 2의 w21 = 0.02, w22 = 0.98,

 obs 3의 w31 = 0.96, w32 = 0.04,

 obs 4이 w41 = 0.94, w42 = 0.06  이므로)

 

위에 제시한 예제의 산점도를 보면 obs 1과 obs 2가 서로 인접해 있으며, obs 3과 obs 4가 서로 인접해 있으므로 군집화가 제대로 된 셈이네요. 

 

비록 처음에 무작위로 가중값을 부여했을 때 obs 1과 obs 3을 군집2로 가중치를 0.8 할당, obs 2와 obs 4를 군집1로 가중치를 0.8 할당하였습니다만, 6차례의 반복을 거치면서 각 관측치별 가중치도 새로 계산하고, 군집 1과 군집 2의 중심(K-평균)도 새로 계산하면서 군집화(clustering)을 반복하다보니 인접한(유사한) 관측치끼리 군집으로 잘 묶였습니다.

 

처음에 가중값 부여할 때 무작위로 한다고 했는데요, 여기서 무작위로 부여하는 숫자가 바뀌면 (무작위 이므로 뭐가 될지 모름 -_-;) 물론 군집화의 결과가 바뀔 수 있다는 점은 알고 계시구요. (K-means clustering 도 초기 중심값이 무작위로 할당되다보니 분석 돌릴 때마다 군집화 결과가 바뀔 수 있다는 건 동일함)

 

아래에 R 예제에서는 초기 rational starting point를 행렬로 입력할 수 있는 기능이 있으므로, 관측값별 초기 가중값을 합리적으로 부여할 수 있는 상황이라면 이용할 만 하겠습니다.

 

 


 

R의 'fclust' Package를 가지고 위에서 소개했던 예제에 대해서 Fuzzy clustering을 수행해보겠습니다.

 

1) 먼저, fclust Package 를 설치하고 로딩해보겠습니다.

 

> ##---------------------------------------------
> ## Fuzzy K-means Clustering : R fclust Package
> ##---------------------------------------------
> install.packages("fclust")
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/fclust_1.1.2.zip'
Content type 'application/zip' length 197520 bytes (192 KB)
downloaded 192 KB

package ‘fclust’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Administrator\AppData\Local\Temp\RtmpkzHe81\downloaded_packages
> library(fclust)

 

 

 

 

2) Dataset 준비

 

  위의 이론 설명에서 사용했던 2개 변수(x1, x2), 4개 관측치 예제 데이터를 똑같이 사용하겠습니다.

 

> # dataset
> x1 <- c(-1, -2, 1, 3)
> x2 <- c(-2, -1, 3, 2)
> x1_x2_d.f <- data.frame(x1, x2)
> x1_x2_d.f
  x1 x2
1 -1 -2
2 -2 -1
3  1  3
4  3  2

 

 

 

 

3) rational starting point Matrix U

 

위의 이론 설명에서 사용했던 값을 그대로 사용해서요, 관측값 1번이 군집1에 속할 가중값은 0.2, 군집2에 속할 가중값은 0.8, ... , 관측값 4번이 군집1에 속할 가중값이 0.8, 군집2에 속할 가중값은 0.2 의 초기값을 행렬(Matrix)로 만들었습니다.  이걸 아래의 FKM() 함수의 startU 옵션의 할당값으로 지정해줄겁니다.

 

> # rational starting point Maxtix U
> rational_starting_point <- matrix(c(0.2, 0.8, 0.2, 0.8, 0.8, 0.2, 0.8, 0.2), 
+                                   nrow = 4, ncol = 2, byrow = F)
> rational_starting_point
     [,1] [,2]
[1,]  0.2  0.8
[2,]  0.8  0.2
[3,]  0.2  0.8
[4,]  0.8  0.2

 

 

 

 

4) Fuzzy K-means Clustering using FKM() function of fclust package

 

fclust Package이 FKM() 함수의 매개변수 및 옵션에 대해서 소개하자면 아래와 같으며, 데이터셋(행렬 또는 데이터 프레임) 할당해주는 X, 군집의 개수를 지정해주는 k, 퍼지 매개변수(parameter) m (위의 '식 5'번의 p) 에 대해서만 옵션을 설정해보겠으며, 나머지는 default 설정 그대로 사용하겠습니다.

(같은 척도의 데이터이므로 표준화 필요 없음. default 가 no standardization)

 

 Arguments

 Description

 X

 Matrix or data.frame 

 k

 Number of clusters (default: 2)

 m

 Parameter of fuzziness (default: 2) 

 (위 이론 부분의 '식 5'번의 p 이며, p=2 이면 '식 6'번처럼 계산이 간단해짐)

 RS

 Number of (random) starts (default: 1)

 stand

 Standardization: if stand=1, the clustering algorithm is run using standardized data (default: no standardization) 

 startU

 Rational starting point for the membership degree matrix U

 (default: no rational start) 

 conv

 Convergence criterion (default: 1e-9) 

 maxit

 Maximum number of iterations (default: 1e+6) 

( * source : Paolo Giordani, Maria Brigida Ferraro)

 

 

퍼지군집 분석 결과는 아래와 같습니다.

 

> # Fuzzy K-means clustering with FKM() fuctnion of fclust package > x1_x2_FKM <- FKM(X = x1_x2_d.f, # Matrix or data.frame + k = 2, # Number of clusters (default: 2) + m = 2, # Parameter of fuzziness (default: 2) + startU = rational_starting_point)
> # startU : Rational starting point for the membership degree matrix U
>
>


>
# Fuzzy K-means clustering results > x1_x2_FKM Fuzzy clustering object of class 'fclust' Number of objects: 4 Number of clusters: 2 Closest hard clustering partition: 1 2 3 4 2 2 1 1 Membership degree matrix (rounded): Clus 1 Clus 2 1 0.02 0.98 2 0.02 0.98 3 0.95 0.05 4 0.96 0.04 Available components: [1] "U" "H" "clus" "value" "cput" "iter" "k" "m" "stand" "Xca" [11] "X" "call"

 

 

 

 

 

R의 fclust Package 의 FKM() 함수로 퍼지 군집화를 한 결과와, 위에서 엑셀을 가지고 6번 반복해서 푼 결과가 일치함을 알 수 있습니다. (obs3, obs4의 degree of membership, ie, weight 가 소숫점 두째자리에서 약간 다르기는 하지만 무시할만 합니다. 엑셀로는 반복을 6번하고 멈추었는데요, R은 14번 반복을 했네요.  이는 R fclust Package의 수렴 기준(Convergence criterion)의 default 값이 '1e-9' 으로서 매우 매우 작기 때문에 반복을 좀더 많이 했습니다.

 

> x1_x2_FKM$iter # number of iteration Start 1 14

 

 

 

fclust Package FKM() 함수의 분석결과 객체에 대해 소개하자면 아래와 같으며, 필요한 정보는 indexing 해서 사용하면 유용합니다.

 

fclust Package

FKM() object value 

Description 

 U

 Membership degree matrix

 H

 Prototype matrix

 clus

 Matrix containing the indices of the clusters

 where the objects are assigned (column1) and

 the associated membership degrees (column 2)

 value

 Vector containing the loss function values for the RS starts 

 cput

 Vector containing the computational times (user times) for the RS starts 

 iter

 Vector containing the numbers of iterations for the RS starts 

 k

 Number of clusters (군집의 수)

 m

 Parameter of fuzziness (위 식5번의 p와 동일)

 stand

 Standardization (Yes if stand=1, No if stand=0) 

 Xca

 Data used in the clustering algorithm (standardized data if stand=1)

 X

 Raw data

 call  Matched call (함수 다시 호출하기)

( * source : Paolo Giordani, Maria Brigida Ferraro)

 

 

예를 들어, 소속 정도의 가중값을 알고 싶다면 'U' 객체를 indexing 해오면 됩니다.

 

> # Membership degree matrix
> x1_x2_FKM$U
      Clus 1     Clus 2
1 0.01684418 0.98315582
2 0.01734390 0.98265610
3 0.95397165 0.04602835
4 0.96353078 0.03646922

 

 

 

 

각 퍼지 군집의 중심 위치도 궁금하지요?  이때 쓰는게 'H' 객체입니다.  Cluster 1 은 x1 중심좌표가 '2.008850', x2 중심좌표가 '2.493750' 으로서 우상단에 위치하고 있으며, Cluster 2는 x1 중심좌표가 '-1.493918', x2 중심좌표는 '-1.492924' 로서 좌하단에 위치하고 있군요.

 

> # Prototype matrix : H
> x1_x2_FKM$H
              x1        x2
Clus 1  2.008850  2.493750
Clus 2 -1.493918 -1.492924

 

 

 

 

변수가 2개인 2차원 데이터이므로 산점도 그래프로 그려보면 좀더 명확하게 이해할 수 있겠네요.  아래의 그래프를 보면 2개의 군집별로 색깔이 다르게 나와있구요, '*' 표시는 각 군집의 중심을 의미합니다. 바로 위해서 x1_x2_FKM$H 로 indexing했던 바로 그 좌표값입니다.

 

> # Fuzzy K-means Clustering plot
> plot(x1_x2_FKM)

 

 

 

이상으로 퍼지 군집(Fuzzy K-means Clustering Algorithm)에 대한 소개를 마치겠습니다.

 

 

다음번 포스팅에서는 '혼합분포군집(Mixture Distribution Clustering)' 모형에 대해서 알아보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.

 

[Reference]

- Michael Negnevitsky, "인공지능 개론(Artificial Intelligence)' (2nd Edition), 한빛아카데미, 2013

- 이정진, "R, SAS, MS-SQL을 활용한 데이터마이닝", 자유아카데미, 2011

- Fuzzy C-means Clustering Algorithm : https://en.wikipedia.org/wiki/Fuzzy_clustering

- R fuzzy clusterin package 'fclust' : Paolo Giordani, Maria Brigida Ferraro,  https://cran.r-project.org/web/packages/fclust/fclust.pdf

 

 

Posted by R Friend R_Friend

댓글을 달아 주세요