[PYTHON] [Mise à jour Ver1.3.1] J'ai créé une bibliothèque de prétraitement de données DataLiner pour l'apprentissage automatique

introduction

J'ai créé DataLiner, une bibliothèque de prétraitement de données pour l'apprentissage automatique.

Lors de la modélisation de l'apprentissage automatique, le traitement utilisé dans la partie traitement des données / ingénierie de la quantité d'objets est résumé sous forme de liste de prétraitement. Puisqu'il est conforme au transformateur scikit-learn, il peut être fit_transformed par lui-même ou versé dans le pipeline. Puisqu'il y a des fonctions et des prétraitements qui n'ont pas encore été complètement emballés, nous continuerons à les mettre à jour régulièrement, mais il serait encourageant si vous pouviez nous fournir d'autres rapports de bogues, FIX, de nouvelles fonctions et de nouvelles demandes d'extraction de prétraitement.

GitHub: https://github.com/shallowdf20/dataliner PyPI: https://pypi.org/project/dataliner/ Document: https://shallowdf20.github.io/dataliner/preprocessing.html

Installation

Installez à l'aide de pip. Si vous créez un environnement Python à l'aide d'Anaconda, essayez d'exécuter le code suivant avec Anaconda Prompt.

! pip install -U dataliner

Préparation des données

Prenons l'exemple des jeux de données du Titanic, que tout le monde adore. Notez que X doit être pandas.DataFrame et y doit être pandas.Series, et une erreur sera générée si les types de données sont différents. Maintenant, préparez les données à traiter.

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]

Des données familières comme celle-ci sont stockées dans X. image.png

Comment utiliser

Ensuite, je vais l'utiliser immédiatement. Tout d'abord, essayez d'utiliser Drop High Cardinality, qui efface automatiquement les fonctionnalités avec trop de catégories.

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

image.png Vous pouvez voir que les fonctionnalités avec un très grand nombre de catégories telles que le nom et le ticket ont été supprimées. En passant, dans le cas du Titanic, je pense que les informations seront déformées de ces colonnes pour améliorer la précision.

Ensuite, essayons l'encodage cible familier. C'est une version qui lisse en utilisant la moyenne de y comme pré-probabilité.

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

image.png Il a automatiquement reconnu les colonnes de variables catégorielles et encodé chaque catégorie à l'aide de la variable objective.

Je pense également que de nombreux spécialistes des données utilisent Pipeline pour plus d'efficacité. Bien entendu, chaque classe DataLiner peut être utilisée de la même manière.

from sklearn.pipeline import make_pipeline

process = make_pipeline(
    dl.DropNoVariance(),
    dl.DropHighCardinality(),
    dl.BinarizeNaN(),
    dl.ImputeNaN(),
    dl.OneHotEncoding(),
    dl.DropHighCorrelation(),
    dl.StandardScaling(),
    dl.DropLowAUC(),
)

process.fit_transform(X, y)

À la suite de divers traitements, c'est devenu comme ça. image.png

Dans Titanic, il existe des données appelées test.csv qui sont présentées à l'avance pour évaluation, alors lisez-les et appliquez le même processus.

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

image.png

C'est tout.

Ce qui est inclus

Pour le moment, c'est comme suit. Nous aimerions étendre les fonctions et processus dans les futures mises à jour.

** Post-scriptum 5/3: ** J'ai écrit un article d'introduction pour chaque classe. 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 (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 (Append)

** BinarizeNaN ** - Recherchez une colonne contenant des valeurs manquantes et créez une nouvelle fonctionnalité qui vous indique si la colonne était manquante ** ClipData ** --Séparez les données numériques avec le centile q et remplacez les valeurs au-dessus et en dessous de la limite supérieure par des limites supérieure et inférieure. ** CountRowNaN ** --Crée la valeur totale des valeurs manquantes dans le sens des lignes de chaque donnée en tant que nouvelle quantité d'entités. ** DropColumns ** - Supprime les colonnes spécifiées ** DropHighCardinality ** - Supprimez les colonnes avec un grand nombre de catégories ** DropHighCorrelation **: supprime les entités dont le coefficient de corrélation de Pearson dépasse le seuil. Lors de la suppression, il laisse les fonctionnalités qui sont plus corrélées avec la variable objectif. ** DropLowAUC ** - Pour toutes les entités, la régression logistique avec y comme variable objectif est effectuée pour chaque entité, et les entités dont l'AUC est inférieure au seuil sont supprimées. ** DropNoVariance ** - Supprime les fonctionnalités qui ne contiennent qu'un seul type de données. ** GroupRareCategory **: regroupe les catégories les moins fréquentes dans la colonne de catégorie. ** ImputeNaN ** - Complète les valeurs manquantes. Par défaut, les données numériques sont complétées par des moyennes et les variables catégorielles sont complétées par les valeurs les plus fréquentes. ** OneHotEncoding ** - Rendre les variables catégorielles factices. ** TargetMeanEncoding ** - Remplace chaque catégorie de variables catégorielles par une moyenne lissée de la variable objective. ** StandardScaling ** --Convertit les données numériques afin qu'elles aient une moyenne de 0 et une distribution de 1. ** MinMaxScaling ** - Met à l'échelle les données numériques de 0 à 1 ** CountEncoding ** - Remplace les valeurs de catégorie par le nombre d'occurrences ** ClasséCountEncoding ** --Créez un classement basé sur le nombre d'occurrences de la valeur de catégorie et remplacez-le par ce classement. Ceci est efficace lorsque plusieurs catégories apparaissent le même nombre de fois. ** FrequencyEncoding ** - Remplace les valeurs de catégorie par fréquence d'occurrence. La version de classement est la même que ClasséCountEncoding, elle n'est donc pas disponible. ** ClasséTargetMeanEncoding ** - Il s'agit d'une version qui crée un classement en faisant la moyenne des variables d'objectif pour chaque valeur de catégorie et le remplace par ce classement. ** AppendAnomalyScore ** - Ajoute un score aberrant de Isolation Forest en tant que quantité d'entités ** AppendCluster ** --Effectuez des KMeans et ajoutez le cluster résultant en tant que quantité de fonctionnalités. Mise à l'échelle des données recommandée ** AppendClusterDistance ** --Effectuez des KMeans et ajoutez la distance résultante à chaque cluster en tant que quantité d'entités. Mise à l'échelle des données recommandée ** AppendPrincipalComponent ** --Effectuez une analyse du composant principal et ajoutez le composant principal en tant que quantité d'entités. Mise à l'échelle des données recommandée ** AppendArithmeticFeatures **: exécute quatre règles sur les caractéristiques contenues dans les données et ajoute une nouvelle fonctionnalité avec un indice d'évaluation plus élevé que les fonctionnalités utilisées dans le calcul. (ver1.2.0) ** ClasséEvaluationMetricEncoding ** --Faites de chaque catégorie une variable factice, puis effectuez une régression logistique avec chaque colonne de catégorie et variable objective. Créez un classement à l'aide de la métrique résultante (AUC par défaut) et encodez la catégorie d'origine avec ce classement. (ver1.2.0) ** AppendClassificationModel ** --Trains le classificateur pour l'entrée et ajoute l'étiquette ou le score du résultat de la prédiction en tant que quantité de caractéristiques. (ver1.2.0) ** AppendEncoder ** - Ajoute le résultat du traitement de chaque encodeur inclus dans DataLiner en tant que quantité de fonctionnalités au lieu de le remplacer. (ver1.2.0) ** AppendClusterTargetMean **: ajoute la variable d'objectif moyenne dans chaque cluster après la mise en cluster en tant que quantité de caractéristiques. (ver1.2.0) ** PermutationImportanceTest ** - La sélection de la quantité de caractéristiques est effectuée du point de vue de la détérioration de l'indice d'évaluation du résultat de la prédiction du modèle lorsque les données d'une certaine quantité de caractéristiques sont mélangées au hasard ou non. (ver1.2.0) ** UnionAppend ** - La classe Append 〇〇 de DataLiner est traitée en parallèle au lieu de série, et les fonctionnalités du résultat de sortie sont combinées et ajoutées aux fonctionnalités d'origine. Les classes doivent être données dans une liste. (ver1.3.1) ** load_titanic ** --Charger des données titanesques. (ver1.3.1)

à la fin

J'ai résumé les processus que j'ai répétés plusieurs fois, mais peut-être que d'autres personnes ont des besoins similaires? Je l'ai rendu public. De la myriade de prétraitements, j'espère que les principaux seront une bibliothèque cohérente.

Encore une fois, nous attendons les rapports de bogues, les correctifs, les nouvelles fonctionnalités et les nouvelles demandes d'extraction de traitement! !!

Recommended Posts

[Mise à jour Ver1.3.1] J'ai créé une bibliothèque de prétraitement de données DataLiner pour l'apprentissage automatique
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Ensemble de données pour l'apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Utilisation d'icrawler plus simple pour la collecte de données d'apprentissage automatique
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai fait un kit d'apprentissage pour word2vec / doc2vec / GloVe / fastText
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
J'ai créé un site d'apprentissage C ++
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Prétraitement dans l'apprentissage automatique 2 Acquisition de données
Création d'un outil qui facilite la définition des paramètres des modèles d'apprentissage automatique
Prétraitement dans l'apprentissage automatique 4 Conversion de données
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
J'ai créé un docset de tableau de bord pour Holoviews
Python: prétraitement en machine learning: acquisition de données
Python: prétraitement dans l'apprentissage automatique: conversion de données
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Créer un environnement de développement pour l'apprentissage automatique
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Nous avons créé un produit de prévention du télétravail.
Histoire de l'analyse de données par apprentissage automatique
J'ai installé le framework Deep Learning Chainer
Création de l'outil de gestion des utilisateurs Let's Chat
J'ai fait une bibliothèque pour bien séparer les phrases japonaises
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
J'ai créé un outil de nettoyage pour Google Container Registry
J'ai créé une VM qui exécute OpenCV pour Python
Installation de TensorFlow, une bibliothèque d'apprentissage automatique de Google
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai créé un outil de génération de données texte répétitif "rpttxt"
Mémo de construction d'environnement d'apprentissage automatique par Python
〇✕ J'ai fait un jeu
Bibliothèque d'apprentissage automatique dlib
Bibliothèque d'apprentissage automatique Shogun
Étant donné que ImageDataGenerator ne peut plus être utilisé, une histoire sur la création d'une classe d'extension de données pour tensorflow> = 2.0
J'ai installé la bibliothèque de machine learning automatique auto-sklearn sur centos7
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
Prétraitement dans l'apprentissage automatique 3 Données de valeur manquante / aberrante / de déséquilibre
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai essayé de faire un diagnostic de visage AI pour les golfeuses professionnelles ③
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)
Créer un environnement PyData pour une session d'étude sur l'apprentissage automatique (janvier 2017)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (conversion)
Modèle de pipeline de prétraitement pour DataLiner
Créer un environnement d'apprentissage automatique
J'ai fait un texte Python
Fait une commande pour FizzBuzz
J'ai fait un robot discord
J'ai essayé d'implémenter Extreme Learning Machine
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX