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.
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é.
Le résultat de ces données sous forme d'histogramme est le suivant.
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.
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
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 **
** 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)))
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.
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.
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')
** 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))
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