【问题标题】:Python: Generate 2D points / clustersPython:生成 2D 点/簇
【发布时间】:2017-10-24 01:15:48
【问题描述】:

我尝试编写一个聚类算法,现在我想创建一些简单的 2D 测试用例:我喜欢在 [0, 1]x[0, 1] 中生成点来构建聚类。

例如像这样的东西:

如果集群具有不同(但随机)的形状会更好,例如喜欢:

有没有一种简单的方法可以用 python / numpy 做到这一点?不幸的是,这一代必须非常有效。我写了一些代码,但集群总是具有相同的形状,并且它们通常彼此相距很远。可能已经有一个不错的算法了?

谢谢

【问题讨论】:

  • “非常有效”的生成是有争议的。您可以创建随机多边形并仅在其中生成点。你会得到随机形状的集群,但这意味着一些更繁重的操作,而不仅仅是基于分布生成一些数字。这在可接受范围内吗?

标签: python algorithm numpy cluster-analysis


【解决方案1】:

不,没有打包的方法可以做到这一点。然而,生成算法并不难写。第一个似乎是每个维度(X 和 Y)中的高斯分布,对三个质心中的每一个重复生成。或者,也许它是一个统一的方向,具有“衰减函数”距离。

第二个是一对集合:从具有小方差的高斯中选择半径,而方向在整个圆上是一致的。对平均半径 1 和平均半径 3 执行此操作。

这会让你感动吗?

【讨论】:

  • 它有帮助,谢谢:)!但是第二个例子应该更一般,集群应该有任何形状(不仅仅是圆形)。但我认为这不是一件容易的事吗?
  • 不——没有“任何形状”的算法。稍微概括一下:“有人可以给我算法来给我想要的任何输出吗?更好的是,是否有 Python 包可以做到这一点?”信息论证明这在很少的步骤中是不可能的。 :-)
  • 好的,谢谢;)也许我应该用“用最小复杂算法尽可能多的形状”替换“任何形状”;)但似乎简单的高斯集群已经产生了合理的测试数据:) 谢谢:)!
  • 对。通过均匀、高斯、指数和泊松的简单组合,我们可以得到大部分我们需要的东西。
猜你喜欢
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2011-12-03
  • 2013-12-17
  • 2018-08-18
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多