【问题标题】:Markov Chain Model马尔可夫链模型
【发布时间】:2017-07-22 20:58:17
【问题描述】:

如何使用马尔可夫链模型生成转移矩阵预测下2个Events

我有如下表格中的数据dt

v1<-c(1,1,1,1,1,2,2,2,3,3,3,3,3,3,3)
v2<-c("Jan","Jan","Jan","Feb","Feb","Jan","Jan","Feb","Jan","Jan","Feb","Feb","Feb","Feb","Feb")
v3<-c("A1","E1","F1","B1","A1","E1","B1","C1","B1","D1","E1","A1","B1","C1","F1")
dt <- data.table(emp_id=v1,month=v2,work=v3)

temp1 <- dt[,.(list(work)),.(emp_id,month)]
head(temp1)

temp2 <- temp1[,.(list(V1)),.(emp_id)]
head(temp2)

temp2[,V1 := lapply(V1, unlist, use.names = F)]
dt <- setnames(temp2,"V1","Events")

【问题讨论】:

    标签: r machine-learning data-analysis hidden-markov-models markov-chains


    【解决方案1】:

    在此document 中描述了一个名为 markovchain 的 R 包,它具有将马尔可夫链拟合到给定序列的函数(称为 markovchainFit 的函数)以及从训练的马尔可夫链计算预测的函数(称为predict)。

    编辑:关于我认为不准确的另一个建议答案,我在此处添加了一些元素到我的初始答案中。

    通常,马尔可夫链估计或学习是通过最大似然 (ML)、最大后验 (MAP) 方法或其他技术(例如引导程序)完成的。例如,这些方法可以处理可用序列未达到马尔可夫链的某些现有状态而不在转移矩阵中给它们0概率的情况。这些是任何马尔可夫模型(马尔可夫链、隐马尔可夫模型……)的经典方法

    【讨论】:

      【解决方案2】:

      对于转移矩阵,您所要做的就是创建一个状态方阵,遍历所有观察到的序列,计算转移的数量,然后将每一行除以行总和。对于单个序列sequence,例如

        # Quadratic matrix of states
        states <- unique(sequence)
        mat <- matrix(data = 0,
                      nrow = length(states), 
                      ncol = length(states), 
                      dimnames = list(states, states))
      
        # Calculate transition probabilities
        for(i in 2:length(sequence)) {
          mat[sequence[i - 1], sequence[i]] <- mat[sequence[i - 1], sequence[i]] + 1
        }
        mat <- mat /rowSums(mat)
      

      最有可能的下一个状态显然是上一个状态的转换矩阵行中值最高的那个。

      【讨论】:

      • 我不同意这一点。您解释的技术可能是初始化迭代估计算法的转移矩阵的好方法,但它不是将马尔可夫链拟合到数据的准确方法。人们通常会使用最大似然 (ML) 方法或最大后验 (MAP)。例如,上述两种方法可以处理可用序列未达到马尔可夫链的一个现有状态而不给它0概率的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多