생성하는 데이터는 bnstruct에서 3 개의 레이어가있는 DBN으로 처리되며 각 노드는 단일 노드로 구성됩니다. 데이터 집합을 일련의 이벤트로 처리하는 올바른 방법은 i
이벤트의 변수 X
을 j
의 동일한 변수 X
과 다른 변수로 간주하는 것입니다. learn.dynamic.network
은 암시 적 계층화가 적용된 learn.network
의 프록시 일뿐입니다. 즉, 행을 추가하고 열을 추가하여 데이터 집합을 생성 할 필요가 없습니다. 비 네트의 섹션 4.1.2에는 DBN을 배우는 방법에 대한 설명이 있습니다.
구성하고 예에서 데이터 집합을 사용하는 올바른 방법은
mat <- matrix(data = rnorm(numEvents * numRows * numCols), ncol = numCols * numEvents)
varNames <- rep(paste0("var", 1:numCols), numEvents)
colnames(mat) <- varNames
dataset <- BNDataset(data = mat, discreteness = rep(F, ncol(mat)), variables = varNames, node.sizes = rep(3, ncol(mat)))
dbn <- learn.dynamic.network(dataset, num.time.steps = numEvents)
dbn
40 층으로 나누어 120 개 효과적인 노드를 가질 것입니다.
첫 번째 질문 : 한 가지 아이디어는 연속적인 시간 단계의 시작점으로 초기 네트워크를 제공하는 것입니다. 시간 단계 의 데이터 집합이 시간 단계 t
에 사용 된 데이터 집합에 새 열을 추가하여 얻은 것으로 가정하면 데이터 집합을 나타내도록 BN
개체를 수동으로 조정해야합니다. 패키지에서 비네팅
:
그것은 구조 검색을위한 출발점으로서 초기 네트워크를 제공하는 것도 가능하다. 이것은 는 세 종류의 입력을 받아들이는 initial.network
인수를 사용하여 수행 할 수있다 : (a 구조)
BN
개체; 네트워크의 구조를 나타내는 인접 행렬을 포함하는 matrix
;
- 임의로 샘플링 된 체인 모양의 네트워크에서 시작하는 문자열
random.chain
.
가장 간단한 방법은 더 많은 노드가있는 네트워크, 새로운 노드에가는 아무 가장자리를하고, 같이 그 새 DAG를 사용하는 모든 확대에 0
들과 DAG를 펼치기 유지하는 아마 출발점. 귀하의 예 :
library(bnstruct)
numEvents <- 40
numRows <- 5
numCols <- 3
mat <- matrix(data = rnorm(numRows * numCols), ncol = numCols)
varNames <- paste0("var", 1:numCols)
colnames(mat) <- varNames
dataset <- BNDataset(data = mat,
discreteness = rep(F, ncol(mat)),
variables = varNames,
node.sizes = rep(3, ncol(mat)))
dbn <- learn.network(dataset)
for (event in 2:numEvents) {
# collect new data
new.mat <- matrix(data = rnorm(numRows * numCols), ncol = numCols)
colnames(new.mat) <- paste0(varNames, "_", event)
mat <- cbind(mat, new.mat)
dataset <- BNDataset(data = mat,
discreteness = rep(F, ncol(mat)),
variables = colnames(mat),
node.sizes = rep(3, ncol(mat)))
# expand structure of the DBN, adding the nodes relative to the new event
dbn.dag <- dag(dbn)
n.nodes <- ncol(dbn.dag)
new.dag <- matrix(0, nrow=ncol(mat), ncol=ncol(mat))
new.dag[1:n.nodes, 1:n.nodes] <- dbn.dag
# learn
dbn <- learn.dynamic.network(dataset,
initial.network = new.dag,
num.time.steps = event)
}
그러나 이것은 매번 전체 DBN을 다시 배우게됩니다.가장자리가 바로 뒤의 계층에만 갈 수있는 경우 layer.struct
매개 변수를 제공하거나 한 번에 두 개의 이벤트를 사용하여 학습하고 더 큰 DBN을 수동으로 구축하여 검색 공간을 정리할 수 있습니다.
두 번째 질문의 경우 현재 bnstruct는 병렬 처리를 제공하지 않습니다.