logo

줄리아에서 k-평균 군집화하는 방법 📂줄리아

줄리아에서 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