Python:sklearn生成在数据点的指定范围内的集群

时间:2015-03-19 23:48:36

标签: python cluster-analysis data-generation

我正在尝试生成x范围内的集群,使得0 <0。 x&lt;在图10的范围内,y在y的范围内,使得0 <0。 y&lt; 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的值相同。我需要能够生成可以控制此范围的集群。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

相关问题