줄리아에서 k-평균 군집화하는 방법
설명
k-평균 군집화는 주어진 $n$개의 데이터를 $k$개의 묶음으로 구분하는 군집화 알고리즘이다. 줄리아에서는 Clustering.jl 패키지를 사용하여 쉽게 사용할 수 있다.
코드
다음은 아이리스 데이터를 불러와 $k=3$인 군집화를 하는 코드이다. RDatasets.jl에서 데이터를 불러오면 기본적으로 데이터 프레임이기 때문에 이를 배열로 바꿔주고, 각 열이 하나의 데이터가 되어야하므로 전치를 취했다. 4번의 반복으로 수렴하였다.
using Clustering
using RDatasets
X = dataset("datasets", "iris")[:, 1:4]
X = Array(X)'
results = kmeans(X, 3, display=:iter)
# Iters               objv        objv-change | affected 
# -------------------------------------------------------------
#       0       9.002000e+01
#       1       7.934436e+01      -1.067564e+01 |        2
#       2       7.892131e+01      -4.230544e-01 |        2
#       3       7.885567e+01      -6.564390e-02 |        0
#       4       7.885567e+01       0.000000e+00 |        0
kmeans의 반환인 results는 9개의 프로퍼티를 가진다. 그 중 각 군집의 중심은 .centers, 각 데이터의 군집 분류는 .assignments, 각 군집의 데이터 수는 .counts로 얻을 수 있다.
julia> propertynames(results)
(:centers, :assignments, :costs, :counts, :wcounts, :totalcost, :iterations, :converged, :cweights)
julia> results.centers
4×3 Matrix{Float64}:
 5.006  6.85385  5.88361
 3.428  3.07692  2.74098
 1.462  5.71538  4.38852
 0.246  2.05385  1.43443
julia> results.assignments
150-element Vector{Int64}:
 1
 1
 1
 ⋮
 2
 2
 3
julia> results.counts
3-element Vector{Int64}:
 50
 39
 61
꽃받침 길이sepal length와 꽃받침 폭sepal width에 대해서 시각화해보면 다음과 같다.

환경
- OS: Windows11
 - Version: Julia 1.10.0, Clustering v0.15.7, RDatasets v0.7.7
 

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

