ジュリアでk-平均群集化する方法
説明
k-平均クラスタリングは、与えられた$n$個のデータを$k$個のグループに分けるクラスタリングアルゴリズムです。Juliaでは、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