[PYTHON] Prétraitement dans l'apprentissage automatique 3 Données de valeur manquante / aberrante / de déséquilibre

Aidemy 2020/10/29

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le troisième article du prétraitement pour l'apprentissage automatique. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ Traitement des valeurs manquantes ・ Traitement des valeurs aberrantes ・ Traitement des données déséquilibrées

Traitement des valeurs manquantes

À propos des valeurs manquantes

-__ La valeur manquante __ est __ données vides __ représentées par "NaN". -Si NaN est présent dans les données, __ la moyenne globale ou l'écart type ne peut pas être calculé __. -Si toutes les __ toutes __ données contenant même une valeur manquante sont supprimées, les données seront gaspillées ou biaisées.

Mécanisme de génération de valeur manquante

-Comme vu dans la section précédente, les données contenant des valeurs manquantes ne peuvent être analysées que si elles sont correctement traitées. Par conséquent, il est nécessaire d'effectuer un prétraitement approprié pour les valeurs manquantes, mais la méthode diffère selon le mécanisme de génération des valeurs manquantes.

-Il existe les trois types suivants de mécanismes de génération de valeur manquante. 1 .__ MCAR: Lorsque la probabilité de perte de données (devenant NaN) n'est pas pertinente pour les données elles-mêmes (survenant au hasard) __ ex) Certaines données ont été perdues en raison d'un dysfonctionnement de l'ordinateur. 2 .__ MAR: Lorsque la probabilité de perte de données peut être déduite d'éléments autres que cet élément __ ex) Si l'item «sexe» est féminin dans le questionnaire pour les hommes et les femmes, la probabilité de carence de l'item «âge» est élevée. 3 .__ NMAR: lorsque la probabilité de perte de données peut être déduite de l'élément __ ex) Dans un questionnaire ciblant les hommes et les femmes, plus l'âge réel est ancien, plus la probabilité de manquer l'item «âge» est élevée.

Gérer les valeurs manquantes

-Les contre-mesures appropriées diffèrent selon le mécanisme de génération de valeur manquante.

-Dans le cas de MCAR, il est également possible d'effectuer __ "listwise delete" __ pour supprimer toutes les données y compris les valeurs manquantes. Par conséquent, lorsque le nombre de données devient trop petit, __ "méthode d'affectation" __ (décrite plus loin) peut également être utilisée. -Pour MAR, utilisez __ "méthode d'affectation" __. La suppression par liste est inappropriée car, par exemple, beaucoup de données féminines sont supprimées et les données sont biaisées. -Dans le cas du NMAR, il est difficile de le gérer correctement, donc __ fondamentalement, les données sont récupérées __.

Méthode de substitution

-Il existe à peu près deux types de méthodes de substitution de valeur manquante. Les détails seront décrits plus tard.

  1. __ Méthode de substitution unique __: Une méthode pour compléter les valeurs manquantes pour créer un ensemble de données complet et l'utiliser pour créer un modèle.
  2. __ Méthode d'affectation multiple __: Méthode de création de plusieurs ensembles de données complets qui complètent les valeurs manquantes, de création d'un modèle pour chacun et enfin d'intégration des modèles en un seul.

Visualisation des valeurs manquantes

・ Recherchez où se trouve NaN en visualisant les données. -Si vous voulez facilement savoir combien de NaN se trouvent dans quelle colonne, vous pouvez utiliser __ "Data.isnull (). Sum ()" __ de pandas. -Si vous voulez visualiser l'état de la valeur manquante entière, utilisez la fonction __matrix __ du package __missingno __.

・ Code![Capture d'écran 2020-10-29 15.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/80bcfbae-f632-584d- 74ff-9e37c2c9965b.png)

・ Résultat (la partie blanche manque une valeur)![Capture d'écran 2020-10-29 15.05.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700 /948b7b71-7cf9-be7d-f645-e7eea9335423.png)

Méthode de substitution unique

-Lors de la complétion des valeurs manquantes dans __single substitution method __, il existe trois types de méthodes selon le but.

-__ Méthode de substitution de la valeur moyenne : Remplacez la valeur moyenne de l'élément par la valeur manquante NaN. À mesure que la valeur moyenne augmente, la variance globale diminue et ne peut donc pas être utilisée lorsque la variance et l'erreur doivent être prises en compte. - Méthode de substitution de la régression probabiliste : Bien qu'elles ne soient pas traitées en détail, la dispersion et l'erreur peuvent être considérées. - Méthode Hot deck __: Compléter en recevant la valeur de la ligne de données (destinataire) contenant la valeur manquante et la ligne de données (donneur) dont les données sont proches l'une de l'autre. -La proximité des données est déterminée à l'aide d'une méthode appelée __ "méthode du plus proche voisin" __.

Méthode de pont chaud

-La méthode hot deck est décrite et exécutée comme suit. knnimpute.knn_impute_few_observed(matrix, missing_mask, k)

-Pour l'argument, passez les données converties à np.matrix à "matrice". Dans "missing_mask", passez les données matricées par __np.isnan (matrice) __ où la valeur manquante est incluse dans la matrice. «K» spécifie le nombre de points proches à prendre en compte dans la «méthode la plus proche» KNN.

・ KNN est une méthode apprise en «apprentissage supervisé (classification)», et est une méthode qui prend en compte k points dans le voisinage lors de la classification d'un point de données spécifique.

-De plus, puisque les données sont converties en np.matrix, il est nécessaire de revenir au format de données d'origine si nécessaire.

・ Code![Capture d'écran 2020-10-29 15.11.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/db15c25d-1ae3-c0b5- 6711-fbaf689c50f5.png)

À propos de la méthode d'affectation multiple

-Dans le cas de la méthode de substitution unique, la valeur complémentée est juste une valeur prédite, il y a donc un inconvénient que le résultat de l'analyse du modèle utilisant cette méthode n'est pas toujours précis. ・ D'autre part, dans la méthode de substitution multiple, les données sont complétées plusieurs fois pour créer plusieurs ensembles de données, et les résultats de l'analyse sont intégrés en un seul pour produire le résultat final. Est possible__.

-Le modèle utilisé dans la méthode d'affectation multiple peut être exprimé comme suit en utilisant des souris de modèles de statistiques. mice.MICE(formula, optimizer, imp_data)

-Pour chaque argument, passez l'expression de la variable prédite par le modèle à "formule". Par exemple, dans le cas d'un modèle de régression multiple linéaire qui prédit une variable appelée «distance» avec «temps» et «vitesse», elle s'exprime comme suit. 'distance ~ time + speed' -Spécifier le modèle d'analyse dans "optimizer", et passer __ "mice.MICEData (data) function" __ à créer pour que les données puissent être manipulées par MICE dans "imp_data".

-Le résultat de l'analyse complémentaire peut être obtenu en utilisant la méthode __fit () __ pour le modèle MICE créé de cette manière. (Exécution de la méthode d'affectation multiple) -Spécifiez le nombre d'essais pour un achèvement __ dans le premier argument de fit (), et passez __ le nombre de créations d'ensemble de données __ dans le deuxième argument.

-Pour ce résultat d'analyse, vous pouvez vérifier le résultat en utilisant la méthode __summary () __.

・ Code![Capture d'écran 2020-10-29 15.13.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/a40802e3-fe89-1c45- b1a3-c5bf17e2ea36.png)

À propos des valeurs aberrantes

Problèmes causés par des valeurs aberrantes

-__ Les valeurs aberrantes __ font référence aux données __ qui sont significativement éloignées des autres données __. -Si les valeurs aberrantes sont mélangées, des problèmes tels que __ "les résultats de l'analyse ne seront pas précis" et "l'apprentissage du modèle sera lent" se produira. -Par conséquent, il est nécessaire de détecter les valeurs aberrantes au stade du prétraitement et de les exclure __.

Visualisation des valeurs aberrantes

・ Il est facile de comprendre s'il existe une valeur aberrante. -Utilisez seaborn __boxplot (x, y, whis) __ pour la visualisation. Ce qui est dessiné est une "moustache de boîte", et les valeurs aberrantes sont indiquées par "♦ ︎". -Les arguments "x" et "y" spécifient les données de l'axe des x et de l'axe des y, et "whis" spécifie les critères à considérer comme une valeur aberrante.

-Lorsque les données sont bidimensionnelles, __joinplot (x, y, data) __ peut également être utilisé. Comme les points sont tracés comme indiqué dans le diagramme de dispersion, les valeurs aberrantes sont détectées visuellement. -Vous pouvez passer un DataFrame à l'argument "data".

・ Code (ne spécifiez que l'axe y car il vous suffit de savoir à quelle distance se trouve l'axe vertical) スクリーンショット 2020-10-29 15.14.57.png

・ Résultat![Capture d'écran 2020-10-29 15.15.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/eed4d5ce-e5ff-4c74- 7105-230a2789e22b.png)

Détection des valeurs aberrantes [LOF]

-S'il est trouvé qu'il y a une valeur aberrante, __ détecte en fait la valeur aberrante __. -Pour la détection, des critères tels que __ "quelle valeur devrait être une valeur aberrante" __ sont requis. Cette fois, nous traiterons de la méthode appelée __ "LOF" __ de scikit-learn, qui détecte une fois la norme définie à l'avance. ・ Le jugement de valeur d'écart LOF est effectué comme suit. (1) Considérez un point avec peu de points de données près de __ comme une valeur aberrante. (2) Le jugement de "proche" est fait en utilisant __k points de voisinage __. ③ Le point où ce jugement (densité de données) est relativement faible avec l'environnement est jugé comme une valeur aberrante __.

-LOF peut être utilisé avec __LocalOutlierFactor (n_neighbors = k) __. -Pour n_neighbours, spécifiez le nombre de points voisins k.

-Après cela, les données sont entraînées par la méthode __fit_predict (data) __ comme un modèle normal, et la valeur aberrante est détectée. -DataFrame peut être passé aux données telles quelles. -En tant que valeur de retour, un tableau tel que __array ([1,1, -1,1, ...]) __ est renvoyé. Parmi ceux-ci, la partie "-1" est considérée comme une valeur aberrante. -D'un autre côté, si vous spécifiez __data [variable qui stocke la valeur de retour == -1] __, vous pouvez extraire les lignes considérées comme des valeurs aberrantes.

・ Code![Capture d'écran 2020-10-29 15.21.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/4423b970-0dfd-ecd5- da49-847dffe1f166.png)

-Result (sortie des valeurs aberrantes)![Capture d'écran 2020-10-29 15.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/ db1e7d72-ee73-cb5a-c9f0-d315fbbeaf1f.png)

Détection des valeurs aberrantes [isolationForest]

-Il existe une méthode appelée __ "forêt d'isolation" __ comme méthode de détection des valeurs aberrantes différentes de LOF. ・ IsolationForest détecte les valeurs aberrantes en répétant __ les données divisant aléatoirement et en définissant les valeurs à cette profondeur __. -Puisque l'isolementForest ne dépend pas de la distance ou de la densité, le calcul n'est pas compliqué et __ économie de mémoire __. Il a également la caractéristique qu'il est facile de mettre à l'échelle le calcul même pour des données à grande échelle.

-Similaire à LOF, isolationForest peut prédire les valeurs aberrantes en utilisant la "fonction IsolationForest ()".

Le modèle de classification est créé par __IsolationForest () __, qui est entraîné à l'aide de la méthode __fit () __, et prédit par predict (). Comme avec LOF, "-1" est une valeur aberrante pour cette valeur de retour, alors obtenez-la comme __data [predictions == -1] __.

·code スクリーンショット 2020-10-29 15.23.45.png

・ Résultat![Capture d'écran 2020-10-29 15.22.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/24e06303-4aff-5fa1- df0a-dc90bc387055.png)

À propos des données de déséquilibre

Problèmes causés par des données déséquilibrées

-Sur les valeurs de données, les données __ dont la valeur spécifique est extrêmement grande ou petite sont appelées __ "données déséquilibrées" __. -Par exemple, lorsque la valeur est "0" ou "1" comme dans la classification binaire, 999 sur 1000 données sont "1" et 1 est "0". Lors de la prédiction avec ces données, si vous prédisez __ "1", vous atteindrez 99,9%, mais "0" est presque imprévisible __. -Par conséquent, il est nécessaire d'ajuster correctement les données déséquilibrées au stade du prétraitement des données __.

-Il existe les trois méthodes de réglage suivantes. -__ Suréchantillonnage : Méthode d'augmentation __ du solde des données peu fréquentes. - Sous-échantillonnage : Une méthode pour équilibrer __ en réduisant __ le sous-échantillonnage des données fréquemment utilisées. - SMOTE-ENN__: Augmentez le plus petit (SMOTE) et diminuez le plus d'un (ENN) pour équilibrer.

-Lors de l'ajustement de données déséquilibrées, la première chose à faire est de confirmer "s'il y a des données déséquilibrées", c'est-à-dire de visualiser le nombre (fréquence) de chaque valeur __. -Visualisez le nombre comme suit. __Data ['colonne'] .value_counts () __

-Code (données indiquant si une personne a acheté une voiture)![Capture d'écran 2020-10-29 15.25.29.png](https: //qiita-image-store.s3.ap-northeast-1.amazonaws) .com / 0/698700 / b12aa6ff-a80c-949c-cdb3-85cc22a6289a.png)

Suréchantillonnage

-__ Le suréchantillonnage__ est une méthode pour augmenter les données peu fréquentes et les équilibrer avec des données plus fréquentes. -Il existe plusieurs façons d'augmenter les données, mais la plus simple est la méthode __ "gonfler aléatoirement les données existantes" __. -Pour le remplissage, le __RandomOverSampler (ratio = 'minorité') __, qui est utilisé pour ajuster les données déséquilibrées, est utilisé. -Après avoir défini RandomOverSampler, exécutez-le avec __. Fit_sample (X, y) __. ・ Pour cela, je préparerai la variable objective X et la variable explicative y, et préparerai deux variables pour stocker celles remplies.

・ Code![Capture d'écran 2020-10-29 16.15.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/af63bf2f-e5e1-fd9e- ec9f-077bdc5c2fa2.png)

Sous-échantillonnage

-__ Le sous-échantillonnage __ est une méthode de réduction et d'équilibrage des données fréquemment utilisées. -Vous pouvez réduire les données avec __RandomUnderSampler () __. En ce qui concerne le ratio spécifié par l'argument à ce moment, puisque celui avec la fréquence la plus élevée est traité cette fois, il est fixé à __ 'majoritaire' __.

・ Code![Capture d'écran 2020-10-29 16.13.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/79204ef5-3ef9-8163- 8aac-390d1890a9fa.png)

SMOTE-ENN -SMOTE est utilisé pour le suréchantillonnage (gonfler les données) et ENN est utilisé pour le sous-échantillonnage (suppression des données). -En outre, SMOTE utilise la méthode du __nearest prochain (kNN) __ pour estimer et gonfler les données à augmenter, et ENN estime et supprime également les données à réduire de la même manière que kNN. ・ Utilisez __SMOTEENN (smote =, enn =) __ pour utiliser SMOTE et ENN. C'est fondamentalement la même chose que ROS et RUS, mais il est nécessaire de spécifier le nombre de points de voisinage (k_neighbours, n_neighbours) utilisés dans kNN dans l'argument.

・ Code![Capture d'écran 2020-10-29 16.15.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/34354d74-0869-5e88- d0cc-520309db02e7.png)

Sommaire

-__ La valeur manquante __ est une donnée vide représentée par "NaN". -__ Hors de valeur __ est des données qui sont significativement différentes des autres données. -__ Les données déséquilibrées__ sont des données dans lesquelles une valeur spécifique est extrêmement élevée ou faible. -Ces données interfèrent avec l'apprentissage automatique et doivent être prétraitées.

-La valeur manquante est complétée en remplaçant une valeur numérique pour NaN par __ "méthode d'affectation" __. -Obtenir les valeurs aberrantes avec __ "LOF" et "isolation Forest" __ et les exclure. -Les données non équilibrées sont équilibrées en effectuant __ "suréchantillonnage", "sous-échantillonnage" __, ou les deux.

Cette fois, c'est fini. Merci d'avoir lu jusqu'au bout.

Recommended Posts

Prétraitement dans l'apprentissage automatique 3 Données de valeur manquante / aberrante / de déséquilibre
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Prétraitement dans l'apprentissage automatique 2 Acquisition de données
Prétraitement dans l'apprentissage automatique 4 Conversion de données
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
Classification et régression dans l'apprentissage automatique
Apprentissage automatique dans Delemas (acquisition de données)
Python: prétraitement dans l'apprentissage automatique: présentation
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
Division des données de formation en apprentissage automatique et apprentissage / prédiction / vérification
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Nettoyage des données Comment gérer les valeurs manquantes et aberrantes
Échantillonnage dans des données déséquilibrées
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
Ensemble de données pour l'apprentissage automatique
Apprentissage automatique dans Delemas (s'entraîner)
Music and Machine Learning Prétraitement MFCC ~ Mel Frequency Kepstram Coefficient
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Utilisé en EDA pour l'apprentissage automatique
Apprentissage automatique et optimisation mathématique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Génération de données factices Python (édition d'adresse)
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Génération d'ensembles de données
Échantillonnage dans des données déséquilibrées
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Automatisez les tâches de routine dans l'apprentissage automatique
Hashing de données en R et Python
Organisez des plateformes d'apprentissage automatique et d'apprentissage en profondeur
Recherche de semences aléatoires dans l'apprentissage automatique
Procédure d'apprentissage automatique de base: ② Préparer les données
Comment collecter des données d'apprentissage automatique
Mettez vos propres données d'image dans Deep Learning et jouez avec
[Apprentissage automatique] OOB (Out-Of-Bag) et son ratio
[python] Techniques souvent utilisées dans l'apprentissage automatique
"Kaggle memorandum" Rechercher / supprimer les valeurs manquantes
Notes personnelles et liens sur l'apprentissage automatique ① (Machine learning)
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
[Python] Première analyse de données / apprentissage automatique (Kaggle)
Représentez facilement des données graphiques dans le shell et Python
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
Créer un environnement pour Python et l'apprentissage automatique (macOS)
Séparation de la conception et des données dans matplotlib
Remplissez les valeurs manquantes avec Scikit-learn impute
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
"Tutoriels OpenCV-Python" et "Système d'apprentissage automatique pratique"
Liste des principales distributions de probabilité utilisées en apprentissage automatique et statistiques et code en python
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Machine Learning avec docker (40) avec anaconda (40) "Hands-On Data Science and Python Machine Learning" Par Frank Kane