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

introduction

Je voudrais essayer divers DataLiner, une bibliothèque qui peut facilement effectuer le prétraitement des données, avec des données Titanic, qui est également célèbre pour Kaggle. (Données: https://www.kaggle.com/c/titanic/data) En passant, certaines fonctionnalités ont été supprimées des données Titanic de Kaggle, et en regardant les données ici, il semble qu'il existe d'autres fonctionnalités. (Données: https://www.openml.org/d/40945)

Faisons-le maintenant. Cette fois, nous présenterons la série DropXX. Enfin, je présenterai également le traitement à l'aide de Pipeline.

Installation

! pip install -U dataliner

Données Titanic

Commencez par charger train.csv.

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]

Les données de train lues ressemblent à ceci. image.png

DropColumns Supprime simplement la colonne spécifiée. Par exemple, PassengerId, qui représente un numéro de passager, n'est pas très utile dans la modélisation, supprimons-le donc.

trans = dl.DropColumns('PassengerId')
trans.fit_transform(X)

image.png Le PassengerId a été supprimé. Il est également possible de passer une liste et d'en supprimer plusieurs en même temps.

Par exemple, vous pouvez combiner les données de train et les données de test et les supprimer normalement avec df.drop, mais la méthode ci-dessus rend les erreurs moins probables et clarifie ce que vous faites. Par exemple, il peut être appliqué aux données de test comme suit.

X_test = pd.read_csv('test.csv')
trans.transform(X_test)

image.png

De plus, comme cela sera décrit plus loin, en le combinant avec le pipeline scikit-learn, il sera possible d'assembler de manière efficace et abstraite le flux de prétraitement de données et d'ingénierie de la quantité de caractéristiques.

DropNoVariance Supprimez les fonctionnalités qui n'ont pas de distribution et qui n'ont qu'une seule valeur dans la colonne. Les données Titanic n'ont pas de telles fonctionnalités, alors créons-les d'abord.

X['Test_Feature'] = 1

image.png

Maintenant, appliquons DropNoVariance.

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

image.png

Etc. Il peut être utilisé à la fois pour les colonnes numériques et les colonnes de catégorie, et s'il y a plusieurs colonnes, supprimez-les toutes.

DropHighCardinality Supprimez les colonnes avec un très grand nombre de catégories. S'il y a trop de catégories, il sera difficile de bien encoder et il sera difficile de faire quelque chose, c'est donc aussi une bonne idée de le laisser tomber rapidement afin de passer en un seul passage dans l'action initiale. (Dans Kaggle etc., nous allons abaisser la cardinalité en en extrayant des informations et en les regroupant)

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

image.png

Si vous le souhaitez, vous pouvez également voir quelles colonnes ont été supprimées comme suit:

trans.drop_columns

array(['Name', 'Ticket', 'Cabin'], dtype='<U6')

Vous pouvez voir que les fonctionnalités avec un très grand nombre de catégories ont été supprimées.

DropLowAUC Effectue une régression logistique d'une seule entité et de la variable objectif, entraînant la suppression des entités dont l'ASC est inférieure à un certain seuil. Il peut être utilisé pour la sélection de la quantité de caractéristiques. Dans le cas des variables catégorielles, la régression logistique est effectuée après leur transformation en variables fictives en interne. Normalement, environ 0,55 est recommandé, mais cette fois, nous définirons un seuil plus élevé pour la clarté.

trans = dl.DropLowAUC(threshold=0.65)
trans.fit_transform(X, y)

image.png

Il ne reste plus que la classe P, le sexe et le tarif, qui sont tous connus pour avoir une forte corrélation avec la variable objective dans les données du Titanic. Il est efficace de l'utiliser après que le nombre de dimensions explose en effectuant OneHotEncoding, etc.

DropHighCorrelation Sur la base du coefficient de corrélation de Pearson, les caractéristiques avec une corrélation élevée sont identifiées, puis seules les caractéristiques avec une corrélation plus élevée avec la variable objective sont laissées et les autres sont supprimées. Même s'il existe plusieurs fonctionnalités avec exactement le même contenu, elles seront supprimées en même temps. Pour booster les arbres, etc., c'est assez bien sans s'en soucier, mais lors de l'exécution de régression linéaire, etc., il doit être supprimé même s'il est régularisé.

trans = dl.DropHighCorrelation(threshold=0.5)
trans.fit_transform(X, y)

image.png

Le tarif a été effacé.

Utilisé avec Pipeline

C'est le plus grand avantage du prétraitement avec cette méthode. Traitons les 5 types de Drop introduits cette fois avec un pipeline.

from sklearn.pipeline import make_pipeline

process = make_pipeline(
    dl.DropColumns('PassengerId'),
    dl.DropNoVariance(),
    dl.DropHighCardinality(),
    dl.DropLowAUC(threshold=0.65),
    dl.DropHighCorrelation(),
)

process.fit_transform(X, y)

Tous les processus présentés ci-dessus ont été exécutés et le résultat est le suivant. image.png

Appliquons ceci aux données de test.

X_test = pd.read_csv('test.csv')
process.transform(X_test)

image.png J'ai pu appliquer rapidement le même traitement que lors de l'apprentissage aux données de test. Après cela, si vous l'enregistrez sous Pickle, il sera parfait pour la prochaine utilisation ou le déploiement de service!

en conclusion

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

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 (Drop)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Append)
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 d'agréger les données de musique doujin avec des pandas
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
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
Essayez de défier le sol par récursif
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'obtenir des métriques CloudWatch avec la source de données python re: dash
Essayez d'exploiter Facebook avec Python
Comment gérer les données déséquilibrées
Essayez de mettre des données dans MongoDB
Comment augmenter les données avec PyTorch
Traiter les données Pubmed .xml avec python
Essayez les données en parallèle avec TensorFlow distribué
[Mise à jour Ver1.3.1] J'ai créé une bibliothèque de prétraitement de données DataLiner pour l'apprentissage automatique
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python