Написание функции Min-Max Scaler - PullRequest
0 голосов
/ 01 мая 2019

Я хочу написать функцию для вычисления Min-Max масштаба в Python, которая возвращает список.

x = [1, 2, 3, 4]

def normalize(x):

    for i in range(len(x)):
        return [(x[i] - min(x)) / (max(x) - min(x))]

Затем вызывается функция:

normalize(x):

Результаты:

[0.0]

Я ожидал, что результат будет:

[0.00, 0.33, 0.66, 1.00] 

Ответы [ 3 ]

3 голосов
/ 01 мая 2019

На основе решения @ shehan:

x = [1, 2, 3, 4]

def normalize(x):
    return [round((i - min(x)) / (max(x) - min(x)), 2) for i in x]

print(normalize(x))

дает вам именно то, что вы хотели.Результат округляется в отличие от других решений (поскольку это то, что вы хотели).

результат:

[0.0, 0.33, 0.67, 1.0]

Для варианта ответа в цикле, чтобы оператор мог понять:

x = [1, 2, 3, 4]

def normalize(x):
    # A list to store all calculated values
    a = []
    for i in range(len(x)):
        a.append([(x[i] - min(x)) / (max(x) - min(x))])
        # Notice I didn't return here
    # Return the list here, outside the loop
    return a

print(normalize(x))
1 голос
/ 01 мая 2019

Вы делите на max(x), затем вычитаете min(x):

Вы также пересчитываете max(x) и min(x) несколько раз.Вместо этого вы можете сделать что-то вроде этого:

x = [1, 2, 3, 4]

def normalize(x):
    maxx, minx = max(x), min(x)
    max_minus_min = maxx - minx
    return [(elt - minx) / max_minus_min for elt in x]

Вы можете округлить результаты, как рекомендует @ruturaj, если вы хотите сохранить точность:

return [round((elt - minx) / max_minus_min, 2) for elt in x]
1 голос
/ 01 мая 2019

Попробуйте это.

def normalize(x):
    return [(x[i] - min(x)) / (max(x) - min(x)) for i in range(len(x))]
...