Il existe de nombreuses possibilités de standardiser un vecteur approprié $ v $ dans la plage $ [0, 1] $ et $ [-1, 1] $. Créez maintenant $ v $ en tant que vecteur avec des nombres aléatoires comme celui-ci:
random_vector.py
import random
random.seed(1)
v = [random.random() for _ in range(10)]
Dans le code python ci-dessus, $ v $ est donné, par exemple:
Pour standardiser ce vecteur dans la plage $ [0,1], [-1,1] $, respectivement:
-Standardisé à $ [0,1] $
\frac{v - min(v)}{max(v) - min(v)}
-Standardisé à $ [-1,1] $
\frac{2v - (max(v) + min(v))}{max(v)-min(v)}
Cela normalisera linéairement $ v $.
Cependant, il y a des moments où vous voulez ** standardiser ** un vecteur à ** plage arbitraire ** [newmin, newmax].
Dans un tel cas, calculez d'abord deux constantes $ a et b $.
a = (newmax - newmin)/(max(v) - min(v)) \\
b = newmax - a*max(v)
À ce stade, il en va de même pour $ b = newmin --a * min (v) $.
Enfin, créez une fonction linéaire ** avec ** $ a $ inclinable et $ b $ comme section, et remplacez le vecteur d'origine $ v $ pour obtenir un nouveau vecteur normalisé linéairement.
normalized\ vector = a*v + b
C'est la forme générale de normalisation linéaire des vecteurs.
Voici le code qui standardise le vecteur $ v $ dans la plage [newmin, newmax] en Python et Matlab.
Python
normalize.py
def normalize(v,newmin,newmax):
a = (newmax - newmin)/(max(v) - min(v))
b = newmax - a*max(v)
return [a*i + b for i in v]
Matlab
normalize.m
function [normalized_vector] = normalize(v, newmin, newmax)
a = (newmax - newmin)/(max(v) - min(v));
b = newmax - max(v)*a;
normalized_vector = a*v + b;
Recommended Posts