[PYTHON] Depuis que nous avons publié DataLiner 1.2.0, nous allons introduire le nouveau prétraitement ajouté.

introduction

Nous avons publié DataLiner 1.2.0, une bibliothèque de prétraitement pour l'apprentissage automatique. Cette fois, j'ai ajouté environ 6 nouveaux prétraitements, je voudrais donc le présenter.

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.

! pip install -U dataliner

Préparation des données

Utilisez les données Titanic comme d'habitude.

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]
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 NaN S
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 NaN S
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 NaN S

Jetons un coup d'oeil maintenant.

AppendArithmeticFeatures Quatre règles sont appliquées entre les quantités d'entités incluses dans les données, et une nouvelle quantité d'entités avec un indice d'évaluation plus élevé que la quantité d'entités utilisée dans le calcul est ajoutée. L'évaluation se fait par régression logistique. Par défaut, l'indice de multiplication et d'évaluation est AUC, mais l'addition, la soustraction et la division, la précision, etc. sont également disponibles. Il est nécessaire de renseigner les valeurs manquantes avant de l'utiliser.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.AppendArithmeticFeatures(metric='roc_auc', operation='multiply')
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked PassengerId_multiply_Age PassengerId_multiply_SibSp PassengerId_multiply_Parch Pclass_multiply_Age
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 B96 B98 S 22 1 0 66
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C 76 2 0 38
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 B96 B98 S 78 0 0 78
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S 140 4 0 35
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 B96 B98 S 175 0 0 105

De cette manière, de nouvelles fonctionnalités sont ajoutées.

RankedEvaluationMetricEncoding Après avoir fait de chaque catégorie une variable fictive, une régression logistique est effectuée 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. Étant donné que la régression logistique de 5 fois est adaptée à chaque catégorie, la quantité de calcul sera énorme pour les fonctionnalités à cardinalité élevée, donc à l'avance Il est recommandé de réduire la cardinalité en utilisant Drop High Cardinality ou Group Rare Category.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.RankedEvaluationMetricEncoding()
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 3 640 2 22 1 0 288 7.250 1 1
2 1 554 1 38 1 0 284 71.283 77 2
3 3 717 1 26 0 0 256 7.925 1 1
4 1 803 1 35 1 0 495 53.100 112 1
5 3 602 2 35 0 0 94 8.050 1 1

Vous pouvez également vérifier l'importance de chaque catégorie dans la variable catégorielle en générant le classement.

process['rankedevaluationmetricencoding'].dic_corr_['Embarked']
Category Rank Evaluation_Metric
S 1 0.5688
C 2 0.5678
Q 3 0.4729

AppendClassificationModel Le classificateur est formé en fonction des données d'entrée et le résultat de la prédiction est ajouté en tant que nouvelle quantité de caractéristiques. Le modèle peut être n'importe quel modèle compatible sklearn. De plus, si la méthode predict_proba est implémentée Vous pouvez ajouter un score au lieu d'une étiquette en donnant l'argument probabilité = Vrai. Puisque le modèle est entraîné, la complétion des valeurs manquantes et le traitement des variables catégorielles sont fondamentalement nécessaires.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.AppendClassificationModel(model=RandomForestClassifier(n_estimators=300, max_depth=5),
                                 probability=False)
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Predicted_RandomForestClassifier
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 1
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 1
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 1
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0

C'est le cas lorsque probabilité = Vrai. Une note pour la classe 1 sera attribuée.

PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Predicted_RandomForestClassifier
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0.1497
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 0.8477
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 0.5401
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 0.8391
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0.1514

AppendEncoder Les différents encodeurs inclus dans le DataLiner remplacent directement les colonnes de catégorie par des nombres encodés. Cependant, dans certains cas, vous souhaiterez peut-être l'utiliser comme nouvelle quantité de fonctionnalités sans la remplacer. (TargetMeanEncoder, etc.) Dans ce cas, enveloppez Encoder dans cette classe et il sera ajouté en tant que quantité de fonctionnalités.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.AppendEncoder(encoder=dl.TargetMeanEncoding())
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Name_TargetMeanEncoding Sex_TargetMeanEncoding Ticket_TargetMeanEncoding Cabin_TargetMeanEncoding Embarked_TargetMeanEncoding
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 B96 B98 S 0.3838 0.1889 0.3838 0.3039 0.3390
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C 0.3838 0.7420 0.3838 0.3838 0.5536
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 B96 B98 S 0.3838 0.7420 0.3838 0.3039 0.3390
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S 0.3838 0.7420 0.4862 0.4862 0.3390
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 B96 B98 S 0.3838 0.1889 0.3838 0.3039 0.3390

AppendClusterTargetMean Regroupez les données et attribuez un numéro de cluster. (Identique à Ajouter un cluster jusqu'à présent) Remplacez ensuite chaque numéro de cluster par la moyenne des variables objectives du cluster et ajoutez-le en tant que nouvelle fonctionnalité. La saisie des valeurs manquantes et le traitement des variables catégorielles sont nécessaires.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.AppendClusterTargetMean()
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked cluster_mean
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0.3586
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 0.3586
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 0.3586
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 0.3586
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0.3586

PermutationImportanceTest Il s'agit d'un type de méthode de sélection de caractéristiques. Avec ou sans mélange aléatoire des données pour une certaine fonctionnalité La sélection des 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. Si la lecture aléatoire des données n'a pas beaucoup d'effet sur la métrique, supprimez la fonctionnalité car elle ne fonctionne pas.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.PermutationImportanceTest()
)
process.fit_transform(X, y)
Pclass Sex Age SibSp Ticket Fare Cabin Embarked
3 0.1889 22 1 0.3838 7.250 0.3039 0.3390
1 0.7420 38 1 0.3838 71.283 0.3838 0.5536
3 0.7420 26 0 0.3838 7.925 0.3039 0.3390
1 0.7420 35 1 0.4862 53.100 0.4862 0.3390
3 0.1889 35 0 0.3838 8.050 0.3039 0.3390

Nom, PassengerId et Parch ont été supprimés. Vous pouvez également vérifier les fonctionnalités supprimées comme suit.

process['permutationimportancetest'].drop_columns_

['PassengerId', 'Name', 'Parch']

Vous pouvez également régler la sensibilité en ajustant le seuil de seuil. Voir le document pour plus de détails.

en conclusion

Ce qui précède est le prétraitement nouvellement ajouté. ClasséEvaluationMetricEncoding est parfois plus précis que TargetMeanEncoding, donc je l'essaie souvent. De plus, le test d'importance de la permutation peut être exécuté plus rapidement que les méthodes Boruta et Step-wise, il n'y a donc aucune différence inattendue. Je pense qu'il peut être utilisé lorsque vous souhaitez sélectionner le montant de la fonctionnalité (?) Plus sérieusement que DropLowAUC.

Article de sortie: [mise à jour Ver1.1.9] J'ai créé une bibliothèque de prétraitement de données DataLiner pour l'apprentissage automatique

Le prétraitement avant la version 1.2 est présenté ci-dessous. 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)

Recommended Posts

Depuis que nous avons publié DataLiner 1.2.0, nous allons introduire le nouveau prétraitement ajouté.
Au milieu du développement, nous présenterons Alembic
Chainer v1.21 est sorti