我确信已经多次询问过相反的情况,但我找不到任何关于如何生成错误的随机数的答案.
我想编写一个用于聚类分析的小程序,并希望生成一些随机点进行测试.如果我只是用随机坐标插入1000个点,它们将分散在整个场地上,这将使得聚类分析毫无价值.
有没有一种简单的方法来生成构建集群的随机数?
我已经想过要么不使用random()
,但random()*random()
它产生正态分布数字(我觉得我读这个地方就在这里堆栈溢出).
第二种方法是随机选取几个区域并在该区域再次运行点生成,这当然会在该区域产生一个簇.
你有更好的主意吗?
如果你故意生成格式良好的集群(而不是完全随机的集群),你可以将两者结合起来找到一个集群中心,然后在正常分布中围绕它放置很多点.
同样在笛卡尔坐标(x,y)中工作; 您可以使用径向方法为特定群集分配点.选择随机角度(0-2PI弧度),然后选择半径.请注意,由于圆周是比例半径,因此面积分布将更接近中心 - 但每个特定半径的分布将相同.修改径向分布以生成更紧密的群集.
或者您可以使用真实世界派生的数据进行自然聚类的半随机点分布.最近我一直在进行相当多的地理空间聚类分析.为此,我使用了现实世界的数据 - 邮政编码质心(在城市周围形成自然群集); 和餐厅的位置.另一个建议是:你可以使用恒星目录或银河目录.
生成很少的锚点.真随机数.然后在它们周围产生噪音:
anchor + dist * (random() - 0.5))
这将生成聚类数字,它们将在距离上均匀分布dist
.