簡體   English   中英

使用python生成數據集群?

[英]Using python to generate clusters of data?

我正在研究一個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是2s的1s / 2s,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)

為了您的目的,我會去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對應點屬於哪個簇。

在此輸入圖像描述

對於您在這種情況下嘗試實現的內容,這可能過多,但一般來說,我認為最好依賴於可以在其他情況下使用的更通用且經過更好測試的庫代碼。

您可以使用以下代碼:

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

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM