【问题标题】:Using python to generate clusters of data?使用python生成数据集群?
【发布时间】:2018-04-17 07:43:55
【问题描述】:

我正在研究一个 Python 函数,我想在其中建模一个高斯分布,但我被困住了。

import numpy.random as rnd
import numpy as np

def genData(co1, co2, M):
  X = rnd.randn(2, 2M + 1)
  t = rnd.randn(1, 2M + 1)
  numpy.concatenate(X, co1)
  numpy.concatenate(X, co2)
  return(X, t)

我正在尝试两个大小为 M 的集群,集群 1 以 co1 为中心,集群 2 以 co2 为中心。 X 将返回我要绘制的数据点,t 是目标值(如果集群 1 为 1,如果集群 2 为 2),因此我可以按集群对其进行着色。

在这种情况下,t 的大小为 1s/2s 的 2M,X 的大小为 2M * 1,其中如果 X[i] 在集群 1 中,则 t[i] 为 1,对于集群 2 也是如此。

我认为开始执行此操作的最佳方法是使用 numpys random 生成数组数组。我很困惑的是如何根据集群使其居中?


最好的方法是生成一个大小为 M 的集群,然后将 co1 添加到每个点?我如何让它随机,并确保 t[i] 正确着色?

我正在使用这个函数来绘制数据:

def graphData():
    co1 = (0.5, -0.5)
    co2 = (-0.5, 0.5)
    M = 1000
    X, t = genData(co1, co2, M)
    colors = np.array(['r', 'b'])
    plt.figure()
    plt.scatter(X[:, 0], X[:, 1], color = colors[t], s = 10)

【问题讨论】:

  • 使用numpy.random.multivariate_normal。将 mean 参数作为长度为 2 的向量给出;这将是集群的位置。
  • @WarrenWeckesser 谢谢沃伦,但是我将如何使它使 X 是随机的并且 t 会告诉我它属于哪个集群?

标签: python numpy cluster-analysis gaussian


【解决方案1】:

你可以使用类似下面的代码:

center1 = (50, 60)
center2 = (80, 20)
distance = 20


x1 = np.random.uniform(center1[0], center1[0] + distance, size=(100,))
y1 = np.random.normal(center1[1], distance, size=(100,)) 

x2 = np.random.uniform(center2[0], center2[0] + distance, size=(100,))
y2 = np.random.normal(center2[1], distance, size=(100,)) 

plt.scatter(x1, y1)
plt.scatter(x2, y2)
plt.show()

【讨论】:

    【解决方案2】:

    出于您的目的,我会选择sklearn 样本生成器make_blobs

    from sklearn.datasets.samples_generator import make_blobs
    
    centers = [(-5, -5), (5, 5)]
    cluster_std = [0.8, 1]
    
    X, y = make_blobs(n_samples=100, cluster_std=cluster_std, centers=centers, n_features=2, random_state=1)
    
    plt.scatter(X[y == 0, 0], X[y == 0, 1], color="red", s=10, label="Cluster1")
    plt.scatter(X[y == 1, 0], X[y == 1, 1], color="blue", s=10, label="Cluster2")
    

    您可以使用它生成多维集群。 X 产生数据点,y 正在确定X 中的对应点属于哪个集群。

    这对于您在这种情况下尝试实现的目标可能太过分了,但总的来说,我认为最好依赖更通用且经过更好测试的库代码,这些代码也可以在其他情况下使用。

    【讨论】:

    • 效果很好。唯一的小问题是 samples_generator 现在已弃用。应该改用from sklearn.datasets import make_blobs
    猜你喜欢
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2021-07-07
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多