วิธีการจำลองข้อมูลการทำงาน?


12

ฉันพยายามทดสอบวิธีการวิเคราะห์ข้อมูลการทำงานต่างๆ เป็นการดีที่ฉันต้องการทดสอบแผงวิธีที่ฉันมีกับข้อมูลจำลองการทำงาน ฉันได้พยายามที่จะสร้างจำลอง FD ใช้วิธีการขึ้นอยู่กับข้อสรุปเสียงเกาส์ (รหัสด้านล่าง) แต่เส้นโค้งที่เกิดขึ้นมีลักษณะขรุขระมากเกินไปเมื่อเทียบกับสิ่งที่จริง

ฉันสงสัยว่าใครบางคนมีตัวชี้ไปยังฟังก์ชั่น / ความคิดเพื่อสร้างข้อมูลจำลองการทำงานที่ดูสมจริงมากขึ้น โดยเฉพาะอย่างยิ่งสิ่งเหล่านี้ควรราบรื่น ฉันยังใหม่กับสาขานี้อย่างสมบูรณ์ดังนั้นยินดีให้คำแนะนำใด ๆ

library("MASS")
library("caTools")
VCM<-function(cont,theta=0.99){
    Sigma<-matrix(rep(0,length(cont)^2),nrow=length(cont))
    for(i in 1:nrow(Sigma)){
        for (j in 1:ncol(Sigma)) Sigma[i,j]<-theta^(abs(cont[i]-cont[j]))
    }
    return(Sigma)
}


t1<-1:120
CVC<-runmean(cumsum(rnorm(length(t1))),k=10)
VMC<-VCM(cont=t1,theta=0.99)
sig<-runif(ncol(VMC))
VMC<-diag(sig)%*%VMC%*%diag(sig)
DTA<-mvrnorm(100,rep(0,ncol(VMC)),VMC)  

DTA<-sweep(DTA,2,CVC)
DTA<-apply(DTA,2,runmean,k=5)
matplot(t(DTA),type="l",col=1,lty=1)

1
คุณไม่สามารถจำลองข้อมูลที่มีฟังก์ชั่นที่รู้จักกันดีและเพิ่มสัญญาณรบกวนแบบสุ่มหรือไม่? ตัวอย่างเช่นx=seq(0,2*pi,length=1000); plot(sin(x)+rnorm(1000)/10,type="l");
แมโคร

@Macro: ไม่งั้นถ้าคุณซูมเข้าไปพล็อตคุณจะเห็นว่าฟังก์ชั่นที่สร้างขึ้นมันไม่ราบรื่น เปรียบเทียบกับบางส่วนของเส้นโค้งบนภาพนิ่งเหล่านี้: bscb.cornell.edu/~hooker/FDA2007/Lecture1.pdf เส้นโค้งเรียบของ x ของคุณสามารถทำกลอุบายได้ แต่ฉันกำลังมองหาวิธีการสร้างข้อมูลโดยตรง
603

เมื่อใดก็ตามที่คุณรวมถึงเสียง (ซึ่งเป็นส่วนที่จำเป็นของโมเดลสุ่มใด ๆ ) ข้อมูลดิบจะเป็นไปโดยเนื้อแท้และไม่ราบรื่น ความโค้งแบบพอดีที่คุณอ้างถึงคือสมมติว่าสัญญาณราบรื่น - ไม่ใช่ข้อมูลที่สังเกตได้จริง (ซึ่งเป็นการรวมกันของสัญญาณและเสียงรบกวน)
มาโคร

@Macro: เปรียบเทียบกระบวนการจำลองของคุณกับกระบวนการในหน้า 16 ของเอกสารนี้: inference.phy.cam.ac.uk/mackay/gpB.pdf
user603

1
ใช้พหุนามลำดับที่สูงขึ้น พหุนามระดับ 20 ที่มีสัมประสิทธิ์แบบสุ่ม (ที่มีการกระจายที่ถูกต้อง) สามารถเปลี่ยนทิศทาง (ราบรื่น) ค่อนข้างมาก หากคุณพบคำตอบสำหรับคำถามของคุณบางทีคุณสามารถโพสต์เป็นคำตอบได้?
แมโคร

คำตอบ:


8

ดูวิธีการจำลองการรับรู้ของกระบวนการแบบเกาส์เซียน (GP) ความราบรื่นของการรับรู้ขึ้นอยู่กับคุณสมบัติการวิเคราะห์ของฟังก์ชันความแปรปรวนร่วมของ GP หนังสือออนไลน์เล่มนี้มีข้อมูลจำนวนมาก: http://uncertainty.stat.cmu.edu/

วิดีโอนี้ให้คำแนะนำที่ดีเกี่ยวกับ GP: http://videolectures.net/gpip06_mackay_gpb/

ป.ล. เกี่ยวกับความคิดเห็นของคุณรหัสนี้อาจให้คุณเริ่มต้น

library(MASS)
C <- function(x, y) 0.01 * exp(-10000 * (x - y)^2) # covariance function
M <- function(x) sin(x) # mean function
t <- seq(0, 1, by = 0.01) # will sample the GP at these points
k <- length(t)
m <- M(t)
S <- matrix(nrow = k, ncol = k)
for (i in 1:k) for (j in 1:k) S[i, j] = C(t[i], t[j])
z <- mvrnorm(1, m, S)
plot(t, z)

คุณมีลิงค์ที่เชื่อมโยงคำถามเกี่ยวกับวิธีจำลองการรับรู้ของกระบวนการเกาส์เซียนโดยเฉพาะหรือไม่? สิ่งนี้ไม่ได้อยู่ในหนังสือ (ดูที่ดัชนี)
user603

การจำลองของ GP นั้นกระทำผ่านการแจกแจงเชิงมิติ โดยพื้นฐานแล้วคุณเลือกจุดต่าง ๆ ของโดเมนตามที่คุณต้องการและจากฟังก์ชันค่าเฉลี่ยและความแปรปรวนร่วมของ GP คุณจะได้ค่าปกติหลายตัวแปร การสุ่มตัวอย่างจากตัวแปรหลายตัวแปรนี้ให้คุณค่าของการรับรู้ของ GP ณ จุดที่เลือก อย่างที่ฉันได้กล่าวไปแล้วค่าเหล่านี้นั้นประมาณว่าเป็นฟังก์ชันที่ราบรื่นตราบใดที่ฟังก์ชันความแปรปรวนร่วมของ GP ตรงตามเงื่อนไขการวิเคราะห์ที่จำเป็น ฟังก์ชันความแปรปรวนร่วมกำลังสอง (กับคำว่า "กระวนกระวายใจ") เป็นการเริ่มต้นที่ดี
Zen

4

ตกลงนี่คือคำตอบที่ฉันได้รับมา (โดยพื้นฐานแล้วมาจากที่นี่และ ที่นี่ ) แนวคิดคือเพื่อฉายคู่สุ่มให้กับพื้นฐานที่เป็นอิสระ จากนั้นเรามั่นใจว่าจะได้รับการจับฉลากจาก (ราบรื่น) GP{xi,yi}

require("MASS")
calcSigma<-function(X1,X2,l=1){
    Sigma<-matrix(rep(0,length(X1)*length(X2)),nrow=length(X1))
    for(i in 1:nrow(Sigma)){
        for (j in 1:ncol(Sigma)) Sigma[i,j]<-exp(-1/2*(abs(X1[i]-X2[j])/l)^2)
    }
    return(Sigma)
}
# The standard deviation of the noise
n.samples<-50
n.draws<-50
x.star<-seq(-5,5,len=n.draws)
nval<-3
f<-data.frame(x=seq(-5,5,l=nval),y=rnorm(nval,0,10))
sigma.n<-0.2
# Recalculate the mean and covariance functions
k.xx<-calcSigma(f$x,f$x)
k.xxs<-calcSigma(f$x,x.star)
k.xsx<-calcSigma(x.star,f$x)
k.xsxs<-calcSigma(x.star,x.star)
f.bar.star<-k.xsx%*%solve(k.xx+sigma.n^2*diag(1,ncol(k.xx)))%*%f$y
cov.f.star<-k.xsxs-k.xsx%*%solve(k.xx+sigma.n^2*diag(1,ncol(k.xx)))%*%k.xxs
values<-matrix(rep(0,length(x.star)*n.samples),ncol=n.samples)
for (i in 1:n.samples)  values[,i]<-mvrnorm(1,f.bar.star,cov.f.star)
values<-cbind(x=x.star,as.data.frame(values))
matplot(x=values[,1],y=values[,-1],lty=1,type="l",col="black")
lines(x.star,f.bar.star,col="red",lwd=2)

การทดลอง  ฟังก์ชั่นที่ราบรื่น


มันดูดีนะ!
Zen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.