使用Python中的sklearn进行kmeans聚类

我使用以下Python代码对我的数据点进行kmeans聚类。

data =  np.array([[30, 17, 10, 32, 32], [18, 20, 6, 20, 15], [10, 8, 10, 20, 21], [3, 16, 20, 10, 17], [3, 15, 21, 17, 20]])kmeans_clustering = KMeans( n_clusters = 3 )idx = kmeans_clustering.fit_predict( data )#use t-sneX = TSNE(n_components=2).fit_transform( data )fig = plt.figure(1)plt.clf()#plot graphcolors = np.array([x for x in 'bgrcmykbgrcmykbgrcmykbgrcmyk'])plt.scatter(X[:,0], X[:,1], c=colors[kmeans_clustering.labels_])plt.title('K-Means (t-SNE)')plt.show()

然而,我得到的聚类图显示所有点都集中在一个点上。cluster plot

因此,请告诉我我的代码哪里出错了?我希望在散点图中能看到kmeans聚类分开显示。

编辑

我得到的t-sne值如下。

[[  1.12758575e-04   9.30458337e-05] [ -1.82559784e-04  -1.06657936e-04] [ -9.56485652e-05  -2.38951623e-04] [  5.56515580e-05  -4.42453191e-07] [ -1.42039677e-04  -5.62548119e-05]]

回答:

使用TSNEperplexity参数。默认的perplexity值为30,看来对于你的情况来说这个值太大了,尽管文档中提到TSNE对这个参数不太敏感。

perplexity与其他流形学习算法中使用的最近邻居数量有关。较大的数据集通常需要更大的perplexity。考虑选择5到50之间的值。这个选择并不是非常关键,因为t-SNE对这个参数不太敏感。

X = TSNE(n_components=2, perplexity=2.0).fit_transform( data )

enter image description here

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注