Cet article traite de la mise à l'échelle et de la normalisation. Cet article est principalement basé sur "Ingénierie de la quantité de fonctionnalités pour l'apprentissage automatique". Veuillez vérifier si vous devenez.
La plage de données numériques qui peuvent être prises peut être fixée ou non. La plage qui peut être prise pour les données de comptage n'est fondamentalement pas déterminée, et dans le cas d'un modèle sensible à l'échelle des caractéristiques telles que la régression linéaire, l'apprentissage peut échouer en raison de valeurs aberrantes ou de différences d'échelle entre les caractéristiques. .. L'unification de l'échelle dans un tel cas est appelée mise à l'échelle. Il existe une mise à l'échelle Min-Max, une normalisation, une normalisation L2, etc. pour la mise à l'échelle, alors introduisons-les dans l'ordre. Si vous souhaitez en savoir plus sur la mise à l'échelle, veuillez consulter l'article ici.
La mise à l'échelle Min-Max définit la valeur minimale sur 0 et la valeur maximale sur 1. Si une valeur aberrante est incluse, la plage de valeurs normales pouvant être prises peut devenir trop étroite en raison de l'influence de la valeur aberrante, de sorte que la normalisation est essentiellement utilisée.
\tilde{x} = \frac{x - min(x)}{max(x) - min(x)}
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
##Nombre aléatoire fixe
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
print(data.max()) # 977.0
print(data.min()) # 0
scaler = MinMaxScaler()
data_n = scaler.fit_transform(data)
data_n = pd.DataFrame(data_n)
print(data_n.max()) ## 1.0
print(data_n.min()) ## 0
En normalisation, la moyenne est de 0 et la variance de 1. Lorsque la quantité d'entités d'origine est une distribution normale La quantité d'entités normalisées est une distribution normale standard.
\tilde{x} = \frac{x - mean(x)}{sqrt(var(x))}
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
##Nombre aléatoire fixe
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
scaler = StandardScaler()
data_n = scaler.fit_transform(data)
data_n = pd.DataFrame({'Listen Count': data_n.ravel()})
print(data_n.var()) ##1.000918
print(data_n.mean()) ##6.518741e-17
La normalisation L2 normalise la quantité de caractéristiques en la divisant par la norme L2.
\tilde{x} = \frac{x}{||x||_2} \\
||x||_2 = \sqrt{x_1^2 + x_2^2+ ...+x_m^2 }
import numpy as np
import pandas as pd
from sklearn.preprocessing import normalize
##Nombre aléatoire fixe
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
##Normalisation L2
data_l2_normalized = normalize([data['Listen Count']],norm='l2')
data_l2 = pd.DataFrame({'Listen Count': data_l2_normalized.ravel()})
print(np.linalg.norm(data_l2_normalized,ord=2)) ## 0.999999999
Je pense publier une vidéo sur l'informatique sur YouTube. S'il vous plaît, abonnez-vous à la chaîne et donnez-nous une note élevée, car cela vous motivera à mettre à jour Youtube et Qiita. YouTube: https://www.youtube.com/channel/UCywlrxt0nEdJGYtDBPW-peg Twitter: https://twitter.com/tatelabo
Recommended Posts