我在Scikit learn中使用k-means对398个样本、306个特征进行聚类。特征矩阵是稀疏的,并且聚类的数量是4。为了改进集群,我尝试了两种方法:
-
聚类后,我使用ExtraTreesClassifier()来分类和计算特征重要性(聚类中标记的样本)
-
我使用PCA将特征维度减少到2。我已经计算了以下指标(SS、CH、SH)
Method sum_of_squares, Calinski_Harabasz, Silhouette 1 kmeans 31.682 401.3 0.879 2 kmeans+top-features 5989230.351 75863584.45 0.977 3 kmeans+PCA 890.5431893 58479.00277 0.993
我的问题是:
- 据我所知,如果平方和较小,则聚类方法的性能更好,而如果Silhouette接近1,则聚类法的性能更好。例如,在最后一行中,与第一行相比,平方和和和轮廓都增加了
- 如何选择性能更好的方法
Never比较不同投影、转换或数据集的平方和和和和类似度量。
要了解原因,只需将每个功能乘以0.5,您的SSQ就会下降0.25。因此,要"改进"您的数据集,您只需要将其扩展到很小的大小。。。
这些度量必须仅用于完全相同的输入和参数。你甚至不能用平方和来比较不同k的k均值,因为k越大就会赢。你所能做的就是多次随机尝试,然后以这种方式保持你找到的最佳最小值。
拥有306个功能,您将面临维度的诅咒。在306个维度中进行聚类是没有意义的。因此,我不会在集群之后选择功能。
要获得可解释的结果,需要降低维度。对于398个样品,您需要低尺寸(2,3,也许4)。你的PCA维度2很好。你可以试试3。
在聚类之前选择重要特征的方法可能是有问题的。无论如何,2/3/4"最佳"功能在您的情况下有意义吗?