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
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
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.
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)
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)
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.
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)
C'est tout.
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)
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