【发布时间】:2012-08-22 18:43:47
【问题描述】:
我正在做一些聚类研究,需要生成类似于以下示例的合成数据:
我们有 2 个类别(红色和黑色)的 2d 图。我怎么能生成这样的二维数据?它有一个 V 结构,所以我正在考虑围绕直线生成点 - 有没有办法在 R 中做到这一点? 我正在使用 R,但对其他工具持开放态度(只是数据必须是可导出的)。
【问题讨论】:
标签: r cluster-analysis data-generation
我正在做一些聚类研究,需要生成类似于以下示例的合成数据:
我们有 2 个类别(红色和黑色)的 2d 图。我怎么能生成这样的二维数据?它有一个 V 结构,所以我正在考虑围绕直线生成点 - 有没有办法在 R 中做到这一点? 我正在使用 R,但对其他工具持开放态度(只是数据必须是可导出的)。
【问题讨论】:
标签: r cluster-analysis data-generation
这是一个想法。
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)
【讨论】:
abs(x + rnorm(length(x), sd = .1)) + rnorm(length(x), sd = .1),如果那是您的噪音类型,则使用 runif 而不是 rnorm :)
cmdscale 在由二进制向量组成的数据集上有多合理。这会产生奇怪的预测。您确实应该检查cmdscale 生成的投影类型,这可以归结为“票据上y 的数量”和特定票据的投票行为。因此,您所看到的可能是应用于二进制数据向量的预处理的工件。
p 投票“y”,用 1-p 投票“n”,而2 类做相反的事情),然后通过cmdscale 投影它们。