私はいくつかのクラスタリング調査を行っており、次の例のような合成データを生成する必要があります。
2つのクラス(赤と黒)の2Dプロットがあります。このような2Dデータを生成するにはどうすればよいですか?それはV構造なので、直線の周りに点を生成することを考えていました-Rでそれを行う方法はありますか?私はRを使用していますが、他のツールを使用できます(データのみをエクスポート可能にする必要があります)。
私はいくつかのクラスタリング調査を行っており、次の例のような合成データを生成する必要があります。
2つのクラス(赤と黒)の2Dプロットがあります。このような2Dデータを生成するにはどうすればよいですか?それはV構造なので、直線の周りに点を生成することを考えていました-Rでそれを行う方法はありますか?私はRを使用していますが、他のツールを使用できます(データのみをエクスポート可能にする必要があります)。
ここに考えがあります。
n <- c(200,200) # Number of points in each class
cls <- rep(1:2, n) # Class memberships
i <- c(.2-.12*abs(rnorm(n[1])), # Noiseless x position
-.2+.12*abs(rnorm(n[2])))
noise <- .04*(.2-abs(i)) # Noise level relative to `i`
# Final sample
x <- cbind(i, abs(.5*i)) + noise*matrix(rnorm(sum(n)*2), sum(n), 2)
plot(x[,1], x[,2], col=cls)
この非常に特殊なタイプのデータを生成する理由はありますか?これから得られた結果は、他のデータセットに一般化されない可能性があります。
とにかく、この種のデータを生成する明白な方法は、たとえば有名な「abs」関数(絶対値)を使用するなど、非線形投影を使用することです。
つまり、xをプロジェクトします(Python構文では、Rは好きではありません):math.abs(x)
または、さらにランダム性が必要な場合:math.abs(x + random.random(.1)) + random.random(.1)