裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia で k-means クラスター分析

2021年01月30日 | ブログラミング

まず,驚くところは,Julia の k-means 関数では,データを ncol x nrow であたえるところ。
よく,help も読まないでやると,戸惑う所の騒ぎではない。
ということで,データを transpose して与えないといけない。
これくらいのこと,ユーザに強いるなよ!!

using RDatasets
iris = dataset("datasets", "iris");
a = Matrix(iris[!, 1:2]);
using Clustering, Plots
ncluster = 3;
R = kmeans(a', 3;  maxiter=200) # データを transpose して与えること!!! a'  よりは,わかりやすく transpose(a) とする
a = assignments(R);
c = counts(R);
M = R.centers;
println(a) # 結果として,どこに分類されたか
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ...
M[1,:] # 各クラスターの平均値
3-element Array{Float64,1}:
 5.800000000000001
 6.823913043478258
 5.003921568627451
図に描いてみよう
repeateach(x, n) = vec([j for i = 1:n, j in x])
colors = repeateach([:brown, :blue, :red], 50);
p1 = scatter(iris[!, 1], iris[!,2], markercolor=colors, tick_direction=:out, label="");
p1 = scatter!(M[1,:], M[2,:], markershape=:star6, markersize=10, markercolor=:cyan, label="")
display(p1)
 
 
分類結果
using FreqTables
freqtable(iris[!, 5], a)
Out[7]:
3×3 Named Array{Int64,2}
 Dim1 ╲ Dim2 │  1   2   3
────────────────────────────
setosa        │  0   0  50
versicolor    │ 38  12   0
virginica     │ 15  34   1
 R ではどんな風にやるのかな??
using RCall
R"""
a = kmeans(iris[1:2], 3)
plot(iris[,1], iris[,2], col=rep(1:3, each=50))
points(a$centers, pch=17, col=c(1,3,2), cex=2)
"""
RObject{IntSxp}
            a$cluster
iris[, 5]     1  2  3
  setosa     50  0  0
  versicolor  0 38 12
  virginica   0 15 35
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia のデータフレームで Query | トップ | Julia の IterableTables »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事