Implémentez la normalisation du prétraitement des données d'entraînement Python avec scikit-learn [fit_transform]

Le prétraitement des données d'entraînement comprend un processus appelé normalisation qui modifie la plage réelle de données. Pour la mise en œuvre de la normalisation, scikit-learn (ci-après appelé sklearn) a une fonction appelée fit_transform. Cette fois, nous partagerons l'implémentation qui normalise les données d'entraînement et les données de validation avec l'exemple de code.

fonction de normalisation sklearn

Il existe trois types principaux de fonctions de normalisation fournies par sklearn et des processus en deux étapes.

  1. Calcul des paramètres
  2. Conversion à l'aide de paramètres fit() Calculer l'écart type et les valeurs maximales / minimales à partir des données d'entrée et enregistrer les paramètres

transform() Convertir les données à l'aide des paramètres calculés à partir de la fonction d'ajustement

fit_transform() Exécutez le processus ci-dessus en continu

Pourquoi existe-t-il trois types de fonctions?

Si vous souhaitez normaliser certaines données, vous devez utiliser la fonction fit_transorm pour calculer les paramètres et convertir les données en même temps. .. Cependant, lors de la conversion de données en prétraitement pendant l'entraînement, il est nécessaire d'utiliser les mêmes paramètres (résultats de la fonction d'ajustement) pour les données d'entraînement et les données de vérification. * Un exemple simple est affiché avec l'exemple de code. Par conséquent, fit () qui calcule les paramètres pour certaines données et la fonction de transformation qui se transforme en utilisant les paramètres calculés sont fournis.

Type de normalisation

Il semble qu'il y ait 27 types à la suite de la vérification avec la référence de sklearn. Je n'ai utilisé que quelques types, mais si vous êtes intéressé, veuillez vous y référer. API Reference sklearn.preprocessing  scikit-learn 0.19.2 documentation

Méthodes de conversion couramment utilisées -MinMaxScaler () # Définit les valeurs maximales / minimales des données ・ StandardScaler () # standardisation

Exemple de code

Vous trouverez ci-dessous un exemple de normalisation à l'aide de sklearn. Le contenu du processus est commenté sur chaque ligne. En tant que procédure d'exemple de code,

  1. Méthode de normalisation, définition des données de test
  2. Transformez avec fit_transform
  3. Enregistrer les paramètres-> Charger
  4. Définition des données de test
  5. Tester la transformation des données avec les paramètres de sauvegarde
  6. Transformation des données pour les données de test (fit_transform)

scaler_sample.py


#Si vous n'avez pas importé, veuillez installer à chaque fois.
from sklearn import preprocessing
import numpy as np
import pickle

#Définition de la méthode de normalisation MinMaxScaler(0<=data<=1)
mmscaler = preprocessing.MinMaxScaler()

#Définition des données brutes pour la formation
train_raw = np.array(list(range(11)))
print (train_raw)   # [ 0  1  2  3  4  5  6  7  8  9 10]

#Adapté aux données d'entraînement_transform
train_transed = mmscaler.fit_transform(train_raw.reshape(-1,1))
#Affichage des résultats de conversion
#0 à 10 les données sont converties de 0 à 1
print (train_transed.flatten()) # [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]

#Enregistrer les paramètres d'ajustement au format binaire
#Habituellement, le code d'apprentissage et le code de vérification sont implémentés séparément, il est donc présenté comme une méthode pour enregistrer les paramètres.
pickle.dump(mmscaler, open('./scaler.sav', 'wb'))

#En supposant que ce qui précède est implémenté dans une autre fonction, chargez le paramètre d'ajustement enregistré dans les données d'entraînement(Fichier binaire)
save_scaler = pickle.load(open('./scaler.sav', 'rb'))
#Vérifier les détails des paramètres
print(save_scaler,type(save_scaler))    # MinMaxScaler() <class 'sklearn.preprocessing._data.MinMaxScaler'>

#Définition des données de test
test_raw = np.array(list(range(100)))
print (test_raw)
'''print (test_raw)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
 96 97 98 99]
 '''

 #Convertir à l'aide des paramètres enregistrés(tranform)
save_scaler_transed = save_scaler.transform(test_raw.reshape(-1,1))
print (save_scaler_transed.flatten())
#Étant donné que le poids des données d'entraînement est utilisé, la plage de données va de 0 à 9..Devenir 9
'''print (save_scaler_transed.flatten())
[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7
 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.  3.1 3.2 3.3 3.4 3.5
 3.6 3.7 3.8 3.9 4.  4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.  5.1 5.2 5.3
 5.4 5.5 5.6 5.7 5.8 5.9 6.  6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.  7.1
 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.  8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9
 9.  9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9]
'''

#Calcul des paramètres à l'aide des données de test+conversion(fit_tranform)
test_fit_transed = mmscaler.fit_transform(test_raw.reshape(-1,1))

#Étant donné que les paramètres sont calculés à partir des données de test, la plage de données passe de 0 à 1.
print (test_fit_transed.flatten())
'''print (test_fit_transed.flatten())
[0.         0.01010101 0.02020202 0.03030303 0.04040404 0.05050505
 0.06060606 0.07070707 0.08080808 0.09090909 0.1010101  0.11111111
 0.12121212 0.13131313 0.14141414 0.15151515 0.16161616 0.17171717
 0.18181818 0.19191919 0.2020202  0.21212121 0.22222222 0.23232323
 0.24242424 0.25252525 0.26262626 0.27272727 0.28282828 0.29292929
 0.3030303  0.31313131 0.32323232 0.33333333 0.34343434 0.35353535
 0.36363636 0.37373737 0.38383838 0.39393939 0.4040404  0.41414141
 0.42424242 0.43434343 0.44444444 0.45454545 0.46464646 0.47474747
 0.48484848 0.49494949 0.50505051 0.51515152 0.52525253 0.53535354
 0.54545455 0.55555556 0.56565657 0.57575758 0.58585859 0.5959596
 0.60606061 0.61616162 0.62626263 0.63636364 0.64646465 0.65656566
 0.66666667 0.67676768 0.68686869 0.6969697  0.70707071 0.71717172
 0.72727273 0.73737374 0.74747475 0.75757576 0.76767677 0.77777778
 0.78787879 0.7979798  0.80808081 0.81818182 0.82828283 0.83838384
 0.84848485 0.85858586 0.86868687 0.87878788 0.88888889 0.8989899
 0.90909091 0.91919192 0.92929293 0.93939394 0.94949495 0.95959596
 0.96969697 0.97979798 0.98989899 1.        ]
 '''

en conclusion

J'ai fait cet article comme un mémorandum de ce que j'ai appris sur la normalisation. Avant de chercher, je n'ai pas remarqué du tout la différence entre fit_transform () et transform (). .. Il s'agit d'une conversion importante du prétraitement et affecte également l'exactitude des données à vérifier. Nous espérons qu'il n'y aura pas de cas où les paramètres seront réutilisés par inadvertance. En écrivant cet article, j'ai emprunté la sagesse de mes prédécesseurs. Je l'écrirai plus tard. Merci pour la lecture. Si vous aimez LGTM, s'il vous plaît!

Recommended Posts

Implémentez la normalisation du prétraitement des données d'entraînement Python avec scikit-learn [fit_transform]
Recommandation d'Altair! Visualisation des données avec Python
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Analyse de données avec python 2
Pré-traitement des données préfectorales
Analyse de données avec Python
Défiez l'analyse des composants principaux des données textuelles avec Python
[Bases de la science des données] Collecte de données depuis RSS avec python
Exemple de données créées avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Réseau de neurones avec Python (scikit-learn)
Obtenez des données Youtube avec python
Remarques sur la gestion de grandes quantités de données avec python + pandas
Application de Python: Nettoyage des données Partie 3: Utilisation d'OpenCV et prétraitement des données d'image
Débarrassez-vous des données sales avec Python et les expressions régulières
Traitement parallèle avec Parallel de scikit-learn
python: principes de base de l'utilisation de scikit-learn ①
[Homologie] Comptez le nombre de trous dans les données avec Python
[Python] Régression linéaire avec scicit-learn
Résumé de base de la manipulation de données avec Python Pandas - Première moitié: création et manipulation de données
Lire des données json avec python
Exercice pratique d'analyse de données avec Python ~ 2016 New Coder Survey Edition ~
Recherche en grille d'hyper paramètres avec Scikit-learn
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Implémentez facilement des sous-commandes avec python click
[Python] Obtenez des données économiques avec DataReader
Premiers pas avec Python Bases de Python
Notes personnelles de prétraitement des données Python Pandas
Jeu de vie avec Python! (Le jeu de la vie de Conway)
10 fonctions du "langage avec batterie" python
Modèle de prétraitement pour l'analyse des données (Python)
Visualisez facilement vos données avec Python seaborn.
Implémentation de la méthode Dyxtra par python
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Traiter les données Pubmed .xml avec python
Analyse de données à partir de python (visualisation de données 1)
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.3. Prétraitement des données
Coexistence de Python2 et 3 avec CircleCI (1.0)
Analyse de données à partir de python (visualisation de données 2)
Implémentez "Data Visualization Design # 2" avec matplotlib
Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
Etude de base d'OpenCV avec Python
Sortie CSV des données d'impulsion avec Raspberry Pi (vérifier l'entrée analogique avec python)
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
J'ai 0 ans d'expérience en programmation et je défie le traitement des données avec python
Tracer CSV de données de séries temporelles avec une valeur unixtime en Python (matplotlib)
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Obtenez des données supplémentaires vers LDAP avec python
Bases du traitement d'images binarisées par Python
Construction de pipeline de données avec Python et Luigi
[Exemple d'amélioration de Python] Apprentissage de Python avec Codecademy
Recevoir des données textuelles de mysql avec python
[Note] Obtenir des données de PostgreSQL avec Python
Traiter les données Pubmed .xml avec python [Partie 2]
Exécuter le script Python avec TS-220 cron
Essayez de travailler avec des données binaires en Python
Générer des données de test japonais avec Python Faker