我尝试手动实现一个归一化函数,而不是使用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是我手动定义的属性,而不是数据集的最大值和最小值。
提前感谢你。
回答:
为什么要使用循环?你可以直接使用
train_data['close'] = (train_data['close'] - 10)/(2000 - 10)
来利用向量化的numpy函数。当然,如果你更喜欢,你也可以将其放入一个函数中。
另外,如果你想将数据重新缩放到一个线性范围,你可以使用 http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html。这样做的好处是你可以保存它,然后以相同的方式重新缩放测试数据。