赞
踩
一、数据归一化的好处:
数据标准化和归一化的区别和联系:
在进行处理数据的时候,标准化的方法是比较多的,其中数据归一化是一种常见的数据的标准化,只不过标准化只是将数据进行规范到一个范围之内,对于数据的归一化来说,是将数据规范到0到1之间或者是-1到1之间。
在使用机器学习或者深度学习的模型的时候,数据预处理的阶段是十分重要的,我们在进行处理的时候,包括缺失值处理、异常值处理、重复值处理等很多方面,当然,数据标准化也是一个很重要的方面,数据标准化即将数据标准化到0到1之间,或者是-1到1之间。对于深度学习来说,这样可以使我们的数据和神经网络的激活函数处理之后的数据的取值的范围对应。
另外,关于归一化的好处,可以参考这个博客,讲的比较清楚:
http://blog.csdn.net/pipisorry/article/details/52247379
二、数据归一化的方法:
1、 最小最大值标准化 MinMaxScale,将数据规范到0-1之间
原理:
假设已知样本中的data为Xi,其中最小值和最大值分别为min和max,则在进行计算的时候,我们需要使用X_std =(Xi-min)/(max-min), 结果 = X_std* (max - min) + min来进行计算标准化之后的结果。
代码:
MinMaxScaler可以参考:
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler
官网上的例子:
>>> from sklearn.preprocessing import MinMaxScaler
>>>
>>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
>>> scaler = MinMaxScaler()
>>> print(scaler.fit(data))
MinMaxScaler(copy=True, feature_range=(0, 1))
>>> print(scaler.data_max_)
[ 1. 18.]
>>> print(scaler.transform(data))
[[ 0. 0. ]
[ 0.25 0.25]
[ 0.5 0.5 ]
[ 1. 1. ]]
>>> print(scaler.transform([[2, 2]]))
[[ 1.5 0. ]]
2、MaxAbsScaler(绝对值最大标准化) 将数据规范到-1到1之间
原理: 和上面的原理类似,但是改为除以最大值来进行计算。
works in a very similar fashion, but scales in a way that the training data lies within the range [-1, 1] by dividing through the largest maximum value in each feature. It is meant for data that is already centered at zero or sparse data.(来自官网,代码部分会给出链接)
代码:
链接:
http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling
>>> X_train = np.array([[ 1., -1., 2.],
... [ 2., 0., 0.],
... [ 0., 1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs # doctest +NORMALIZE_WHITESPACE^
array([[ 0.5, -1. , 1. ],
[ 1. , 0. , 0. ],
[ 0. , 1. , -0.5]])
>>> X_test = np.array([[ -3., -1., 4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. , 2. ]])
>>> max_abs_scaler.scale_
array([ 2., 1., 2.])
三、标准化
z-score 标准化 得到的结果是符合正态分布的
原理:
在进行计算的时候,我们是需要首先计算data的均值X_mean以及标准差X_std,然后需要进行计算
(Xi-X_mean)/X_std得到最终的计算的结果。
代码:
链接:
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
>>> from sklearn.preprocessing import StandardScaler
>>>
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> print(scaler.mean_)
[ 0.5 0.5]
>>> print(scaler.transform(data))
[[-1. -1.]
[-1. -1.]
[ 1. 1.]
[ 1. 1.]]
>>> print(scaler.transform([[2, 2]]))
[[ 3. 3.]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。