Si vous voulez essayer l'apprentissage automatique, n'importe qui peut utiliser scicit-learn etc. pour l'implémenter relativement facilement. Cependant, afin d'obtenir des résultats au travail ou d'améliorer votre niveau ** "Je ne connais pas le fond, mais j'ai obtenu ce résultat" ** Vous pouvez voir qu'il est clairement faible.
Cette fois, nous reprendrons la ** «standardisation» ** qui apparaît en prétraitement.
D'après l'explication précédente, "J'ai entendu parler de la normalisation, pourquoi le faites-vous?" Et "Comment l'utilisez-vous avec scikit-learn?", "La normalisation est seulement un processus qui rend la moyenne 0 et l'écart type 1". Cependant, le but est de faire un article qui puisse répondre à la question, "Je veux comprendre quel type de calcul est réellement fait à partir de formules mathématiques."
Tout d'abord, nous donnerons un aperçu de la normalisation au chapitre 2, et au chapitre 3, nous utiliserons en fait scikitlearn pour la normalisation. Enfin, au chapitre 4, je voudrais aborder la formule de normalisation (si la normalisation aboutit réellement à une moyenne de 0 et un écart type de 1).
En conclusion, c'est ** le processus de traitement de chaque variable pour qu'elle rentre dans la «moyenne 0, écart-type 1» **.
Il est souvent utilisé dans le prétraitement en apprentissage automatique.
En gros, c'est une image qui ** aligne les unités de chaque donnée **. Par exemple, lorsqu'il y a des données sur les ventes et la température, les échelles sont complètement différentes lorsque les ventes sont de 100 millions d'unités et que la température est d'environ 40 (℃) au maximum, alors convertissez ces deux données de sorte qu'elles aient chacune une moyenne de 0 et un écart type de 1. Je vais le faire. (Plus précisément, après normalisation, les ventes sont de 0,4 et la température est de 0,1. * Les valeurs sont appropriées)
Il semble y avoir plusieurs raisons, mais l'une d'entre elles est ** "De nombreux algorithmes d'apprentissage automatique supposent que chaque variable a la même échelle" **.
Par exemple, dans l'exemple des ventes (en supposant 400 millions de yens) et de la température (en supposant 35 ° C) mentionné plus tôt, nous les humains savons à l'avance que chaque donnée est «ventes» et «température», il y en a donc deux. Même si l'échelle de la variable (échelle de l'unité) est différente, vous pouvez la comprendre sans aucune gêne.
Cependant, comme l'ordinateur n'est pas au courant d'une telle chose, elle peut être considérée comme une simple valeur numérique de «400 000 000» et «35» et mal comprise dans l'apprentissage automatique.
Afin d'éliminer ces effets indésirables, nous normaliserons en ajustant à l'avance l'échelle de chaque variable.
En plus de la standardisation, il existe une méthode appelée ** normalisation ** pour correspondre à l'échelle de chaque variable.
Je n'entrerai pas dans les détails cette fois, mais il semble qu'il existe de nombreuses situations où la standardisation est effectuée parce que ** "elle n'est pas facilement affectée par les valeurs aberrantes" et "elle devient une distribution normale lorsqu'elle est normalisée" **.
Comme exemple concret cette fois, je prendrai les projets kickstarter de kaggle que j'utilise toujours comme exemple. https://www.kaggle.com/kemical/kickstarter-projects
Ce chapitre est long, mais ** la standardisation essentielle n'est que (v) **, c'est donc une bonne idée d'y jeter un coup d'œil en premier.
#numpy,Importer des pandas
import numpy as np
import pandas as pd
#Importer pour effectuer certains traitements sur les données de date
import datetime
#Importation des données d'entraînement et fractionnement des données de test
from sklearn.model_selection import train_test_split
#Importer pour la normalisation
from sklearn.preprocessing import StandardScaler
#Importer pour la vérification de l'exactitude
from sklearn.model_selection import cross_val_score
#Importer pour la régression logistique
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import log_loss, accuracy_score, confusion_matrix
df = pd.read_csv("ks-projects-201801.csv")
De ce qui suit, vous pouvez voir qu'il s'agit de l'ensemble de données de (378661, 15).
df.shape
Je vais omettre les détails, mais puisque l'heure de début du recrutement et l'heure de fin du financement cloud sont dans les données, nous allons convertir cela en "jours de recrutement".
df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days
Je vais également omettre les détails ici, mais il y a des catégories autres que succès ("réussi") et échec ("échec") pour la variable objective "état", mais cette fois je n'utiliserai les données que pour le succès et l'échec.
df = df[(df["state"] == "successful") | (df["state"] == "failed")]
Remplacez ensuite le succès par 1 et l'échec par 0.
df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)
Avant de créer le modèle, supprimez l'identifiant et le nom dont vous pensez ne pas avoir besoin (cela devrait être conservé, mais cette fois, nous le supprimerons), et les variables que vous ne connaissez qu'après le financement du cloud. ..
df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)
Effectuez le traitement des variables catégorielles avec pd.get_dummies.
df = pd.get_dummies(df,drop_first = True)
C'est finalement la standardisation. Avant cela, jetons un coup d'œil rapide aux données actuelles.
Comme mentionné dans l'exemple au début, vous pouvez voir que les échelles unitaires «objectif (montant cible)» et «jours (période de recrutement)» sont assez différentes.
Cette fois, normalisons ces deux variables.
stdsc = StandardScaler()
df["goal"] = stdsc.fit_transform(df[["goal"]].values)
df["days"] = stdsc.fit_transform(df[["days"]].values)
Après cela, affichons à nouveau les données.
Les données d'objectif et de jours ont été standardisées!
Le processus de standardisation lui-même se termine par (V), mais dans le but d'appréhender la série de flux, Nous construisons même un modèle de régression logistique.
#Divisé en données d'entraînement et données de test
y = df["state"].values
X = df.drop("state", axis=1).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)
#Construction d'un modèle de régression logistique
clf = SGDClassifier(loss = "log", penalty = "none",random_state=1234)
clf.fit(X_train,y_train)
#Vérifier l'exactitude avec les données de test
clf.score(X_test, y_test)
Maintenant, la précision est de 0,665.
Jusqu'à présent, nous avons utilisé scicit-learn pour la normalisation afin de pouvoir l'implémenter pour le moment.
Dans ce chapitre, nous aimerions comprendre le traitement effectué par la normalisation d'un point de vue mathématique.
Donnons ici un exemple concret. Un exemple de température et de ventes, comme mentionné au début.
Température | Ventes (yens) | |
---|---|---|
1 | 10 | 400,000,000 |
2 | 15 | 390,000,000 |
3 | 30 | 410,000,000 |
4 | 20 | 405,000,000 |
5 | 40 | 395,000,000 |
Commençons par la conclusion. La normalisation est calculée par la formule suivante.
z = \frac{x -u}{σ}
Je ne suis pas sûr. $ x $ est la valeur de chaque variable, $ u $ est la moyenne de chaque variable et $ σ $ est l'écart type de chaque variable.
Pour le dire de manière très approximative, la moyenne est soustraite de chaque valeur et divisée par l'écart type de chaque variable, c'est-à-dire le degré de dispersion, de sorte que l'image est que les données dispersées dans différentes plages sont rassemblées.
・ ・ Je ne comprends pas mieux. Trouvons en fait la valeur numérique.
■ Moyenne $ u $ Puisque $ u $ est une moyenne, la moyenne des cinq données de température est $ (10 + 15 + 30 + 20 + 40) / 5 = 23 $.
De même, si vous calculez les ventes moyennes, $ (400,000,000 + 390,000,000 + 410,000,000 + 405,000,000 + 395,000,000) / 5 = 400,000,000 $ Ce sera.
■ Écart type $ σ $ Je vais omettre le processus de calcul, L'écart type de la température est d'environ 12.
L'écart type des ventes est de 7 905 694.
■ Une fois normalisé ... Les résultats de calcul suivants seront obtenus, et les valeurs de colonne de température normalisées et les valeurs de colonne de ventes normalisées seront utilisées dans l'apprentissage automatique.
Température | Ventes (yens) | 標準化したTempérature | Ventes standardisées | |
---|---|---|---|---|
1 | 10 | 400,000,000 | ||
2 | 15 | 390,000,000 | ||
3 | 30 | 410,000,000 | ||
4 | 20 | 405,000,000 | ||
5 | 40 | 395,000,000 |
La formule de standardisation est décrite comme $ z = \ frac {x -u} {σ} $, mais prouvons que la moyenne est 0 et l'écart type est 1 lorsque ce calcul est effectué.
Ici, nous allons considérer la formule $ y = ax + b $.
Tout d'abord, trouvons simplement la moyenne et l'écart type de pré-standardisation. Comme vous pouvez le voir, ni la moyenne ni l'écart type ne sont de 0 ou 1. ■ Moyenne Comme indiqué ci-dessous, la moyenne de ** $ y $ peut être exprimée en $ aµ + b $ **.
■ Écart type Nous recherchons d'abord la variance et le résultat est ** $ a ^ 2σ ^ 2 $. (L'écart type est $ aσ $) **
Ensuite, trouvons la moyenne et l'écart type après normalisation. Le concept de transformation de formule est fondamentalement le même que celui de transformation de formule avant normalisation.
Si vous transformez la formule comme indiqué ci-dessous, vous pouvez voir que la moyenne est de 0 et l'écart type est de 1 après normalisation!
■ Moyenne
■ Écart type Comme précédemment, nous recherchons d'abord la dispersion. Puisque la variance est 1, l'écart type est également 1.
Avec ce qui précède, il peut être prouvé à partir de la formule que la moyenne de chaque variable après normalisation est de 0 et l'écart-type est de 1.
Comment était-ce? Ma pensée est: "Je ne peux pas interpréter même si on me montre un code très compliqué depuis le début, donc je ne me soucie pas de la précision une fois, alors essayez d'abord d'implémenter une série de flux de base avec scicit-learn, etc." Je pense que c'est très important.
Cependant, une fois que je m'y suis habitué, je pense qu'il est très important de comprendre à partir d'un fond mathématique comment ils fonctionnent dans les coulisses.
Je pense que de nombreux contenus sont difficiles à comprendre, mais j'espère que cela aidera à approfondir ma compréhension.
Recommended Posts