1
我正在與hidden markov models一起工作。更具體地說,用於濾波和平滑的前向和後向算法。我已經確定了一個表示並且有一個工作進展fn,它將隱含變量和模型的先前概率分佈和返回新的概率分佈。現在我想的濾波函數,它接受傳感器狀態的序列和一個模型,並返回由函數採用順序參數並擁有以前的值
- 的初始狀態的序列(包含在模型內)
- 使用正向上的前一個狀態中的結果返回序列,下一個傳感器狀態和模型。
- 重複2,直到不再有傳感器狀態。
我已經設法通過遞歸得到這個工作,但由於它不是一個尾部位置遞歸它打破了重複,似乎非慣用,通常是一個不好的解決方案。我試圖制定它來處理,減少和迭代,但我似乎無法使它們中的任何一個適合。任何方式來改善它?
(defn filtering
"Perform filtering to decide the likely state based on evidence.
Returns a sequence of state probabilities given a sequence of evidence."
[evidence {:keys [transition sense initial state-map] :as model}]
(if (empty? evidence)
(vector initial)
(let [reading (first evidence)
history (filtering (drop 1 evidence) model)
previous-state (vector (peek history))
fwd (forward previous-state reading model) ]
(conj history fwd)
)
)
)
爲(vector%1)交換%1,它的工作!非常感謝。快速問題:#()宏,相當於匿名(fn [a b])?仍然在Clojure周圍找到我的路,我之前沒有看到它。 – Magos 2013-02-18 21:29:40
@ user1571406是的,它是匿名函數文字的閱讀器宏:http://clojure.org/reader#The%20Reader--Macro%20characters – 2013-02-19 07:52:54