反面教師あり学習

*/

反面教師あり学習

Negative Supervised Learning

中華料理店過程 (CRP: Chinese Restaurant Process) のJulia 1.0実装

観測データ$x_1,\cdots,x_N \sim \mathcal N(x; \mu, \Lambda^{-1})$について, クラスタ$s_1,\cdots,s_N \sim \mathrm{C}\mathrm{R}\mathrm{P} (\alpha)$を生成するプログラム.

観測データが中華料理店の客,クラスタ番号がテーブル番号に対応する.

Juliaは直感的に書けて中々楽しい.

using Distributions
using Plots
using LinearAlgebra

function sample_CRP(X::Matrix{Float64}, alpha::Float64)
    N = size(X, 2)
    p = Vector{Float64}([alpha])
    S = zeros(Int32, N)
    K = 0
    for n in 1:N
        k = rand(Categorical(p / (n-1+alpha)))
        if k - 1 == K
            # 新しいクラスタが生成された
            insert!(p, K + 1, 1)
            K = K + 1
            S[n] = K
        else
            # 既存のクラスタが生成された
            p[k] = p[k] + 1
            S[n] = k
        end
    end
    # p = p / (N+alpha)
    return S
end

mu = zeros(Float64, 2)
covmat = Diagonal{Float64}(I, 2)
X = rand(MvNormal(mu, covmat), 1000)

S = sample_CRP(X, 2.0)
K = size(unique(S), 1) # クラスタ数

plt = histogram(S, bins=K)
savefig(plt, "figure.png")

生成されたクラスタヒストグラムは以下の通り.

f:id:eqseqs:20181007001127p:plain

参考文献

わかりやすいパターン認識 続/石井健一郎/上田修功【合計3000円以上で送料無料】

価格:3,520円
(2019/10/4 01:46時点)
感想(1件)

ノンパラメトリックベイズ 点過程と統計的機械学習の数理 (機械学習プロフェッショナルシリーズ) [ 佐藤 一誠 ]

価格:3,080円
(2019/10/4 01:48時点)
感想(0件)