我对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个非常重要的集群。 –