Mercurial > hg > silvet
diff yeti/silvet.yeti @ 20:982aa1197a7e
Getting there, slowly, sort of, with EM
author | Chris Cannam |
---|---|
date | Thu, 27 Mar 2014 11:52:07 +0000 |
parents | f1f8c84339d0 |
children | 8e61ec97b34e |
line wrap: on
line diff
--- a/yeti/silvet.yeti Wed Mar 26 18:49:12 2014 +0000 +++ b/yeti/silvet.yeti Thu Mar 27 11:52:07 2014 +0000 @@ -66,19 +66,30 @@ col = head (drop 35 columns); -\() (plot.plot [ Vector col ]); +\() (plot.plot [ Caption "Source frequency distribution", Vector col ]); -oneIteration em1data col = +sourceGrid d = + mat.fromColumns (map do k: d.sources[k] done (sort (keys d.sources))); + +\() (plot.plot [ Caption "Source distribution beforehand", Grid (sourceGrid em1data)]); + +oneIteration em1data col n = (q = em1.performExpectation em1data col; - \() (plot.plot [ Vector col, Vector q ]); +// \() (plot.plot [ Caption "Frequency distribution and output of E-step for iteration \(n)", Vector col, Vector q ]); newdata = em1.performMaximisation em1data col q; - \() (plot.plot [ Vector (em1data.pitches), Vector (newdata.pitches) ]); + if (n % 2 == 0) then + \() (plot.plot [ Caption "Pitch distribution before and after M-step update for iteration \(n)", Vector (em1data.pitches), Vector (newdata.pitches) ]); + \() (plot.plot [ Caption "Source distribution after M-step update for iteration \(n)", Grid (sourceGrid newdata) ]); + fi; newdata); -em1data = oneIteration em1data col; -em1data = oneIteration em1data col; -em1data = oneIteration em1data col; +iterations = 6; +var d = em1data; + +for [1..iterations] do i: + d := oneIteration d col i; +done; ();