[PYTHON] Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage

introduction

Cet article décrit la binarisation et la décentralisation utilisées comme prétraitement pour les données de comptage. 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 binarisation?

Comme son nom l'indique, il s'agit de rendre la valeur cible binaire. Par exemple, considérons l'exemple suivant.

Exemple
Je souhaite créer un système qui recommande les chansons recommandées aux utilisateurs.
Je souhaite utiliser le nombre de fois où l'utilisateur a écouté une chanson comme une quantité de fonctionnalités, mais comment dois-je formater les données?

Lorsque j'y ai sorti les données d'un certain utilisateur, on suppose que les données étaient les suivantes. La première colonne est l'ID du morceau et la deuxième colonne le nombre de fois où le morceau a été joué.

image.png

Le résultat de ces données sous forme d'histogramme est le suivant.

image.png

Désormais, afin de recommander une chanson recommandée à l'utilisateur, il est important de savoir si l'utilisateur était intéressé par la chanson. Cependant, si ce qui précède est laissé tel quel, une chanson qui a été écoutée 20 fois donnera au modèle des informations qu'elle aime 20 fois plus qu'une chanson qui n'a été écoutée qu'une seule fois. Par conséquent, en supposant que vous êtes intéressé si vous avez joué la chanson ne serait-ce qu'une seule fois, les chansons qui ont été jouées plus d'une fois sont binarisées à 1 et les chansons qui n'ont jamais été lues sont binarisées à 0. En faisant cela, j'ai pu éliminer les différences entre les chansons et les diviser en chansons qui m'intéressaient et en chansons qui ne m'intéressaient pas.

Ceci est représenté dans un graphique comme suit.

image.png

Le code implémenté est illustré ci-dessous.

binary.py


import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

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

data_binary = pd.DataFrame()
##Vrai en multipliant par 1,Faux à 1,Convertir en 0
data_binary['Listen Count'] = (data['Listen Count'] > 0) * 1

Qu'est-ce que la dispersion?

Discrimination par largeur fixe

En effectuant une dispersion, les données continues peuvent être traitées comme le même groupe, donc

Il y a un mérite

Par exemple, si l'âge d'une personne est donné sous forme de données numériques, tous les âges sont divisés en groupes en regroupant 0 à 10 comme groupe 1, 10 à 20 comme groupe 2 ..... et 80 ou plus comme groupe 9. Sera possible. Vous pouvez penser que vous pouvez laisser les données numériques telles quelles, mais par exemple, s'il y a plusieurs personnes qui ont vécu jusqu'à 110 ans, elles seront tirées par les données volumineuses et l'influence d'autres facteurs sera réduite. Peut être fait. Cependant, en regroupant les personnes âgées de 80 et 110 ans dans le même groupe, ces problèmes peuvent être résolus.

Cette fois, les âges sont divisés par 10 ans, mais selon le mode de vie, 0 à 12 ans (de l'enfance à l'école primaire) peuvent être divisés en groupes 1 et 12 à 17 ans (élèves du premier cycle du secondaire et du secondaire) peuvent être divisés en groupes 2.

De plus, si le nombre comprend plusieurs chiffres, il peut être groupé par une puissance de 10 telle que 0-9, 10-99, 100-999, etc.

** En divisant par 10 **

discretization.py


import numpy as np

small_counts = np.random.randint(0, 100, 20)
print(small_counts)

print(np.floor_divide(small_counts, 10))

** Résultat d'exécution **

image.png

image.png

** Lors d'un regroupement par une puissance de 10 **

discretization.py


import numpy as np

large_counts = []
for i in range(1, 100, 10):
  tmp = np.random.randint(0, i * 1000, 5)
  large_counts.extend(tmp)

print(np.array(large_counts))
print(np.floor(np.log10(large_counts)))

image.png

image.png

Discrimination par fraction

La discrimination avec une largeur fixe est très pratique, mais s'il y a un grand écart dans les données de comptage, par exemple, il y aura plusieurs groupes qui ne contiennent pas de données. Dans de tels cas, utilisez la fraction. Le nombre de fractions divise les données en deux par la valeur médiane et divise en outre les données divisées en deux par la valeur médiane. Ainsi, le quadrant divise les données en quatre et le décile divise les données en dix.

Par exemple, le tableau ci-dessous montre la suffisance des données de distribution comme indiqué ci-dessous.

image.png

image.png

Si cette valeur est affichée dans le graphique, elle sera comme indiqué dans la figure ci-dessous, et vous pouvez voir que la largeur est calculée de sorte que la quantité de données soit égale.

image.png

Le programme mis en œuvre est illustré ci-dessous.

** Lors du regroupement par fraction (graphique) **

quantile.py


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

data_array = []
for i in range(1, 1000):
  s = np.random.randint(0, i * 10, 10)
  data_array.extend(s)
data_array.extend(np.zeros(2000))
data = pd.DataFrame({'Listen Count': data_array})

deciles = data['Listen Count'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9])

print(deciles)

plt.vlines(deciles, 0, 5500, "blue", linestyles='dashed') 

image.png

** Lors du regroupement par fraction **

quantile.py


import numpy as np

large_counts = []
for i in range(1, 100, 10):
  tmp = np.random.randint(0, i * 1000, 5)
  large_counts.extend(tmp)
np.array(large_counts)

#Convertir en quadrant
print(pd.qcut(large_counts, 4, labels=False))

image.png

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. S'il vous plaît, abonnez-vous à la chaîne et donnez-nous 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

Recommended Posts

Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage
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 3 Échelle collaborative de Google
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
[Apprentissage automatique] Vérifiez les performances du classificateur à l'aide de données de caractères manuscrites
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Prédire le temps objectif d'un marathon complet avec l'apprentissage automatique-③: j'ai essayé de visualiser les données avec Python-
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[Python] Enregistrez le PDF de Google Colaboratory sur Google Drive! -Collectons des données pour l'apprentissage automatique
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Résumé du flux de base de l'apprentissage automatique avec Python
Bilan du premier défi du machine learning avec Keras
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
[Homologie] Comptez le nombre de trous dans les données avec Python
[Python] Les principales faiblesses et inconvénients de Google Colaboratory [Pour les débutants]
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Ensemble de données pour l'apprentissage automatique
Pour vous qui regardez soudainement le journal tout en apprenant avec l'apprentissage automatique ~ Entraînement musculaire avec LightGBM ~
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
Résumé des API recommandées pour l'intelligence artificielle, l'apprentissage automatique et l'IA
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Détection des fonctionnalités OpenCV avec Google Colaboratory
Une collection de conseils pour accélérer l'apprentissage et le raisonnement avec PyTorch
Prédiction des données en un clic pour le champ réalisée par apprentissage automatique entièrement automatique
[Résumé des livres et cours en ligne utilisés pour l'apprentissage de la programmation et de la science des données]
Procédure d'apprentissage automatique de base: ③ Comparez et examinez la méthode de sélection de la quantité de caractéristiques
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
Paramètres qui permettent de voir plus facilement l'échelle et l'étiquette de la figure même avec un thème sombre avec google Colaboratory