[PYTHON] Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 2 Conversion de Google Colaboratory-Logistic et conversion Box-Cox

introduction

Dans cet article Explique la conversion logarithmique et la conversion Box-Cox. Cet article est principalement basé sur "Ingénierie de la quantité de fonctionnalités pour l'apprentissage automatique". S'il vous plaît vérifier si vous devenez.

De plus, le contenu de cet article est expliqué plus en détail sur YouTube, donc si vous êtes intéressé, veuillez le consulter.

Qu'est-ce que la conversion logarithmique?

La conversion de journal est principalement utilisée aux fins suivantes.

--Faites-le suivre une distribution normale --Réduire la dispersion

La fonction logarithmique est une fonction comme le montre la figure ci-dessous, et la valeur de x est petite car la plage de [1,10] est copiée dans [0,1] et la plage de [10,100] est copiée dans [1,2]. On peut voir que le cas est copié dans une large plage, et le cas est copié dans une plage étroite lorsque la valeur de x est grande.

En utilisant cette transformation logarithmique, il est possible de comprimer le côté supérieur de la distribution à queue lourde comme indiqué ci-dessous et d'étendre le côté inférieur pour le rapprocher de la distribution normale. De nombreuses méthodes d'apprentissage automatique ne font aucune hypothèse particulière sur la population ** modèles non paramétriques **, il n'est donc pas nécessaire de s'approcher de la distribution normale, mais la distribution de la population statistique est supposée ** modèle paramétrique * Si vous utilisez *, la distribution des données doit être normale.

En outre, en utilisant une conversion logarithmique pour les données suivantes ayant une grande dispersion, la dispersion peut être réduite.

** Avant d'appliquer la conversion logarithmique (Distribution: 5.0e + 06) **

** Après application de la conversion logarithmique (distribution: 0,332007) **

** Exemple de code pour appliquer la conversion logarithmique **

log.py


import numpy as np
import pandas as pd


##Nombre aléatoire fixe
np.random.seed(100)

data_array = []
for i in range(1, 10000):
  max_num = i if i > 3000 else 1000 
  s = np.random.randint(0, max_num, 10)
  data_array.extend(s)

data = pd.DataFrame({'Listen Count': data_array})

data_log = pd.DataFrame()
##Ajoutez 1 pour éviter qu'il ne devienne 0
data_log['Listen Count'] = np.log10(data['Listen Count'] + 1)

Qu'est-ce que la conversion Box-Cox?

Conversion qui peut être définie par la formule suivante

y=\begin{eqnarray}
\left\{
\begin{array}{l}
\frac{x^\lambda - 1}{\lambda}~~~~~(if ~~ \lambda\neq0) \\
\log(x)~~~~~(if ~~ \lambda=0)
\end{array}
\right.
\end{eqnarray}

En utilisant la transformation Box-Cox pour que les données suivent une distribution normale dans une certaine mesure, les données peuvent être amenées à suivre une distribution normale. (* Cependant, il ne peut être utilisé que lorsque les données sont positives.)

Le graphique ci-dessous montre cette conversion. image.png Vous devez déterminer la valeur lambda avant d'utiliser la transformation Box-Cox. En utilisant la méthode la plus probable ici, le lambda est déterminé afin que les données converties soient les plus proches de la distribution normale.

Si vous utilisez la transformation Box-Cox sur les données qui sont réellement distribuées comme indiqué dans la figure ci-dessous, vous pouvez voir qu'elle peut être convertie en une distribution qui semble être une distribution normale.

** Avant d'appliquer la conversion Box-Cox **

** Après avoir appliqué la conversion Box-Cox **

** Exemple de code pour appliquer la conversion Box-Cox **

from scipy import stats
import numpy as np
import pandas as pd

##Nombre aléatoire fixe
np.random.seed(100)

##Génération de données
data_array = []
for i in range(1, 1000):
  s = np.random.randint(1, i * 100, 10)
  data_array.extend(s)
data = pd.DataFrame({'Listen Count': data_array})

##Box-Conversion de Cox
rc_bc, bc_params = stats.boxcox(data['Listen Count'])
print(bc_params) ##0.3419237117680786

Graphique Q-Q

Le graphique Q-Q est un graphique des valeurs mesurées et idéales. En d'autres termes, s'il s'agit d'une ligne droite, on peut dire que la valeur mesurée est une distribution normale. Vous trouverez ci-dessous un graphique des données d'origine, des données après conversion logarithmique et des données après conversion Box-Cox.

données brutes

** Après conversion logarithmique **

** Après conversion Box-Cox **

À partir de ces résultats, nous pouvons voir que la transformation Box-Cox a pu suivre la distribution la plus normale.

finalement

Je prévois de publier des critiques et des vidéos de commentaires sur des livres techniques sur YouTube, en me concentrant sur l'apprentissage automatique. Nous présentons également des entreprises que vous devez savoir si vous vous adressez à l'informatique. Veuillez aimer, vous abonner à la chaîne et nous donner une note élevée, car cela vous motivera à mettre à jour Youtube et Qiita. YouTube: https://www.youtube.com/channel/UCywlrxt0nEdJGYtDBPW-peg Twitter: https://twitter.com/tatelabo

référence

https://yolo-kiyoshi.com/2018/12/26/post-1037/ https://toukei-lab.com/box-cox%E5%A4%89%E6%8F%9B%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83%E3%81%AB%E5%BE%93%E3%82%8F%E3%81%AA%E3%81%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A7%A3%E6%9E%90 https://toukeier.hatenablog.com/entry/2019/09/08/224346 https://sigma-eye.com/2018/09/23/qq-plot/

Recommended Posts

Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 2 Conversion de Google Colaboratory-Logistic et conversion Box-Cox
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 3 Échelle collaborative de Google
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir du 4e Google Colaboratory - Fonctionnalités interactives
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage
Commencer avec l'apprentissage automatique Python
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Unité 5 Ingénierie des fonctionnalités pour la sélection des fonctionnalités d'apprentissage automatique
Apprentissage automatique avec Pytorch sur Google Colab
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Machine learning facile avec AutoAI (partie 4) Jupyter Notebook
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer chapitres 1 et 2
L'apprentissage automatique pratique avec Scikit-Learn et TensorFlow-TensorFlow a abandonné -
[Apprentissage automatique] Démarrez Spark avec iPython Notebook et essayez MLlib
Créez un environnement d'apprentissage automatique scikit-learn avec VirtualBox et Ubuntu
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Pour ceux qui souhaitent démarrer l'apprentissage automatique avec TensorFlow2
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab