Si vous voulez essayer l'apprentissage automatique, n'importe qui peut utiliser scicit-learn etc. pour l'implémenter relativement facilement. Cependant, afin d'obtenir des résultats au travail ou d'améliorer votre niveau ** "Je ne connais pas le fond, mais j'ai obtenu ce résultat" ** Vous pouvez voir qu'il est clairement faible.
Cette fois, nous allons nous concentrer sur ** "Non corrélé" **.
D'après l'explication précédente, "J'ai entendu parler de la décorrélation, pourquoi le faites-vous?" Et "Comment l'utilisez-vous?", "Quel type de traitement est effectué mathématiquement avec décorrélation?" Le but est de faire en sorte que l'article réponde à la question "?".
Cette fois, si vous voulez bien le comprendre, vous devez comprendre diverses choses telles que la matrice, la covariance, le vecteur de valeurs propres, etc. Les mathématiques ne sont pas allées trop loin dans les détails, ** j'ai essayé de comprendre les grandes lignes **.
Il semble que la décorrélation soit rarement utilisée seule dans l'apprentissage automatique. Au contraire, il semble être utilisé dans l'analyse en composantes principales.
Premièrement, le chapitre 2 donne un aperçu de la décorrélation, et le chapitre 3 fait en fait la décorrélation. Enfin, dans le chapitre 4, j'expliquerai comment comprendre mathématiquement la décorrélation.
Comme son nom l'indique, il s'agit ** d'éliminer la corrélation entre chaque variable **. Quel est le problème avec la forte corrélation entre chaque variable?
De la conclusion, ** «Parce que la variance du coefficient de régression partielle devient grande et que la précision du modèle a tendance à être instable» **.
... je ne sais pas du tout. J'expliquerai un peu plus.
Par exemple, la formule d'un modèle de régression est généralement exprimée comme suit:
$ Y = A_1x_1 + A_2x_2 + ・ ・ + b $
Mettez les données réelles dans $ y $ (variable objective) et $ x_1 $ ou $ x_2 $ (variable explicative) ici pour trouver le coefficient de régression partielle $ a_1 $ ou $ a_2 $ et le terme constant $ b $. Est une analyse de régression multiple.
Comment obtenir la dispersion de ce coefficient de régression partielle (l'image de combien le coefficient de régression partielle a tendance à prendre différentes valeurs) est déroutant s'il est écrit en détail, donc si vous n'écrivez que la conclusion, ** " (1-Coefficient de corrélation) "est inclus dans la molécule de la formule de calcul de la dispersion du coefficient de régression partielle **.
En d'autres termes, ** plus la corrélation est grande, plus la molécule est petite, et par conséquent, plus la dispersion du coefficient de régression partielle est grande = le coefficient de régression partielle a tendance à prendre différentes valeurs = la précision du modèle devient instable **
Telle est la théorie.
Comme nous l'avons vu dans (1), s'il y a des variables à forte corrélation, il n'est pas vrai que l'une d'elles doive être supprimée.
Parce que ** «forte corrélation entre les variables» signifie simplement que «les variables ont une relation linéaire» **.
→ Donc ** si vous le supprimez facilement, vous pouvez supprimer d'autres informations importantes que la variable peut contenir **.
Ce qui apparaît ici est la décorrélation.
Nous construirons le modèle après avoir éliminé la corrélation de chaque variable.
Je pense qu'il est difficile d'obtenir une image, alors essayons-la.
Comme exemple concret cette fois, je prendrai les projets kickstarter de kaggle que j'utilise toujours comme exemple. https://www.kaggle.com/kemical/kickstarter-projects
Ce chapitre est long, mais ** la seule décorrélation importante est (ⅶ) **, c'est donc une bonne idée d'y regarder d'abord.
※point important※ ・ Cette fois, je n'ai pas trouvé de variable qui ne devrait pas être corrélée en tant que variable explicative. Les variables qui n'ont rien à voir avec la construction du modèle ne sont pas corrélées.
Veuillez noter que ce n'est qu'un chapitre pour reconnaître que "la décorrélation se fait de cette manière".
-Il y avait un site qui n'était simplement pas corrélé dans les projets kickstarter que j'utilise toujours dans l'exemple de mon article, alors je l'ai utilisé comme référence. https://ds-blog.tbtech.co.jp/entry/2019/04/27/Kaggle%E3%81%AB%E6%8C%91%E6%88%A6%E3%81%97%E3%82%88%E3%81%86%EF%BC%81_%EF%BD%9E%E3%82%B3%E3%83%BC%E3%83%89%E8%AA%AC%E6%98%8E%EF%BC%92%EF%BD%9E
#numpy,Importer des pandas
import numpy as np
import pandas as pd
import seaborn as sns
#Importer pour effectuer certains traitements sur les données de date
import datetime
df = pd.read_csv("ks-projects-201801.csv")
De ce qui suit, vous pouvez voir qu'il s'agit de l'ensemble de données de (378661, 15).
df.shape
Je vais omettre les détails, mais puisque l'heure de début du recrutement et l'heure de fin du financement cloud sont dans les données, nous allons convertir cela en "jours de recrutement".
df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days
J'omettrai également les détails ici, mais il y a des catégories autres que succès ("réussi") et échec ("échec") pour la variable objective "état", mais cette fois je n'utiliserai les données que pour le succès et l'échec.
df = df[(df["state"] == "successful") | (df["state"] == "failed")]
Remplacez ensuite le succès par 1 et l'échec par 0.
df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)
Je suis désolé pour la conclusion, mais puisque j'utiliserai utilisé engagé après cela, seule cette variable sera traitée pour les valeurs manquantes.
df["usd pledged"] = df["usd pledged"].fillna(df["usd pledged"].mean())
Vérifions la corrélation de chaque variable.
sns.heatmap(df.corr())
Maintenant, décorrélons «pleged» et «used pleded», qui sont fortement corrélés entre les variables.
La décorrélation elle-même est correcte si vous écrivez le code comme ci-dessous. Cependant, je ne pense pas que vous compreniez le sens, mais cette fois, veuillez lire «C'est ce que c'est» et voir le chapitre 4, «Comprendre les mathématiques».
#df seulement promis et utilisé pleged_Stocker en promis
df_corr = pd.DataFrame({'pledged' : df['pledged'], 'usdpledged' : df['usd pledged']})
#Trouver la dispersion / co-dispersion
cov = np.cov(df_corr, rowvar=0)
#Substituer le vecteur propre de la matrice de variance co-distribuée dans S
_, S = np.linalg.eig(cov)
#Données non corrélées *.T représente l'inversion
pledged_decorr = np.dot(S.T, df_corr.T).T
Ceci termine la décorrélation. À titre de test, vérifions le coefficient de corrélation entre les engagements et les utilisations satisfaites.
print('Coefficient de corrélation: {:.3f}'.format(np.corrcoef(pledged_decorr[:, 0], pledged_decorr[:, 1])[0,1]))
Si vous faites cela, "Coefficient de corrélation: 0,000" s'affiche. J'ai réussi à décorréler!
Voyons maintenant comment ce chapitre gère la décorrélation mathématiquement. Comme mentionné au début, il est nécessaire de penser à «matrice» et «valeur propre / vecteur propre» pour comprendre la décorrélation.
Si vous trouvez cela difficile, vous pouvez l'ignorer, et l'explication elle-même n'est pas détaillée, mais en gros, elle est expliquée de cette manière.
S'il y a des variables explicatives, laissez-les être respectivement $ \ boldsymbol {x_1} $, $ \ boldsymbol {x_2} $ ・ ・ ・ $ \ boldsymbol {x_n} $.
La matrice de distribution / co-distribution entre ces variables peut s'écrire comme suit.
Le cadre bleu montre la co-distribution de deux combinaisons de chaque variable, et le cadre rouge montre la distribution de chaque variable.
Cette matrice de dispersion / co-dispersion est transformée en la suivante en ** effectuant un processus appelé diagonalisation **!
... je ne pense pas être sûr. L'important ici est que ** le cadre bleu (co-dispersion) est tout 0 **.
** La diagonalisation peut réduire la covariance à 0, ce qui est exactement la même chose que le traitement non corrélé **.
Alors pourquoi est-il non corrélé lorsque la covariance entre chaque variable est de 0?
Pour comprendre cela, rappelons la formule du coefficient de corrélation. Si le coefficient de corrélation est r, alors r est calculé comme suit.
** (Coefficient de corrélation r) = (Covariance) / (Écart type de $ x $) ・ (Écart type de $ y $) **
À partir de cette équation, nous pouvons voir que ** la covariance est 0, c'est-à-dire que la molécule est 0, donc le coefficient de corrélation est 0 **.
C'est pourquoi ** la covariance entre chaque variable a été fixée à 0 par diagonalisation, et le coefficient de corrélation a été fixé à 0 pour obtenir la décorrélation **.
Comment était-ce? Ma pensée est: "Je ne peux pas interpréter même si on me montre un code très compliqué depuis le début, donc je ne me soucie pas de la précision une fois, donc je vais essayer d'implémenter une série de flux de base avec scicit-learn, etc." Je pense que c'est très important.
Cependant, une fois que je m'y suis habitué, je pense qu'il est très important de comprendre comment ils fonctionnent dans les coulisses à partir d'un fond mathématique.
Je pense que de nombreux contenus sont difficiles à comprendre, mais j'espère que cela aidera à approfondir ma compréhension.
Recommended Posts