Aidemy 2020/10/29
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
-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]
-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
'''
-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)
-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)
-__ 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.
-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
'''
-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 ') __
・ 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