0

J'ai une matrice de corrélation de la structure typique est de taille 288x288 qui est définie par:AgglomerativeClustering sur une matrice de corrélation

from sklearn.cluster import AgglomerativeClustering 
df = read_returns() 
correl_matrix = df.corr() 

où read_returns me donne une trame de données avec un indice de ce jour, et les colonnes des retours de les atouts. Maintenant, je veux regrouper ces corrélations pour réduire la taille de la population. En faisant un peu de lecture et d'expérimentation, j'ai découvert le AgglomerativeClustering - et il semble au premier passage être une solution appropriée à mon problème.

Je définir une distance métrique ((.5*(1-correl_matrix))**.5) et ont:

cluster = AgglomerativeClustering(n_clusters=40, linkage='average') 
cluster.fit(((.5*(1-correl_matrix))**.5).values) 
label_groups = cluster.labels_ 

Pour observer quelques-unes des données et recouper mon travail, je choisirai groupe 1 et observer les corrélations par paires et trouver la min corrélation entre deux éléments avec ce groupe dans mon jeu de données pour trouver:

single_cluster = [] 
for i in range(0,correl_matrix.shape[0]): 
    if label_groups[i]==1: 
     single_cluster.append(correl_matrix.index[i]) 

min_correl = 1.0 
for x in single_cluster: 
    for y in single_cluster: 
     if x<>y: 
      if correl_matrix[x][y]<min_correl: 
       min_correl = correl_matrix[x][y] 

print min_correl 

et obtenir une corrélation min de .20 par paires

Pour moi, cela semble assez faible - mais "bas basé sur quoi?" est une question juste à laquelle je n'ai pas de réponse.

Je voudrais anticiper/appliquer chaque corrélation par paire d'un cluster à> = 7 ou quelque chose comme ça.

Est-ce possible dans AgglomerativeClustering?

Suis-je accidentellement dans le mauvais sens?

Répondre

0

La classification hiérarchique prend en charge différentes stratégies de «liaison».

  • single-link: ce relie les points sur la distance minimale aux autres dans le cluster
  • complète liaison: cette connexion en fonction de la distance maximale au cluster
  • ...

Si vous voulez une corrélation minimale élevée = petite distance maximale, cela nécessite une liaison complète.

Vous pouvez également traiter les corrélations négatives comme «bonnes». , c'est-à-dire dist = 1 - abs(corr).

Assurez-vous d'utiliser le dendrogramme ghe. Si vous avez des valeurs aberrantes dans vos données, vous voulez couper dans des partitions (n_clusters + n_outliers).