ポイントのコレクションで構成されるデータセットがあります。ポイントは、放物線で大まかに囲まれるように平面上に分散されます。ポイントの境界に放物線を合わせる方法を見つけようとしています。
これは私が現在持っているものです:
a = 1
b = 2
c = 3
parabola <- function(x) {
a * x^2 + b * x + c
}
N = 10000
x <- runif(N, -4, 3)
y <- runif(N, 0, 10)
data <- data.frame(x, y)
data <- subset(data, y >= parabola(x))
plot(data, xlim = c(-5, 5), ylim = c(0, 10), col = "grey")
fr <- function(x) {
PAR = x[1] * data$x^2 + x[2] * data$x + x[3]
#
sum((PAR - data$y)^2 + 100 * plogis(PAR - data$y, scale = 0.00001))
}
par = optim(c(0, 0, 0), fr)$par
a = par[1]
b = par[2]
c = par[3]
curve(parabola, add = TRUE, lty = "dashed")
これにより、サンプルデータセットが作成され、曲線が境界にフィットします。目的関数は、放物線をデータに適合させる「通常の」二乗誤差項と、放物線の下にあるポイントにペナルティを課す2番目のロジスティック項で構成されます。この第2項のパラメーター(100および0.00001)は、試行錯誤によって決定されました。
コードは、点と適合放物線をプロットします。
現在、このシステムは機能しています...しかし、一部の時間のみです。時々それは完全に間違った適合を生成します、そして私はこれらの例ではロジスティック項のパラメータがちょうど不適切であると思います。コードを数回実行して、私が何を意味するかを確認します。
この問題を解決するためのより堅牢な方法が必要だと確信しています。アイデアや提案?
。