2016-11-20 2 views
0

Попытка нормализовать входные данные, которые матрица изображений в среднем равна 0 и диапазон -0,5 и 0,5 в питоне, нормализуя данные обучения, чтобы он имел среднее значение 0 и диапазон между -0,5 и 0,5

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

пытается использовать мин-макс масштабирование, но неправильный ответ я получаю близко к 0,1 для минимального и максимального

+0

Какой ваш вопрос? –

+1

Взгляните на это: http://scikit-learn.org/stable/modules/preprocessing.html#scaling-features-to-a-range – anshanno

+0

Моя интуиция заключается в том, что это невозможно, если распределение ваших данных не является симметричны. Если это так, то просто сначала снимите его, а затем масштабируйте. x '= x-mean (x) и x' '= -0,5 + (x' + 0,5)/(max (x ') - min (x')) – Tobias

ответ

1

Вы хотите масштабирования. Вот пример:

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 

из:

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

Это не имеет никакого значения. То, о чем спрашивает ОП, вообще невозможно. – Tobias

+0

@TobiasR Это правда, но его данные могут быть грешной волной. Я не видел ни одного образца. :) – anshanno

+0

Это кажется совершенно правильным, но мне, возможно, придется изменить форму моей матрицы (39209, 32, 32, 3), и я получаю «Найденный массив с тусклым 4».MinMaxScaler expected <= 2 " – kevbuntu

2

То, что вы хотите сделать, это особый случай «нормализации». нормализация будет масштабировать ваш фрейм данных -1 до 1. И тогда вы можете разделить все свои предметы на 2. Вы хотите масштабировать переменную от -0,5 до 0,5. Тогда что вы можете сделать, это:

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

Например, normalize([1,2,3,5, -5, 0,6])/2 даст:

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

Это не между '-0,5 и 0,5' – anshanno

+0

Действительно, вам просто нужно разделить каждый элемент на 2. Позвольте мне сделать это снова, я отредактирую, подождите мин. –

+0

Проблема заключается в форме моей матрицы (39209, 32, 32, 3) – kevbuntu

1

большое спасибо, оба ваши ответы правильны и привести меня в нужное место, но я должен был иметь дело с первой колонки так что разработаны лучше для мне

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 

Хотя среднее не точно, но круглый код утверждают() это, поэтому он становится равным нулю