每当我使用相同的预测数据在bsts模型上多次运行预测函数时,我会得到不同的答案。所以我的问题是,有没有办法在保持我的预测数据集相同的情况下返回一致的答案?
使用虹膜数据集的示例(我知道它不是时间序列,但它会说明我的观点)
iris_train <- iris[1:100,1:3]
iris_test <- iris[101:150,1:3]
ss <- AddLocalLinearTrend(list(), y = iris_train$Sepal.Length)
iris_bsts <- bsts(formula = Sepal.Length ~ ., data = iris_train,
state.specification = ss,
family = 'gaussian', seed = 1, niter = 500)
burn <- SuggestBurn(0.1,iris_bsts)
现在如果我按照以下行说10次,每个结果都不同:
iris_predict <- predict(iris_bsts, newdata = iris_test, burn = burn)
iris_predict$mean
我知道它正在运行MCMC模拟,但我需要一致的结果,因此尝试过:
似乎都不起作用。任何帮助将不胜感激!
答案 0 :(得分:1)
我遇到了同样的问题。要修复它,您需要在嵌入式C代码中设置随机种子。我分叉了打包并在此处进行了修改:BSTS。
仅对于软件包安装,请在构建文件夹中下载bsts_0.7.1.1.tar.gz。如果您已经安装了bsts,请通过以下版本替换它:
remove.packages("bsts")
# assumes working directory is whre file is located
install.packages("bsts_0.7.1.1.tar.gz", repos=NULL, tyype="source")
如果您没有安装bsts,请先安装它以确保所有依赖项都存在。 (这可能需要单独安装Rtools,Boom和BoomSpikeSlab。)
此软件包版本仅修改bsts中的预测函数,所有代码都应按原样运行。每次调用预测时,它会自动将随机种子设置为1。如果您希望预测发生变化,则每次都需要明确设置预测参数。
答案 1 :(得分:0)
您可以创建一个函数,每次都指定set.seed
(reproducible_predict <- function(S) {
iris_bsts <- bsts(formula = Sepal.Length ~ ., data = iris_train, state.specification = ss, seed = S, family = 'gaussian', niter = 500)
burn <- SuggestBurn(0.1,iris_bsts)
iris_predict <- predict(iris_bsts, newdata = iris_test, burn = burn)
return(iris_predict$mean)
}
reproducible_predict(1)
[1] 7.043592 6.212780 6.789205 6.563942 6.746156
reproducible_predict(1)
[1] 7.043592 6.212780 6.789205 6.563942 6.746156
reproducible_predict(200)
[1] 7.013679 6.173846 6.763944 6.567651 6.715257
reproducible_predict(200)
[1] 7.013679 6.173846 6.763944 6.567651 6.715257
是不必要的......):
Sub finddata()
Dim nursenumber As String
Dim finalrow As Integer
Dim i As Integer
Dim course As Integer
Dim nurserow As Integer
nursenumber = InputBox("please enter nurse number")
nurserow = InputBox("please enter nurse row")
finalrow = Sheets("S1").Range("A10000").End(xlUp).Row
course = ADORIE
'fire update
For i = 2 To finalrow
Worksheets("S1").Activate
If Cells(i, 1) = nursenumber & Cells(i, 7) = "FIRE" Then
Cells(i, 9).Copy
Worksheets("database").Activate
Cells(nurserow, 2).PasteSpecial
End If
'cpr
If Cells(i, 1) = nursenumber & Cells(i, 7) = "CPRNURL4" Or _
Cells(i, 7) = "BUCPRBYS" Or Cells(i, 7) = "BUCPREMS" Or _
Cells(i, 7) = "CPRACLSR" Or Cells(i, 7) = "CPRADULT" Or _
Cells(i, 7) = "CPRALIED" Or Cells(i, 7) = "CPRBASIC" Or _
Cells(i, 7) = "CPRBYST" Or Cells(i, 7) = "CPRCO567" Or _
Cells(i, 7) = "CPRMANHA" Or Cells(i, 7) = "CPRMCORP" Or _
Cells(i, 7) = "CPRNURL4" Then
Cells(i, 9).Copy
Worksheets("database").Activate
Cells(nurserow, 3).PasteSpecial
Next i
End Sub
答案 2 :(得分:0)
我遇到了同样的问题。 问题出在仅在模型定义内设置种子。
要解决您的问题,您必须在诸如以下的预测函数中设置一个种子:
iris_predict <-预测(iris_bsts,newdata = iris_test,burn = burn,seed = X)
希望这会有所帮助。