1

我正在做一些聚类研究,需要生成类似于以下示例的合成数据:

数据集示例

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

4

2 回答 2

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)

在此处输入图像描述

于 2012-08-22T19:07:23.990 回答
1

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

无论如何,生成此类数据的明显方法是使用非线性投影,例如使用著名的“abs”函数(绝对值)。

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

于 2012-08-22T19:25:17.657 回答