-1

我试图在 x 的范围内生成一个集群,使得 0 < x < 10 和在 y 的范围内,使得 0 < y < 10 与中心 x = 5 和 y = 5。我找不到任何解决方案在线的。谁能帮我这个。以下是我到目前为止得到的

import numpy as np
from sklearn.datasets.samples_generator import make_blobs
from pylab import *

    centers = [[5, 5]]
    X, labels_true = make_blobs(n_samples=100, centers=centers, cluster_std=0.5, random_state=0)
    print X

Example of Output:
 [ 5.07747371  5.18908126]
 [ 4.6781908   3.88829842]
 [ 5.03325861  5.15123595]
 [ 4.44780833  5.02608254]
 [ 4.77223375  5.00873958]
 [ 5.76638961  5.73467938]
 [ 5.08871307  4.79910953]
 [ 4.68207696  5.33821665]
 [ 5.58938979  4.91003758]

如您所见,输出值的 x 从 4 到 6 不等,对于 y 也是如此。我需要能够生成可以控制此范围的集群。

4

1 回答 1

0

make_blobs生成高斯簇。这些没有有限的值范围。超出几个标准偏差的值不太可能,但并非不可能。如果要保证取值范围,请改用均匀分布。

您可以使用centers来控制中心,并cluster_std控制标准差。有关详细信息,请参阅文档make_blobs

或者,如果您的应用程序允许,您可以简单地丢弃超出您请求从截断高斯进行有效采样的范围的值。最后,如果丢弃样本(无论出于何种原因)不是一个有效的选择,您确实可以对两个统一数字进行采样。如果你坚持要得到一个高斯分布,你可以 Box-Muller 将这两个均匀数转换为 2D 高斯(在链接中:从 0 和 1 之间的两个均匀数计算 z1 和 z2:x1 和 x2):

http://mathworld.wolfram.com/Box-MullerTransformation.html

于 2015-03-20T00:37:55.393 回答