Проблема (с минимальным рабочим примером)
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
выше, когда есть несколько близких параметров, чтобы получить эту ошибку. Я получил ошибки (в моей реальной проблеме, а не в MWE выше), когда 4 координаты точки находились примерно на расстоянии 1e-3
от другой точки, и возникла эта проблема.
Похожие вопросы
Вопросов о переполнении стека не так много DiceKriging
. Самый близкий вопрос - этот (из Kriging
package ), в котором проблема заключается в подлинной линейной зависимости. Обратите внимание, что пакет Kriging
не является заменой пакета DiceKriging
, поскольку он ограничен двумя измерениями.
Желаемое решение
Я хотел бы либо:
- Способ изменить мой вызов
km
, чтобы избежать этой проблемы (предпочтительно) - Способ определить, когда возникнет эта проблема, чтобы я мог отбрасывать наблюдения, которые слишком близки друг к другу для вызова кригинга.