[PYTHON] Prétraitement dans l'apprentissage automatique 4 Conversion de données

Aidemy 2020/10/29

introduction

Bonjour, c'est Yope! Bien que ce soit un système littéraire croustillant, j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le quatrième article du prétraitement pour l'apprentissage automatique. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ À propos de la valeur continue ・ Conversion des données de catégorie ・ À propos du réglage de l'échelle ・ À propos des données verticales et des données horizontales

À propos de la valeur continue

Catégorisation séquentielle des valeurs

-Lors du prétraitement des données, vous souhaiterez peut-être diviser les valeurs continues en catégories. -En particulier, il y a des données d'âge [10,15,18,20,27,32], et je voudrais diviser cela en «adolescents, 20 ans, 30 ans» (catégorisation des valeurs continues).

-L'exécution est effectuée par la fonction cut (x, bins = [], labels = [], right =) __ des pandas. ・ À propos de chaque argument - "X" __ représente les données à transmettre. -Passez les nombres de délimiteur sous forme de tableau à __ "bins" __. -Passez le nom de chaque catégorie sous forme de tableau à __ "labels" __. -Pour __ "right" __, définissez True si la section est divisée en "supérieur à A et inférieur à B" et False si "supérieur à A et inférieur à B". (Par défaut = Vrai, mais pour la pensée japonaise, il est plus facile de comprendre intuitivement s'il se présente sous la forme de "A ou plus et moins de B" dans False)

x = [10,15,18,20,27,32]
bins = [10,20,30,40] #10~20,20~30,30~Moyens 40
labels = ['10 ans','20 ans','30 s']
#Classer par catégories
pd.cut(x,bins=bins,labels=labels,right=False)
#[10 ans,10 ans,10 ans,20 ans,20 ans,30 s]

Données catégorielles de codage à chaud

-Convertissez les données classées dans la section précédente en __ "1" si elles appartiennent à cette catégorie, "0" __ si elles n'appartiennent pas à cette catégorie. -Par exemple, si la catégorie est "adolescents", la sortie doit être [1,1,1,0,0,0]. -Cette conversion est appelée __ "encodage à chaud" __. -Par exemple, lorsque les données {'age': [adolescents, adolescents, adolescents, 20s, 20s, 30s]} sont données par DataFrame (variable df) Il peut être converti avec __pd.get_dummies (df ['age']) __. -De plus, s'il y a des colonnes autres que "age" et que vous voulez toutes les convertir, il vous suffit d'utiliser "df" comme argument. -Si vous souhaitez conserver le nom de la colonne d'origine dans la colonne convertie, transmettez le nom de la colonne comme __prefix = 'age' __ dans le deuxième argument.

result = pd.cut(x,bins=bins,labels=labels,right=False)
df = pd.DataFrame({'age':result})
#one-Exécution de l'encodage à chaud
pd.get_dummies(df['age'],prefix='age')
'''
age_Âge de l'adolescence_20 ans_30 s
0	1	0	0
1	1	0	0
2	1	0	0
3	0	1	0
4	0	1	0
5	0	0	1
'''

À propos du réglage de l'échelle

-Si des données avec une valeur relativement élevée sont incluses dans les éléments de données numériques transmis au modèle, l'efficacité d'apprentissage peut être réduite. -Dans un tel cas, ajuster les valeurs de tous les éléments de données numériques afin qu'ils correspondent à une certaine norme est appelé __ "ajustement de l'échelle" __. -La norme générale est __ "moyenne 0, variance 1" __. Dans ce cas, utilisez la fonction __scale () __ du module preprocessing de scicit-learn.

-Code (ajustement d'échelle de 10 nombres aléatoires normaux avec une moyenne de 50 distribution)![Screenshot 2020-10-29 16.24.15.png](https: //qiita-image-store.s3.ap-northeast-1.amazonaws. com / 0/698700 / 7c891221-4251-8f4b-e922-6f155fff7af3.png)

Conversion Box-Cox

-Lors de la conversion des données pour qu'elles se rapprochent de __ "distribution normale" __, effectuez la conversion __Box-Cox __. -Une distribution normale est une distribution dans laquelle le nombre de données augmente vers le centre et diminue vers les bords. -Lors de la conversion Box-cox, utilisez la fonction __boxcox () __ du module stats de scipy.

-Deux variables sont transmises à la fonction boxcox, la première est le tableau converti et la seconde est le paramètre "λ" utilisé lors de la conversion.

・ Code (convertissez x ^ 2 avec 3 degrés de liberté en Box-Cox)![Capture d'écran 2020-10-29 16.26.31.png](https: //qiita-image-store.s3.ap-northeast-1. amazonaws.com/0/698700/dd6b1340-1eb4-9a14-8011-8b5b63084156.png)

・ Résultat![Capture d'écran 2020-10-29 16.26.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/4291aee1-314c-7386- 274a-dabcec09dcfd.png)

Données verticales et données horizontales

Que sont les données verticales et les données horizontales?

-__ Les données verticales__ ont une structure qui augmente les données «verticalement» (ajout de rows) lorsque la quantité d'informations de données augmente, et données horizontales est «horizontal». Fait référence à une structure qui augmente les données (adds columns). -Par exemple, supposons qu'il existe des données sur «l'acheteur», «article acheté» et «prix» sous forme de rapport comptable. Lorsque la quantité de données augmente, il suffit d'ajouter les données verticalement aux données avec __3 colonnes pour obtenir les données verticales __, __ Augmenter l'achat horizontalement et y ajouter les données Données horizontales __. -Les données verticales n'ont pas besoin d'ajouter de colonnes, elles ont donc l'avantage d'être faciles à répondre aux changements dans la structure et la logique des données __. -D'un autre côté, les données horizontales ont l'avantage d'être faciles à comprendre intuitivement lors de la vérification. -Lors de la transmission de données au modèle, il est nécessaire de convertir dans l'un de ces formats.

Convertir les données verticales en données horizontales

-Utiliser la fonction __pivot (index, colonnes, valeurs) __ des pandas. -Pour chaque argument, "index" est la colonne du DataFrame d'origine qui rassemble les mêmes éléments dans une seule ligne, "colonnes" est la colonne d'origine pour en faire une nouvelle colonne et "valeurs" est la colonne d'origine pour être la valeur de la colonne.

・ Dans l'exemple précédent, la plupart des «acheteurs» sont les mêmes, donc «l'indice» est utilisé et les «articles achetés» sont définis horizontalement, donc les «colonnes» sont utilisées. Alors stockez-le dans des "valeurs". -De plus, l'index de df après la conversion est l'index passé à ce moment, donc si vous voulez le renvoyer au numéro d'index normal, ajoutez "__. Reset_index () __" à pivot (). De plus, à ce moment, l'attribut name de la colonne reste, donc ajoutez __. Columns.set_names (None) __ aux colonnes du df converti.

df = pd.DataFrame({
      'acheteur': ['Sato','Tanaka','Kato','Tanaka','Kato'],
      'Articles achetés': ['stylo','papier','Boisson','Les ciseaux','Algue']
      'prix': [500, 250, 250, 600, 200]
})
##Convertir les données verticales en données horizontales
pivoted_df = df.pivot(index='acheteur',columns='Articles achetés',values='prix').reset_index()
pivoted_df.columns = pivoted_df.columns.set_names(None)
'''
Ciseaux à boissons en papier pour stylo acheteur Colle
0 Sato 500
1 Tanaka 250 600
2 Kato 250 200
'''

Conversion de données conservées horizontalement en données verticales

-Peut être converti avec __melt (frame, id_vars, value_vars, var_name, value_name) __ of pandas. ・ À propos de chaque argument ・ Cadre: source de conversion df -Id_vars: colonnes clés (passées sous forme de tableau) -Value_vars: Colonnes qui seront les valeurs converties (passées sous forme de tableau) -Var_name: Le nom de la colonne qui regroupe les colonnes qui sont développées horizontalement -Value_name: Le nom de la colonne qui sera la valeur convertie

・ Les données horizontales créées dans la section précédente sont les suivantes. __pd.melt (pivoted_df, id_vars = ['acheteur'], value_vars = ['stylo', 'papier', 'boisson', 'ciseaux', 'colle'], var_name = 'achat', valeur_nom = 'prix ') __

Sommaire

・ Si vous souhaitez catégoriser des valeurs continues, utilisez __cut (x, bins = [], labels = [], right =) __ of pandas. -La conversion des données catégorisées en "1" si elles appartiennent à cette catégorie, "0" si elles n'appartiennent pas, est appelée "encodage à chaud", et cela se fait avec __pd.get_dummies () __ .. -Aligner les valeurs des données numériques de manière relative est appelé "ajustement d'échelle", et __preprocessing.scale () __ Faites-le avec. -La conversion des données pour qu'elles se rapprochent d'une distribution normale s'appelle "Conversion Box-Cox" et est effectuée par __stats.boxcox () __. -Utiliser __pivot (index, colonnes, valeurs) __ lors de la conversion de données verticales en données horizontales, et utiliser __melt (frame, id_vars, value_vars, var_name, value_name) __ quand vice versa. ..

Cette fois, c'est fini. Merci d'avoir lu jusqu'au bout.

Recommended Posts

Prétraitement dans l'apprentissage automatique 4 Conversion de données
Python: prétraitement dans l'apprentissage automatique: conversion de données
Python: prétraitement en machine learning: acquisition de données
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Apprentissage automatique dans Delemas (acquisition de données)
Python: prétraitement dans l'apprentissage automatique: présentation
Prétraitement dans l'apprentissage automatique 3 Données de valeur manquante / aberrante / de déséquilibre
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Apprentissage automatique dans Delemas (s'entraîner)
Utilisé en EDA pour l'apprentissage automatique
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Classification et régression dans l'apprentissage automatique
Apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Recherche de semences aléatoires dans l'apprentissage automatique
Procédure d'apprentissage automatique de base: ② Préparer les données
Comment collecter des données d'apprentissage automatique
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
[python] Techniques souvent utilisées dans l'apprentissage automatique
[Python] Première analyse de données / apprentissage automatique (Kaggle)
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
[Mise à jour Ver1.3.1] J'ai créé une bibliothèque de prétraitement de données DataLiner pour l'apprentissage automatique
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Division des données de formation en apprentissage automatique et apprentissage / prédiction / vérification
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique
Touchons une partie de l'apprentissage automatique avec Python
Histoire de l'analyse de données par apprentissage automatique
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Créez un environnement interactif pour l'apprentissage automatique avec Python
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Échantillonnage dans des données déséquilibrées
Outil MALSS (application) qui prend en charge l'apprentissage automatique en Python
Régression logistique d'apprentissage automatique
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
Outil MALSS (basique) qui prend en charge l'apprentissage automatique en Python
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
É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
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Prédiction de données chronologiques par AutoML (apprentissage automatique automatique)
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Entropie croisée à revoir dans les devoirs de la semaine 2 de Coursera Machine Learning
Pré-traitement des données préfectorales
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches