logo

ジュリアでk-平均群集化する方法 📂ジュリア

ジュリアで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