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.
! pip install -U dataliner
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.
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)
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)
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
Maintenant, appliquons DropNoVariance.
trans = dl.DropNoVariance()
trans.fit_transform(X)
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)
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)
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)
Le tarif a été effacé.
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.
Appliquons ceci aux données de test.
X_test = pd.read_csv('test.csv')
process.transform(X_test)
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!
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