0
我成功實現了以下任務,但我只是將它用於小型測試數據集。對於我的真實數據集,它只是不斷計算。計算從s1:s400到sn中的大馬爾可夫轉換矩陣的概率需要永久
我在R中有一個400x400的轉換概率矩陣。如果用戶在馬爾可夫步行上轉換,用戶點擊「轉換」。所有用戶的吸收狀態爲「空」。 「開始」是我的開始狀態。
兩件事情我需要計算:
- 命中狀態s_j上隨機遊走在「開始」開始
- 命中「轉換」上在每個397個其他國家開始隨機遊走
第一個是容易R:
v <- numeric(length = ncol(transitionMatrix1))
v[1] <- 1
i <- 2
R0 <- v%*%(transitionMatrix1 %^% 1)
R <- R0
repeat {
R1 <- v%*%(transitionMatrix1 %^% i)
R <- rbind(R, R1)
if (rowSums(R[nrow(R)-1,] - R1) == 0) {
#if (rowSums(R[nrow(R)-1,] - R1) < epsilon) {
break
}
else {
i <- i+1
}
}
visit1 <- colSums(R)
我成功地實施2,但我只有它與一個小矩陣一起工作。它需要一個大的永遠:
w <- i
C1 <- matrix(nrow = w, ncol = ncol(transitionMatrix1))
for (i in 1:ncol(transitionMatrix1)) {
x <- numeric(length = ncol(transitionMatrix1))
x[i] <- 1
for (j in 1:w) {
C1[j,i] <- x%*%(transitionMatrix1 %^% j)[,ncol(transitionMatrix1)-1]
}
}
convert1 <- colSums(C1)
我應該不使用循環。不幸的是,我沒有成功實現這些操作的矢量化。
什麼可以幫助我在同一時間保持兩個矩陣在內存中 - 原來的一個和轉置一個,並相應地使用一個或另一個 –
雖然我不完全明白你想要計算什麼,我認爲你可以得到你想要的表達式,而不需要重複乘上矩陣。有關快速概述,請參閱https://en.wikipedia.org/wiki/Absorbing_Markov_chain並進行完整分析,請參閱http://www.math.pku.edu.cn/teachers/yaoy/Fall2011/Kemeny-Snell1976.pdf。你需要計算基本矩陣,然後你可以獲得各種性能指標。 – Forzaa