Функция ручной нормализации занимает слишком много времени для выполнения - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь реализовать функцию нормализации вручную, а не использовать функцию scikit learn.Причина в том, что мне нужно определить максимальные и минимальные параметры вручную, а программа Scikit Learn не допускает этого изменения.

Я успешно реализовал это, чтобы нормализовать значения между 0 и 1. Но для запуска требуется очень много времени.

Вопрос: Есть ли ещеэффективный способ, которым я могу сделать это?Как сделать так, чтобы это выполнялось быстрее.

Ниже показан мой код:

scaled_train_data = scale(train_data)

def scale(data):
    for index, row in data.iterrows():
        X_std = (data.loc[index, "Close"] - 10) / (2000 - 10)
        data.loc[index, "Close"] = X_std

    return data

2000 и 10 - это атрибуты, которые я определил вручную, вместо того, чтобы брать минимум и максимумзначение набора данных.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Используйте матрицу numpy. Вы также можете установить минимальные и максимальные значения вручную.

import numpy as np
data = np.array(df)
_min = np.min(data, axis=0)
_max = np.max(data, axis=0)
normed_data = (data - _min) / (_max - _min)
0 голосов
/ 17 октября 2018

Почему цикл?Вы можете просто использовать

train_data['close'] = (train_data['close'] - 10)/(2000 - 10) 

, чтобы использовать векторизованные функции numpy.Конечно, вы также можете поместить это в функцию, если хотите.

В качестве альтернативы, если вы хотите изменить масштаб на линейный диапазон, вы можете использовать http://scikit -learn.org / stable /модули / генерироваться / sklearn.preprocessing.MinMaxScaler.html .Преимущество этого состоит в том, что вы можете сохранить его, а затем изменить масштаб тестовых данных таким же образом.

...