Tumblrはじめに機械学習プロフェッショナルシリーズの『トピックモデル』の勉強時に理解の助けになったことや勉強会用レジュメのまとめです。からっぽのしょこ」で、参考書のアルゴリズム4.2の疑似コードに従いR言語でLDAを組みました。それは、推定過程を確認する意味もありパラメータの1要素ずつ計算・更新していきました。結果、鬼の4重ループで重いのなんのでした。この記事は、それを2重ループにしたものです。言うものの研究用とかではなく、あくまで勉強用です。基本的な関数のみで組みましたので、初級者でも理解できるはずです。からっぽのしょこ」をご参照ください。この記事で説明していない部分に関しては、以前の記事の方をお読みください。文書ごとにパラメータ推定を行っていきます。Rではベクトルとマトリクスとを計算するとき、ベクトルの各要素をマトリクスの1行1列目の要素から列方向に順番に対応させて計算していきます。ベクトルの要素の数とマトリクスの列の要素の数(行数)を一致させると、ベクトルの1つ目の要素をマトリクスの1行目の各要素に対応させることができます。転置して計算していきます。$$この計算を行い正規化したものです。ディガンマ関数$\Psi()$の計算はdigamma()で行えます。前の$\boldsymbol{\alpha}$の計算は、K次元ベクトルとスカラーなのでそのまま行います。後の$\boldsymbol{\beta}$の計算は、括弧の中はK行V列のマトリクスとK次元ベクトルなのでそのまま行います。]はV次元ベクトルなので、転置してから計算します。tmp_q_alpha_kはK次元ベクトル、tmp_q_beta_vkはV行K列のマトリクスなので、$\boldsymbol{\beta}$の方を転置してから計算します。]に代入するため、もう一度転置してから代入します。最後に、vについて1からVまで和をとったもので割って正規化します。推定の度にnew_alpha_dkの初期値を全てalphaの値に設定します。new_alpha_dkにq_dvkの値を加えていきます。]にapply()を使い列方向に合計します。]は、どちらもK次元ベクトルなのでそのまま足します。この処理を1行目からD行目まで順番に行うことで、全ての要素の計算ができます。推定の度にnew_beta_kvの初期値を全てbetaの値に設定します。new_beta_kvにq_dvkの値を加えていきます。]の計算は、V行K列のマトリクスとV次元ベクトルなのでそのまま行います。new_beta_kvはK行V列のマトリクスなので、計算結果を転置から足します。new_beta_kvにD回繰り返し足していくことで、$\sum_{d=1}^D$の計算が行われます。タイトル}何度も実行するのが面倒だっただけで、関数化することに深い意味はありません。(2015)『トピックモデル』(機械学習プロフェッショナルシリーズ)講談社おわりにデータが増えると、1つ1つの値が小さくなり過ぎて推定できなくなるんですよね。誰かRでlogSumExpする方法を教えてください。文章を書くスピードが前よりも遅くなっている......アウトプットの習慣化は大事。最後まで読んでいただきありがとうございます。明日はギブスサンプリングです、またよろしくお願いします。00:04何かおかしな内容があれば、ご指摘いただけるととても嬉しいです。【R】円周の作図5.3:正射影ベクトルの導出【『スタンフォード線形代数入門』のノート】スポンサーリンクはてなブログをはじめよう!anemptyarchiveさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。