计算概率后缀树中上下文状态关系的提升?
Calculate lift for context-state relationship in a probabilistic suffix tree?
PST
给出了各种上下文和后续状态的概率和条件概率。但是,如果能够计算上下文和后续状态之间关系的提升(及其重要性),将会非常有帮助。我该怎么做?
# Load libraries
library(RCurl)
library(TraMineR)
library(PST)
# Get data
x <- getURL("https://gist.githubusercontent.com/aronlindberg/08228977353bf6dc2edb3ec121f54a29/raw/c2539d06771317c5f4c8d3a2052a73fc485a09c6/challenge_level.csv")
data <- read.csv(text = x)
# Load and transform data
data <- read.table("thread_level.csv", sep = ",", header = F, stringsAsFactors = F)
# Create sequence object
data.seq <- seqdef(data[2:nrow(data),2:ncol(data)], missing = NA, right= NA, nr = "*")
# Make a tree
S1 <- pstree(data.seq, ymin = 0.05, L = 6, lik = TRUE, with.missing = TRUE)
# Look at first state
cmine(S1, pmin = 0, state = "N3", l = 2)
这给出了几个上下文,其中之一是:
[>] context: N2
EX FA I1 I2 I3 N1 N2 N3 NR QU
S1 0.07692308 0.08076923 0.05769231 0.07692308 0.05 0.06923077 0.1038462 0.06153846 0.1269231 0.07307692
TR *
S1 0.08076923 0.1423077
假设我想计算 QU
和 N3
之间关系的提升。我们知道给定N2
的N3
的条件概率是0.05
。要计算升力,我会不会只是结果状态的 divide the conditional probability by the unconditional probability,像这样:
0.05/unconditional probability of N3
如果我们做 seqstatf(data.seq)
,我们可以看到 N3
个标记的分数是 0.01721715
。那是否意味着电梯是:
0.05/0.01721715=2.90408110518
或者根据 cmine(S1, pmin = 0, state = "N3", l = 1)
给出的 e
取 N3
的概率更合适,即 0.001554569
?这将产生以下提升:
0.05/0.001554569=32.163255539
明显更高...
推理正确。但是,seqstatf
的问题在于它没有考虑缺失状态 (*
)。以下是如何获得 N3
的总体概率
nN3 <- sum(data.seq == 'N3')
nn <- nrow(data.seq)*ncol(data.seq)
(pN3 <- nN3/nn)
得到 0.001556148
.
所以电梯会在这里
ctx <- cmine(S1, pmin = 0, state = "N3", l = 2)
(liftN3 <- ctx$N2[,"N3"]/pN3)
即39.5
.
另一种可能更有意义的替代方法是在我们排除缺失状态时考虑条件概率,即用没有缺失状态的树获得的概率。
PST
给出了各种上下文和后续状态的概率和条件概率。但是,如果能够计算上下文和后续状态之间关系的提升(及其重要性),将会非常有帮助。我该怎么做?
# Load libraries
library(RCurl)
library(TraMineR)
library(PST)
# Get data
x <- getURL("https://gist.githubusercontent.com/aronlindberg/08228977353bf6dc2edb3ec121f54a29/raw/c2539d06771317c5f4c8d3a2052a73fc485a09c6/challenge_level.csv")
data <- read.csv(text = x)
# Load and transform data
data <- read.table("thread_level.csv", sep = ",", header = F, stringsAsFactors = F)
# Create sequence object
data.seq <- seqdef(data[2:nrow(data),2:ncol(data)], missing = NA, right= NA, nr = "*")
# Make a tree
S1 <- pstree(data.seq, ymin = 0.05, L = 6, lik = TRUE, with.missing = TRUE)
# Look at first state
cmine(S1, pmin = 0, state = "N3", l = 2)
这给出了几个上下文,其中之一是:
[>] context: N2
EX FA I1 I2 I3 N1 N2 N3 NR QU
S1 0.07692308 0.08076923 0.05769231 0.07692308 0.05 0.06923077 0.1038462 0.06153846 0.1269231 0.07307692
TR *
S1 0.08076923 0.1423077
假设我想计算 QU
和 N3
之间关系的提升。我们知道给定N2
的N3
的条件概率是0.05
。要计算升力,我会不会只是结果状态的 divide the conditional probability by the unconditional probability,像这样:
0.05/unconditional probability of N3
如果我们做 seqstatf(data.seq)
,我们可以看到 N3
个标记的分数是 0.01721715
。那是否意味着电梯是:
0.05/0.01721715=2.90408110518
或者根据 cmine(S1, pmin = 0, state = "N3", l = 1)
给出的 e
取 N3
的概率更合适,即 0.001554569
?这将产生以下提升:
0.05/0.001554569=32.163255539
明显更高...
推理正确。但是,seqstatf
的问题在于它没有考虑缺失状态 (*
)。以下是如何获得 N3
nN3 <- sum(data.seq == 'N3')
nn <- nrow(data.seq)*ncol(data.seq)
(pN3 <- nN3/nn)
得到 0.001556148
.
所以电梯会在这里
ctx <- cmine(S1, pmin = 0, state = "N3", l = 2)
(liftN3 <- ctx$N2[,"N3"]/pN3)
即39.5
.
另一种可能更有意义的替代方法是在我们排除缺失状态时考虑条件概率,即用没有缺失状态的树获得的概率。