【问题标题】:Generating points around straight line围绕直线生成点
【发布时间】:2012-08-22 18:43:47
【问题描述】:

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

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

【问题讨论】:

    标签: r cluster-analysis data-generation


    【解决方案1】:

    这是一个想法。

    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)
    

    【讨论】:

    • 不客气!我曾经研究过一个密度估计器,不得不生成各种疯狂的分布来进行基准测试,这很有趣。
    【解决方案2】:

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

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

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

    【讨论】:

    • 在 R 中:abs(x + rnorm(length(x), sd = .1)) + rnorm(length(x), sd = .1),如果那是您的噪音类型,则使用 runif 而不是 rnorm :)
    • 实际上我正在“国会投票记录数据集”上测试我的相似性度量:archive.ics.uci.edu/ml/datasets/Congressional+Voting+Records 如果我缩放(cmdscale)生成的距离矩阵到二维我得到点,如上面的例子。我的相似性度量有一个参数,并且使用投票数据集,对于该参数的不同值,我得到不同的结果。我想看看这是否适用于所有形状相似的集群。
    • 我不确定cmdscale 在由二进制向量组成的数据集上有多合理。这会产生奇怪的预测。您确实应该检查cmdscale 生成的投影类型,这可以归结为“票据上y 的数量”和特定票据的投票行为。因此,您所看到的可能是应用于二进制数据向量的预处理的工件
    • 对于数据生成,首先生成二进制向量可能会非常有效(对于概率 p,类 1 用 p 投票“y”,用 1-p 投票“n”,而2 类做相反的事情),然后通过cmdscale 投影它们。
    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多