2016-11-20 1 views
0

Essayant de normaliser les données d'entrée qu'une matrice d'images dans une moyenne de 0 et une plage de -0,5 et 0,5 en pythonnormalisation des données d'entraînement de sorte qu'il ait une moyenne de 0 et une plage entre -0,5 et 0,5

def normalise(image): 
    return 0.1 + (((image_data-0)*(0.9-0.1))/(255 - 0)) 

essayait d'utiliser l'échelle min-max, mais mauvaise réponse je reçois près de 0,1 pour min et max

+0

est pas exactement est que le tour de code assert() Quel est votre question? –

+1

Jetez un oeil à ceci: http://scikit-learn.org/stable/modules/preprocessing.html#scaling-features-to-a-range – anshanno

+0

Mon intuition est que ce n'est pas possible, sauf si la distribution de vos données est symétrique. Si c'est le cas, il suffit de le rabaisser d'abord, puis de le mettre à l'échelle. x '= x-moyenne (x) et x' '= -0,5 + (x' + 0,5)/(max (x ') - min (x')) – Tobias

Répondre

1

Vous voulez mise à l'échelle. Voici par exemple:

from sklearn import preprocessing 
import numpy as np 

data = np.array([70, -5, 5, 3, 2, 1]) 
scale = preprocessing.minmax_scale(data, feature_range=(-0.5, 0.5)) 
print scale 

sur:

[ 0.5  -0.5  -0.36666667 -0.39333333 -0.40666667 -0.42  ] 
+0

Cela ne signifie pas zéro. Ce que l'OP demande n'est pas possible en général. – Tobias

+0

@TobiasR Cela est vrai, mais ses données pourraient être une vague de péché. Je n'ai pas vu d'échantillon posté :) – anshanno

+0

Cela semble tout à fait raison, mais je peux avoir à remodeler ma matrice comme sa forme est (39209, 32, 32, 3) et je reçois "Tableau trouvé avec dim 4.MinMaxScaler attendu <= 2 " – kevbuntu

2

Qu'est-ce que vous voulez faire est un cas particulier de « normalisation ». la normalisation mettra à l'échelle vos données fram -1 à 1. Et puis vous pouvez diviser tous vos articles par 2. Vous voulez vous mettre à l'échelle variable de -0,5 à 0,5. Alors ce que vous pouvez faire est:

from sklearn.preprocessing import normalize 
c = normalize(yourData)/2 

Par exemple, normalize([1,2,3,5, -5, 0,6])/2 donnera:

[[ 0.3 0. -0.25 0.25 0.15 0.1 0.05]] 
+0

Ce n'est pas entre '-0.5 et 0.5' – anshanno

+0

En effet, vous avez juste besoin de diviser chaque élément par 2. Laissez-moi faire à nouveau, je vais modifier, attendez min –

+0

Le problème est la forme de ma matrice (39209, 32, 32, 3) – kevbuntu

1

thankyou, vos deux réponses sont correctes et conduis-moi au bon endroit, mais je devais faire face à la première colonne donc cela a fonctionné mieux pour moi

def normalize(X): 
max=0.5 
min=-0.5 
X_std = (X - X.min(axis=0))/(X.max(axis=0) - X.min(axis=0)) 
X_scaled = X_std * (max - min) + min 
return X_scaled 

Bien que la moyenne, donc il devient nul