[PYTHON] [Apprentissage automatique] Comprendre la décorrélation des mathématiques

1. Introduction

(1. Objectif

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 "?".

(2) Configuration

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.

2. Qu'est-ce que 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?

(1) Pourquoi il est nécessaire de décorréler

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.

Dans (2), les variables à forte corrélation devraient être supprimées ...?

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 **.

(3) Alors que dois-je faire ...

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.

3. Essayez la décorrélation

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

(I) Importer

#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

(Ii) Lecture des données


df = pd.read_csv("ks-projects-201801.csv")

(Iii) Confirmation du nombre de données

De ce qui suit, vous pouvez voir qu'il s'agit de l'ensemble de données de (378661, 15).

df.shape

(Iv) Mise en forme des données

◆ Nombre de jours de recrutement

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

◆ À propos de la variable objectif

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)

(V) Traitement des valeurs manquantes

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) Confirmation du coefficient de corrélation

Vérifions la corrélation de chaque variable.

sns.heatmap(df.corr())
キャプチャ1.PNG

Maintenant, décorrélons «pleged» et «used pleded», qui sont fortement corrélés entre les variables.

(Ⅶ) Non corrélé

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!

4. Comprendre la décorrélation des mathématiques

(1) Prémisse

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.

(2) Exemple spécifique

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. キャプチャ3.PNG

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 **!

キャプチャ2.PNG

... 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 **.

5. Conclusion

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

[Apprentissage automatique] Comprendre la décorrélation des mathématiques
[Apprentissage automatique] Comprendre la SVM à la fois à partir de scikit-learn et des mathématiques
[Apprentissage automatique] Comprendre les arbres de décision de scikit-learn et des mathématiques
[Apprentissage automatique] Comprendre la régression logistique à partir de scikit-learn et des mathématiques
[Apprentissage automatique] Comprendre la régression multiple linéaire à partir de scikit-learn et des mathématiques
[Apprentissage automatique] Comprendre la forêt aléatoire
Apprentissage automatique
[Apprentissage automatique] Comprenez à partir des mathématiques pourquoi le coefficient de corrélation varie de -1 à 1.
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 1
Notes sur l'apprentissage automatique (mises à jour de temps en temps)
Algorithme d'apprentissage automatique (de la classification à 2 classes à la classification à plusieurs classes)
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 2
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage profond à partir de zéro
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Machine de vecteur de support d'apprentissage automatique
Installation de TensorFlow, une bibliothèque d'apprentissage automatique de Google
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Méthode d'étude pour apprendre le machine learning à partir de zéro (version mars 2020)
Pip la bibliothèque d'apprentissage automatique à partir d'une extrémité (Ubuntu)
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Introduction à l'apprentissage automatique à partir de Simple Perceptron
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Collectez des données d'apprentissage automatique en grattant des bases de données publiques biosourcées
Modèle d'apprentissage automatique prenant en compte la maintenabilité
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Apprentissage profond à partir de zéro 1 à 3 chapitres
[Apprentissage automatique] Comprenez à partir des mathématiques que la normalisation se traduit par une moyenne de 0 et un écart type de 1.
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification
Machine Learning: Supervision - Régression linéaire
Bases de l'apprentissage automatique (mémoire)
Un débutant en apprentissage automatique a essayé la RBM
Apprentissage automatique avec Python! Préparation
Bloc-notes de ressources d'étude d'apprentissage automatique
Apprentissage automatique ② Résumé Naive Bayes
Comprendre l'apprentissage automatique ~ régression de crête ~.