问题(最小的工作示例)
当数据接近线性相关时,Dicekriging 会在大约一半的时间内给出线性相关误差。下面的示例可以看出这一点,当我在 Ubuntu 和 Windows 计算机上运行它时,大约有一半的时间出现了错误。当我使用遗传或 BFGS 优化运行它时,就会发生这种情况。
install.packages("DiceKriging")
library(DiceKriging)
x = data.frame(Param1 = c(0,1,2,2,2,2), Param2 = c(2,0,1,1e-7,0,2))
y = 1:6
duplicated(cbind(x,y))
Model = km( design = x, response = y , optim.method = "gen", control = list(maxit = 1e4), coef.cov = 1)
Model = km( design = x, response = y , optim.method = "BFGS", control = list(maxit = 1e4), coef.cov = 1)
当数据稍微分散一点时,就不会发生此类错误。
# No problems occur if the data is more dispersed.
x = data.frame(Param1 = c(0,1,2,2,2,2), Param2 = c(2,0,1,1e-2,0,2))
y = 1:6
duplicated(cbind(x,y))
Model = km( design = x, response = y , optim.method = "gen", control = list(maxit = 1e4), coef.cov = 1)
为什么这是一个问题
使用克里金法优化昂贵模型意味着靠近最优值的点将被密集采样。发生此错误时无法执行此操作。1e-7
此外,当有多个参数都接近时,接近点需要比上述更接近才能获得此错误。1e-3
当一个点的 4 个坐标与另一个点分开并且发生此问题时,我得到了错误(在我的实际问题中,而不是上面的 MWE) 。
相关问题
DiceKriging
关于堆栈溢出的问题并不多。最接近的问题是这个问题(来自Kriging
package ),其中问题是真正的线性依赖。请注意,Kriging
包装不能替代DiceKriging
,因为它仅限于 2 维。
所需的解决方案
我想要:
- 一种改变我的
km
电话以避免这个问题的方法(首选) - 一种确定何时会发生此问题的方法,以便我可以丢弃彼此太接近而无法进行克里金调用的观测值。