我對sklearn
(和python一般)非常陌生,但需要在涉及的某個項目上工作,其中包含超過10k個樣本。對於k = 4的少於100個樣本的測試數據集,使用以下代碼,聚類按預期進行。然而,當我開始使用多於100個樣品,則6/8質心似乎在原點(0,0)即它未能產生羣集重複。任何可能出錯的建議?當超過100個樣本時,Python K-means不適合數據
截圖: 86 Samples, 150 samples
代碼:
data = pd.read_csv('parsed.txt', sep="\t", header=None)
data.columns = ["x", "y"]
kmeans = KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=1000,
n_clusters=k, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
kmeans.fit(data)
labels = kmeans.predict(data)
centroids = kmeans.cluster_centers_
fig = plot.figure(figsize=(5, 5))
colmap = {(x+1): [(np.sin(0.3*x + 0)*127+128)/255,(np.sin(0.3*x + 2)*127+128)/255,(np.sin(0.3*x + 4)*127+128)/255] for x in range(k)} # making rainbow colormap
colors = map(lambda x: colmap[x+1], labels) #color for each label
plot.scatter(data['x'], data['y'], color=colors, alpha=0.5, edgecolor='k')
for idx, centroid in enumerate(centroids):
plot.scatter(*centroid, color=colmap[idx+1])
plot.xlim(0, 4000)
plot.ylim(0, 10000)
plot.show()
@ 150個樣品,我打印的標籤(幾乎所有2S)和質心座標(最在起點)如下所示:
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2]
[[ 7.51619277e+09 7.51619277e+09]
[ 1.00000000e+27 1.00000000e+27]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]]
個更多細節(17年8月20日)
以下是示出集羣從k中的GIF = 1至10分別86和150個樣本。從這裏可以看出,86集合運行良好,但並不適用於僅在原點出現的150集合。請注意,在k = 4幀處設置的顏色變化是由我定義顏色映射的方式引起的,因此不是問題的一部分。
謝謝,穆罕默德。我從來沒有使用肘法,所以我會了解這一點。但是對於我的問題,我確保始終使用相同數量的集羣k = 4。包含更多樣本時使用的數據集與以前具有非常相似的特徵。我也試過k = 3然後是2,但同樣的情況仍然發生。這就是我困惑的原因。 –
如果您添加的樣本具有與之前相同的特徵,那麼它們更可能被添加到使用較小編號獲得的相同羣集中。的樣本。即不會形成新的羣集。你可以在150和86個樣本中發佈k = 2和k = 3的結果嗎? –
我只是用.gif更新了這個帖子,對於86和150組,k = 1-> 10。是的,我預計在這兩種情況下大約有4-5個非常重要的集羣。 –