Slide 72
Slide 72 text
Julia ʹΑΔϨίϝϯυΞϧΰϦζϜ࣮
function bpmf(
users::Vector{Int}, items::Vector{Int}, rates::Vector{Float64},
N::Int, M::Int, D::Int, n_sample::Int)
rateidx = sparse(users, items, 1:length(rates))
U = zeros(n_sample, N, D)
V = zeros(n_sample, M, D)
for t in 1:(n_sample-1)
SS = (1. / N) * ΣXXt(U[t, :, :])
SU = (1. / N) * sum(U[t, :, :], 1)[:]
W0ast = inv(inv(W0) + N * SS + (β0 * N) / (β0 + N) * (μ0 - SU) * (μ0 - SU)')
λ_u = rand(Wishart(ν0 + N, symmetric(W0ast)))
μ0ast = (β0 * μ0 + N * SU) / (β0 + N)
μ_u = rand(MvNormal(μ0ast, symmetric(inv((β0 + N) * λ_u))))
...
for i in 1:N
js = find(rateidx[i, :])
SV_i = ΣXXt(V[t, js, :])
λast_inv = inv(λ_u + α * SV_i)
SVR_i = sum(V[t, js, :] .* rates[rateidx[i, js].nzval], 1)[:]
μast = λast_inv * (α * SVR_i + λ_u * μ_u)
U[t+1, i, :] = rand(MvNormal(μast, symmetric(λast_inv)))
end
...
end
return U, V
end