Результаты кластеризации распространения аффинности всегда дают мне большое количество кластеров по сравнению с количеством выборок

#python

Вопрос:

У меня есть 800 образцов с 4096 функциями. Я использовал pca, чтобы уменьшить количество функций до 800, а затем использовал алгоритм кластера AP. Моя проблема в том, почему он дает мне большое количество кластеров, нет смысла объединять 800 небольших объектов в 53 кластера. Есть ли какие-либо проблемы с моим кодом

 enter code here from sklearn.preprocessing import StandardScaler sc = StandardScaler() # Use fit and transform method  f_matrix= features_glioma_tumor std_features = sc.fit_transform(f_matrix)  # apply PCA technique. from sklearn.decomposition import PCA #pca = PCA(n_components = 2) pca = PCA() pca_features = pca.fit_transform(f_matrix) explained_variance = pca.explained_variance_ratio_ pca_features.shape  enter code here  from sklearn.cluster import AffinityPropagation from itertools import cycle import sklearn.metrics as metrics import numpy as np     # Compute similarities  X=pca_features   X_norms = np.sum(X**2, axis=1)  S = - X_norms[:, np.newaxis] - X_norms[np.newaxis, :]   2 * np.dot(X, X.T)  p = 10 * np.median(S)    # Compute Affinity Propagation  af = AffinityPropagation(random_state=0, convergence_iter=300, copy=True, damping=0.9,   max_iter=1000,verbose=True).fit(S, p)   cluster_centers_indices = af.cluster_centers_indices_  labels = af.labels_   n_clusters_ = len(cluster_centers_indices)   #print ('Estimated number of clusters: %d' % n_clusters_)   D = (S / np.min(S))  #print ("Silhouette Coefficient: %0.3f" %  # metrics.silhouette_score(D, labels, metric='precomputed'))   ##############################################################################  # Plot result  import pylab as pl  from itertools import cycle   colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk') for k, col in zip(range(n_clusters_), colors):  class_members = labels == k  cluster_center = X[cluster_centers_indices[k]]  pl.plot(X[class_members, 0], X[class_members, 1], col   '.')  pl.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,  markeredgecolor='k', markersize=14)  for x in X[class_members]:  pl.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)  plt.title("Estimated number of clusters: %d" % n_clusters_)  plt.show()  

введите описание изображения здесь