Извлечение 5 ближайших соседей с использованием иерархической агломерационной кластеризации в python - PullRequest
0 голосов
/ 26 февраля 2020

Я уже выполнил HA C для своего набора данных и получил результаты от кластеризации. Теперь я хочу видеть в каждом кластере, кто ближе всего друг к другу.

Код, который я использовал для построения своей HA C, выглядит следующим образом:

 # import hierarchical clustering libraries
 import scipy.cluster.hierarchy as sch
 from sklearn.cluster import AgglomerativeClustering
 # create clusters for the test data set
 # hc = AgglomerativeClustering(n_clusters=6, affinity = 'euclidean', linkage = 'ward')
 # save clusters for chart
 y_hc1 = hc.fit_predict(df_pca_reduced)
 plt.figure(figsize =(12, 12)) 

  plt.scatter(df_pca_reduced_noncritical.iloc[:,0], df_pca_reduced_noncritical.iloc[:,1], 
        c = y_hc1, cmap ='prism') 
 plt.show()

Мой кластер set выглядит следующим образом:

 1    1553
 0    1127
 4     670
 2     582
 3     475
 5     259
 Name: cluster, dtype: int64

У меня есть 6 хороших кластеров, но теперь я хочу go немного глубже, чтобы понять, кто является ближайшим друг к другу на уровне кластера. Я пытаюсь найти ближайших соседей для каждой точки данных (каждой строки) в моем кластере, так как я работаю над неконтролируемой проблемой обучения, когда мне нужно увидеть следующих 5 потенциальных соседей. Мне нужно ранжировать соседей по расстоянию от определенного c точки данных. Как я могу это сделать?

Я также провел тест функции относительной важности, который дает мне наиболее важные функции на уровне кластера, но все же, что мне делать дальше с этим? Это не говорит мне моих следующих лучших соседей. Пожалуйста, см. Также этот код ниже:

# Visulaising cluster importance 
 cluster_avg1 = hiersclus_df.groupby(['cluster']).mean()
 # Calculate average RFM values for the total customer population
 population_avg1 = df1_clean.mean()
 # Calculate relative importance of cluster's attribute value compared to population
 relative_imp1 = cluster_avg1 / population_avg1 - 1
 plt.figure(figsize=(20, 8))
 plt.title('Relative importance of features')
 ax1 =sns.heatmap(data=relative_imp, annot=True, fmt='.2f', cmap='RdYlGn',vmax=2,vmin=-1)

 plt.show()

Немного о моем наборе данных, его сочетании категориальных и непрерывных функций, 47 из них с 5000 строк.

...