Lors de l'analyse des données, je rencontre parfois les situations suivantes.
――Je souhaite connaître la relation entre de nombreux types de données ――C'est relativement bruyant, mais je veux le comparer avec d'autres données --Je veux exclure la fausse corrélation «Je veux faire l'hypothèse qu'il n'y a que peu de choses qui sont vraiment pertinentes. ――Je veux essayer une méthode pour le moment
Dans un tel cas, essayons d'utiliser le ** lasso graphique ** pour le moment.
En gros, c'est une méthode de représentation graphique des relations entre les variables. Puisque cette méthode est basée sur la distribution gaussienne multivariée, je pense qu'elle peut être utilisée dans une grande variété d'endroits. Pour plus d'informations [ce livre](https://www.amazon.co.jp/%E7%95%B0%E5%B8%B8%E6%A4%9C%E7%9F%A5%E3%81%A8% E5% A4% 89% E5% 8C% 96% E6% A4% 9C% E7% 9F% A5-% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3 % 83% 97% E3% 83% AD% E3% 83% 95% E3% 82% A7% E3% 83% 83% E3% 82% B7% E3% 83% A7% E3% 83% 8A% E3% 83 % AB% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA-% E4% BA% 95% E6% 89% 8B-% E5% 89% 9B / dp / 4061529080 ) Explique d'une manière très facile à comprendre. Si vous êtes intéressé par la théorie, veuillez l'obtenir.
Celui mis en œuvre cette fois est un programme qui convertit la matrice de précision estimée en une matrice de corrélation et la produit sous forme de graphique. Il y a encore place à l'amélioration, mais je pense que ce sera un indicateur pour faire progresser l'analyse des données.
Préparation des données de test
#Préparez les données de test.
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data
feature_names = boston.feature_names
Traitement principal
import pandas as pd
import numpy as np
import scipy as sp
from sklearn.covariance import GraphicalLassoCV
import igraph as ig
#Standardisez dans la même quantité de fonctionnalités.
X = sp.stats.zscore(X, axis=0)
#Exécutez GraphicalLassoCV.
model = GraphicalLassoCV(alphas=4, cv=5)
model.fit(X)
#Générez des données graphiques.
grahp_data = glasso_graph_make(model, feature_names, threshold=0.2)
#Affichez le graphique.
grahp_data
Fonction de génération de graphes
def glasso_graph_make(model, feature_names, threshold):
#Obtenez la matrice de co-distribution de distribution.
# ->URL de référence: https://scikit-learn.org/stable/modules/generated/sklearn.covariance.GraphicalLassoCV.html
covariance_matrix = model.covariance_
#Convertissez la matrice de variance-co-dispersion en matrice de corrélation.
diagonal = np.sqrt(covariance_matrix.diagonal())
correlation_matrix = ((covariance_matrix.T / diagonal).T) / diagonal
#Générez une matrice avec zéro composante diagonale pour l'affichage du graphique.
correlation_matrix_diag_zero = correlation_matrix - np.diag( np.diag(correlation_matrix) )
df_grahp_data = pd.DataFrame( index=feature_names, columns=feature_names, data=correlation_matrix_diag_zero.tolist() )
#Préparation de la génération de graphes
grahp_data = ig.Graph()
grahp_data.add_vertices(len(feature_names))
grahp_data.vs["feature_names"] = feature_names
grahp_data.vs["label"] = grahp_data.vs["feature_names"]
visual_style = {}
edge_width_list = []
edge_color_list = []
#Génération de graphes
for target_index in range(len(df_grahp_data.index)):
for target_column in range(len(df_grahp_data.columns)):
if target_column >= target_index:
grahp_data_abs_element = df_grahp_data.iloc[target_index, target_column]
if abs(grahp_data_abs_element) >= threshold:
edge = [(target_index, target_column)]
grahp_data.add_edges(edge)
edge_width_list.append(abs(grahp_data_abs_element)*10)
if grahp_data_abs_element > 0:
edge_color_list.append("red")
else:
edge_color_list.append("blue")
visual_style["edge_width"] = edge_width_list
visual_style["edge_color"] = edge_color_list
return ig.plot(grahp_data, **visual_style, vertex_size=50, bbox=(500, 500), vertex_color="skyblue", layout = "circle", margin = 50)
Probablement parce que le seuil est fixé assez bas, la corrélation directe a été trouvée telle quelle. Jetons un coup d'œil aux variables qui semblent avoir la corrélation la plus forte. Les coefficients de corrélation les plus élevés sont RAD (accessibilité autoroutière) et TAX (taux d'imposition foncière total par 10 000 $). En d'autres termes, la taxe est élevée lorsque l'autoroute est facilement accessible. Pour être honnête, je ne peux rien dire avec ces seules données, mais il semble que le résultat ne soit pas erroné.
L'environnement dans lequel vous pouvez l'essayer pour le moment est le meilleur. Concernant le résultat, il aurait peut-être été plus facile de comprendre si les données étaient un peu plus et bruyantes. N'est-ce pas quelque part?
Cette fois, j'ai utilisé le lasso graphique pour représenter graphiquement les relations entre les variables, mais au-delà, il existe des méthodes de détection de changement qui se concentrent sur la structure du graphique, et je pense que cela vaut toujours la peine d'être étudié. Je suis.
Le contenu de cet article est mon opinion personnelle, pas l'opinion officielle de l'organisation à laquelle j'appartiens. L'auteur et l'organisation à laquelle il appartient ne sont pas responsables des problèmes qui pourraient survenir aux utilisateurs ou à des tiers après la mise en œuvre du contenu de cet article.
Recommended Posts