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