J'ai brièvement recherché sklearn.preprocessing.StandardScaler, donc je vais le laisser comme mémo.
StandardScaler
fournit la fonction de standardisation de l'ensemble de données.
En normalisant, le rapport des quantités de caractéristiques peut être rendu uniforme.
Par exemple, en prenant la valeur de l'écart comme exemple, s'il existe un test avec un score parfait de 100 et un test avec un score parfait de 50 Même si le rapport et l'unité de points sont différents, vous pouvez évaluer les points sans être affecté par la normalisation.
La normalisation peut être obtenue en soustrayant la moyenne de chaque donnée de l'ensemble et en divisant par l'écart type.
z_i = \large{\frac{x_i- \mu}{\sigma}}
«μ» est la moyenne, «σ» est l'écart type et «i» est n'importe quel nombre naturel.
La moyenne est calculée en divisant la somme des ensembles par le nombre.
\mu = \frac{1}{n}\sum ^n_{i}x_i
L'écart type est calculé en divisant la variance par la racine carrée.
\sigma = \sqrt{s^2}
La variance est calculée en soustrayant la moyenne de chaque donnée de l'ensemble, en additionnant les carrés et en divisant par le nombre.
s^2 = \dfrac 1n\sum ^n_{i}(x_i - \mu)^2
Tout d'abord, j'aimerais l'implémenter moi-même sans utiliser de bibliothèque d'apprentissage automatique. Utilisez l'ensemble de données ʻiris` comme cible pour la normalisation.
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
print(X[:1]) # array([[5.1, 3.5, 1.4, 0.2]])
import math
def standardize(x):
"""
Parameters
----------
x:Attendez-vous à un tableau standardisé, un vecteur unidimensionnel.
Returns
-------
mean:moyenne
var:Distribué
std:écart-type
z:Tableau standardisé
"""
mean = None
var = None
std = None
z = None
#Calculer la moyenne, la somme des ensembles/Nombre de fonctionnalités
mean = sum(x) / len(x)
#Calculer la variance, faire la moyenne de l'ensemble-Divisez la somme des carrés des différences d'entités par le nombre
var = sum([(mean - x_i) ** 2 for x_i in x]) / len(x)
#Divisez la variance par la racine carrée
std = math.sqrt(var)
#Soustrayez la moyenne de chaque caractéristique et divisez-la par l'écart type
z = [x_i / std for x_i in [x_i - mean for x_i in x]]
return [mean, var, std, z]
#7 données depuis le début de la 1ère dimension de l'ensemble de données
sample_data = X[:, :1][:7]
print(sample_data.tolist()) # [[5.1], [4.9], [4.7], [4.6], [5.0], [5.4], [4.6]]
mean, var, std, z = standardize(sample_data)
print(mean) # [4.9]
print(var) # [0.07428571]
print(std) # 0.2725540575476989
print(*z) # [0.73379939] [3.25872389e-15] [-0.73379939] [-1.10069908] [0.36689969] [1.83449846] [-1.10069908]
Vous pouvez voir que la variable sample_data
a été traitée et convertie en virgule flottante.
Ensuite, essayez d'utiliser sklearn.preprocessing.StandardScaler
.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(sample_data)
print(scaler.mean_) # [4.9]
print(scaler.var_) # [0.07428571]
print(math.sqrt(scaler.var_)) # 0.2725540575476989
print(*scaler.transform(sample_data)) # [0.73379939] [3.25872389e-15] [-0.73379939] [-1.10069908] [0.36689969] [1.83449846] [-1.10069908]
#Les valeurs sont les mêmes
print(scaler.mean_ == mean) # [ True]
print(scaler.var_ == var) # [ True]
print(math.sqrt(scaler.var_) == std) # True
print(*(scaler.transform(sample_data) == z)) # [ True] [ True] [ True] [ True] [ True] [ True] [ True]
En utilisant "Standard Scaler" de cette manière, la standardisation peut être réalisée avec une petite quantité.
De plus, étant donné que les valeurs calculées lors de la normalisation telles que «mean_» et «var_» sont conservées, si «fit» est défini lors de l'entraînement du modèle d'apprentissage automatique, il sera utilisé comme données [^ 1] lors de l'inférence du modèle. D'un autre côté, processing_query = (np.array (query) --scaler.mean_) --np.sqrt (scaler.var_)
peut être défini, ce qui est très pratique.
[^ 1]: en supposant que le vecteur donné lors de l'inférence du modèle appartient à l'ensemble des jeux de données utilisés lors de l'apprentissage.