#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()