生成直线周围的点

时间:2012-08-22 18:43:47

标签: r cluster-analysis data-generation

我正在进行一些聚类研究,需要生成看起来像这些例子的合成数据:

Dataset examples

我们有2个图,有2个类(红色和黑色)。我怎么能像这样生成2D数据?它有一个V结构,所以我考虑围绕直线产生点 - 有没有办法在 R 中做到这一点? 我正在使用 R ,但我对其他工具持开放态度(只需将数据导出)。

2 个答案:

答案 0 :(得分:2)

这是一个想法。

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)

enter image description here

答案 1 :(得分:1)

有没有理由生成这种非常特殊的类型的数据?从中得出的任何结果都可能不会推广到其他数据集。

无论如何,产生这种数据的显而易见的方法是使用非线性投影,例如:使用着名的“abs”函数(绝对值)。

即。 project x to(在python语法中,我不喜欢R):math.abs(x)或者如果你想要一些额外的随机性:math.abs(x + random.random(.1)) + random.random(.1)