将不同量级的序列转化为同一量级,及常用的数据缩放的方法

联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种,每个月卖100个的商品就只有10,000种,每个月卖1000个的商品就只有1000种。(假定此时销售状况满足幂律分布:y = 1,000,000 / x)这种不均衡样本导致输入值的量级差异,商品A每天销售数百个,商品B每天销售数万个,两个商品共同训练时商品A的信息会被忽略掉,因为相对于B而言,A对神经网络参数的影响太低。但是,A时间序列中隐含的信息是有价值的,数百个销售额仍然能够反映季节性和趋势性的变化。
在这里插入图片描述
而对于这种样本量级差异的解决方法,需要对商品销售量进行缩放,对应到神经网络中,即输入到神经网络前除以v, 输出后乘以v。(需要确保输入值除以v,进入神经网络在每一个节点计算以及每次迭代后,输出后乘以v,与不进行乘除操作是等价的。)如何选择为每一个商品选择对应的v是一个挑战,实践发现使用商品的历史销量均值是一个不错的选择。
在这里插入图片描述
本文转载自:https://amazonaws-china.com/cn/blogs/china/time-series-prediction-with-deep/?nc1=b_rp

  • 小结:
    不同量级的序列除以其均值,均变为在1附近波动的序列,则变为同一量级;如果乘以其均值,则返回到原来的量级和波动性等统计量。

  • 常用数据缩放方法,在特征工程中经常会用到

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.StandardScaler().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

min_max_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)
plot(min_max_scaler_data, 'MinMaxScaler')

max_abs_scaler_data = preprocessing.MaxAbsScaler().fit_transform(original_data)
plot(max_abs_scaler_data, 'MaxAbsScaler')

normalizer_data = preprocessing.Normalizer().fit_transform(original_data)
plot(normalizer_data, 'Normalizer')

robust_scaler_data = preprocessing.RobustScaler().fit_transform(original_data)
plot(robust_scaler_data, 'RobustScaler')

举个例子来看看它们之间的区别,假设一个数据集包括「身高」和「体重」两个特征,它们都满足正态分布,画出原始数据图像为:
使用1.StandardScaler()缩放,结果为:

使用2.MinMaxScaler()缩放,结果为:

使用3.MaxAbsScaler()缩放,结果为:

使用4.Normalizer()缩放,结果为:

作者:thothsun
链接:https://www.zhihu.com/question/20467170/answer/839255695
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
https://www.zhihu.com/question/20467170

  • 其他(0,1)归一化的方法:
    在这里插入图片描述
    上图里f1(x)是普通的(0,1)归一化,每个元素xi之间的相对关系没有被改变;f2(x)又叫softmax,会将较大的元素所占比例继续放大,当x>0时会使各元素的区分度更明显;f3(x)会将较大的元素所占比例压缩,当x>0时会使各元素的区分度更小,差距更小。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值