numpy 使用Python生成数据集群?

epfja78i  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(113)

我正在编写一个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以co 1为中心,簇2以co2为中心。X将返回我要绘制的数据点,t是目标值(如果聚类1,则为1,如果聚类2,则为2),因此我可以按聚类对其进行着色。
在这种情况下,t是1 s/2s的大小2 M,并且X是大小2 M * 1,其中如果X[i]在簇1中,则t[i]是1,并且对于簇2也是相同的。
我认为最好的方法是使用numpys random生成数组。我困惑的是如何根据聚类将其居中?
最好的方法是生成一个大小为M的簇,然后将co 1添加到每个点上吗?我怎样才能使它随机,并确保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)
zbsbpyhn

zbsbpyhn1#

对于你的目的,我会选择sklearn样本生成器make_blobs:

from sklearn.datasets 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中的对应点属于哪个聚类。

这对于您在这种情况下试图实现的目标来说可能太多了,但通常情况下,我认为最好依靠更通用和更好测试的库代码,这些代码也可以用于其他情况。

0s7z1bwu

0s7z1bwu2#

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

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()

相关问题