[PYTHON] Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (encodage)

introduction

Ceci est une continuation de l'article précédent. https://qiita.com/shallowdf20/items/eb35a9cf3c24403debb1

Cette fois, je voudrais vous présenter le traitement de type Encoding de DataLiner.

Installation

! pip install -U dataliner

Préparation des données

Préparez les données Titanic comme avant.

import pandas as pd
import dataliner as dl

df = pd.read_csv('train.csv')
target_col = 'Survived'

X = df.drop(target_col, axis=1)
y = df[target_col]

image.png

En codant des variables catégorielles telles que Sex et Name d'une manière ou d'une autre, vous serez en mesure de gérer des chaînes de caractères qui ne peuvent pas être gérées telles qu'elles sont dans les formules et les modèles. Jetons un coup d'oeil maintenant.

OneHotEncoding C'est la méthode de codage la plus courante. Remplacez les variables catégorielles par 0 et 1 variables factices. Jetons un coup d'oeil d'abord.

trans = dl.OneHotEncoding()
trans.fit_transform(X)

image.png

Le nombre de colonnes a augmenté à la fois. Par exemple, comme il existe des types de noms pour le nombre de données = 891 personnes, 891 colonnes augmenteront à la fois. Après cela, vous pouvez supprimer la variable avec DropLowAUC etc., mais il est préférable d'appliquer GroupRareCategory ou DropHighCardinality à l'avance. Essayez de coder après avoir appliqué DropHighCardinality dans le pipeline.

from sklearn.pipeline import make_pipeline

process = make_pipeline(
    dl.DropHighCardinality(),
    dl.OneHotEncoding(),
)
process.fit_transform(X)

image.png Il s'inscrit dans le nombre de quantités de caractéristiques communes. De plus, lorsque vous créez une variable qui n'existe que des hommes et des femmes, comme le sexe du Titanic, comme variable fictive, il est courant de supprimer l'une des colonnes pour éviter la colinéarité. DataLiner prépare un argument appelé drop_first, et par défaut True = tombe automatiquement.

CountEncoding Il s'agit d'un codage qui remplace les variables catégorielles par le nombre d'occurrences de la catégorie. Tout d'abord, regardons le nombre de passagers par sexe sur Titanic.

df['Sex'].value_counts()

male 577 female 314 Name: Sex, dtype: int64

Il y a 577 hommes et 314 femmes.

Maintenant, faisons CountEncoding.

trans = dl.CountEncoding()
trans.fit_transform(X)

image.png

Si vous regardez la colonne Sex, vous pouvez voir qu'elle est certainement remplacée par le nombre. Puisque la colonne de catégorie est automatiquement reconnue, les autres colonnes de catégorie telles que Nom et Embarqué sont également remplacées par des nombres.

RankedCountEncoding CountEncoding est une technique simple mais puissante, mais elle présente l'inconvénient d'être vulnérable aux valeurs aberrantes, par exemple, il existe un nombre inhabituellement élevé de catégories. De plus, s'il y a des catégories avec le même nombre d'occurrences, elles seront remplacées par le même numéro, donc il sera impossible de les distinguer. (Bien sûr, c'est correct s'il ne doit pas être distingué dans la nature)

Par conséquent, cet encodeur remplace le nombre d'apparitions, crée un classement par ordre décroissant du nombre d'apparitions et remplace les variables catégorielles dans cet ordre. Dans l'exemple précédent, il y a 577 hommes, donc c'est le premier dans Sex, et 314 femmes, donc c'est le deuxième dans Sex.

trans = dl.RankedCountEncoding()
trans.fit_transform(X)

image.png

Les hommes et les femmes sont remplacés respectivement par 1 et 2. De plus, si vous vérifiez le nom, vous pouvez voir que le nombre d'occurrences est de 1 mais qu'elles sont codées avec des nombres différents. Même si le nombre d'occurrences est le même, il est encodé à l'aide de l'index après classement, donc si la catégorie est différente, vous pouvez toujours la remplacer par un autre nombre.

FrequencyEncoding CountEncoding encode par le nombre d'occurrences, mais FrequencyEncoding encode par la fréquence d'occurrence. Il est facile à manipuler dans la mesure où le résultat tombe automatiquement entre 0 et 1.

Par exemple, dans Sex, 577 / (577 + 314) pour les hommes est codé à 0,647 ... et les femmes sont codées à 314 / (577 + 314) à 0,352 ...

trans = dl.FrequencyEncoding()
trans.fit_transform(X)

image.png

Comme avec CountEncoding, la propriété selon laquelle les catégories avec le même nombre d'occurrences ne peuvent pas être distinguées demeure, mais le fait qu'il est vulnérable aux valeurs aberrantes a été amélioré. ClasséFrequencyEncoding n'est pas préparé car il donne le même résultat que ClasséCountEncoding.

TargetMeanEncoding Bien que le nom soit devenu célèbre dans Kaggle etc., l'idée elle-même est à la base de l'analyse des données. Plus précisément, il remplace la variable catégorielle par la valeur moyenne de la variable objectif pour chaque catégorie.

La variable objective étant la vie et la mort des passagers, par exemple dans le sexe, elle est remplacée par le taux de survie par sexe. Cependant, comme l'information de la cible à prédire, qui est la moyenne des variables objectives, est utilisée, si le nombre de données est petit, la valeur codée correspond à la variable objectif et une fuite se produit facilement. Dans la mise en œuvre de DataLiner, comme Bayes, la moyenne de toutes les variables objectives est adoptée comme pré-probabilité de chaque catégorie, et la conversion est pondérée par le nombre de données.

trans = dl.TargetMeanEncoding()
trans.fit_transform(X, y)

image.png

RankedTargetMeanEncoding Il classe les résultats de TargetMeanEncoding et les remplace dans cet ordre. Par exemple, si le taux de survie est 1er pour les femmes et 2ème pour les hommes, remplacez-le par 1 pour les femmes et 2 pour les hommes. Dans le codage moyen cible qui adopte la pré-probabilité, lorsque le nombre de certaines catégories est petit par rapport au nombre total de données, il sera codé avec des nombres presque similaires (= proches de la pré-probabilité) malgré des catégories différentes. ClasséTargetMeanEncoding les encodera comme étant distinctement différents.

trans = dl.RankedTargetMeanEncoding()
trans.fit_transform(X, y)

image.png

en conclusion

Donc, cette fois, j'ai présenté les éléments liés à l'encodage de DataLiner. Ensuite, je voudrais vous présenter le système de conversion.

Article sur la version Dataliner: https://qiita.com/shallowdf20/items/36727c9a18f5be365b37 GitHub: https://github.com/shallowdf20/dataliner PyPI: https://pypi.org/project/dataliner/

Recommended Posts

Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (encodage)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (conversion)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Drop)
Essayez de convertir en données ordonnées avec les pandas
Essayez d'agréger les données de musique doujin avec des pandas
[Kaggle] De la lecture des données au prétraitement et au codage
Essayez de défier le sol par récursif
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Essayez d'extraire la table de données d'Azure SQL Server avec pyodbc
Essayez d'acquérir des données lors de la redirection de port vers RDS avec anaconda.
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Générer un code de correction d'erreur pour restaurer la corruption des données avec la bibliothèque zfec
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
Essayez d'exploiter Facebook avec Python
Comment gérer les données déséquilibrées
Essayez de profiler avec ONNX Runtime
Comment augmenter les données avec PyTorch
Traiter les données Pubmed .xml avec python
Essayez de produire de l'audio avec M5 STACK
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Essayez de reproduire un film couleur avec Python
SIGNATURE Quête ① De la lecture des données au prétraitement
Essayez de vous connecter à qiita avec Python
Classification d'image avec Keras - Du prétraitement au test de classification -
Essayez de travailler avec des données binaires en Python
Vérifiez les données brutes avec Kaggle's Titanic (Kaggle ⑥)
J'ai essayé l'analyse factorielle avec des données Titanic!
Convertir des données Excel en JSON avec python
Envoyer des données à l'API DRF avec Vue.js
Convertissez des données FX 1 minute en données 5 minutes avec Python
Essayez de prédire les fleurs de cerisier avec XG Boost
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Essayez le scraping HTML avec la bibliothèque Python
Premier YDK à essayer avec Cisco IOS-XE
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Essayez de générer une image avec aliénation
Comment lire les données de problème avec Paiza
Traitez le Big Data avec Dataflow (ApacheBeam) + Python3
Affichage des données d'informations de position en Python --Essayez de tracer avec la bibliothèque d'affichage de carte (folium) -