Je suis en train de se tenir/norme certaines données:normalisation et de standardisation des données 2d
Les données se compose de deux lectures de température, l'un d'un capteur et l'autre d'un thermomètre à mercure.
Comme si:
SENSOR THERM
32.69 31.25
32.00 30.25
31.94 30.50
31.87 30.50
31.44 29.50
...
Je veux créer un modèle de régression et d'être stand/normalisé pour que j'ai besoin des données
Ce que je fais actuellement est:
- trouver la moyenne des données de capteur
- trouver la moyenne des données de la température
- calculer l'écart type des données de capteurs
- calculer l'écart type des données Therm
- créer une nouvelle liste, et ajoutez les valeurs normalisées que
est ici où les choses se compliquent. Après la création de cette nouvelle liste, je souhaite normaliser les valeurs de 0 à 1, ce qui me permet d'obtenir les valeurs les plus basses et les plus élevées à partir des données normalisées (Capteur et Therm ensemble). Mais cela semble un peu étrange.
Voici le code à ce jour:
data = [[32.69, 31.25],
[32.00, 30.25],
[31.94, 30.50],
[31.87, 30.50],
[31.44, 29.50]]
# take mean from data
mean_x = sum(x for x,y in data)/len(data)
mean_y = sum(y for x,y in data)/len(data)
# compute standard deviation
std_d_x = (sum((x-mean_x)**2 for x,y in data)/len(data))**(1/2.0)
std_d_y = (sum((y-mean_y)**2 for x,y in data)/len(data))**(1/2.0)
stand_data = []
# get standardized values
for x, y in data:
stand_x = (x - mean_x)/std_d_x
stand_y = (y - mean_y)/std_d_y
stand_data.append((stand_x, stand_y))
# find min/max value from the whole data
min_v = min(min([x,y]) for x, y in stand_data)
max_v = max(max([x,y]) for x, y in stand_data)
for i, (stand_x, stand_y) in enumerate(stand_data):
# normalize it
norm_x = (stand_x - min_v)/(max_v - min_v)
norm_y = (stand_y - min_v)/(max_v - min_v)
# display
raw = "%.2f, %.2f"%(data[i][0], data[i][1])
stand = "%.2f, %.2f"%(stand_x, stand_y)
norm = "%.2f, %.2f"%(norm_x, norm_y)
print("{raw} -> {stand} -> {norm}".format(**locals()))
Voici le résultat:
Input data -> standardized -> normalized
32.69, 31.25 -> 1.74, 1.51 -> 1.00, 0.93
32.00, 30.25 -> 0.03, -0.27 -> 0.49, 0.40
31.94, 30.50 -> -0.12, 0.18 -> 0.44, 0.53
31.87, 30.50 -> -0.29, 0.18 -> 0.39, 0.53
31.44, 29.50 -> -1.36, -1.60 -> 0.07, 0.00
Ma question est: Comment dois-je normaliser ces données? Dois-je prendre la moyenne/deviantion de l'ensemble des données (Capteur et Therm ensemble)? Ou devrais-je les prendre séparément? Et à propos de la normalisation, devrais-je les faire comme je le fais, ou le faire séparément (ce qui semble donner des valeurs bizarres)?
Les choses sont, quand je normalise si je les fais séparément, la valeur min/max pour les données de capteur sera 0,1 et min La valeur/max de Therm Data sera également égale à 0,1, ce qui est «incorrect?» car ils ne sont pas mappés au même intervalle. Ex: S: 32.69 -> 1, T: 31.25 -> 1 et S: 31.44 -> 0, T: 29.50 -> 0 –
Je ne pense pas que ce soit faux. Étant donné que les valeurs d'origine avaient une plage/étendue différente, elles vont correspondre à différentes valeurs normalisées. – pmuntima