R + python︱数据规范化、归一化、Z-Score
2017-08-19 10:37
309 查看
笔者寄语:规范化主要是因为数据受着单位的影响较大,需要进行量纲化。大致有:最小-最大规范化、均值标准化、小数定标规范化
数据中心化和标准化的意义是一样的,为了消除量纲对数据结构的影响。
1、最小-最大规范化——标准化
也叫离差标准化,是对原始数据的线性变换,将数据映射到[0,1]之间,与功效系数法相同。
标准化 x-min(x) / max(x)-min(x)
[plain] view
plain copy
print?
#最小-最大规范化
b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))
b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))
b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))
b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))
data_scatter=cbind(b1,b2,b3,b4)
2、均值标准化法——正态化
正态标准差标准化、零均值规范化等方法,经过处理的数据均值为0,标准差为1。公式为:
x*=(x-均值)/标准差
因为均值受离群值影响较大,也可以将均值替换成变量的中位数。
[plain] view
plain copy
print?
#零-均值规范化
data_zscore=scale(data)
3、小数定标规范化
移动变量的小数点位置来将变量映射到[-1,1]
[plain] view
plain copy
print?
#小数定标规范化
i1=ceiling(log(max(abs(data[,1])),10))#小数定标的指数
c1=data[,1]/10^i1
i2=ceiling(log(max(abs(data[,2])),10))
c2=data[,2]/10^i2
i3=ceiling(log(max(abs(data[,3])),10))
c3=data[,3]/10^i3
i4=ceiling(log(max(abs(data[,4])),10))
c4=data[,4]/10^i4
data_dot=cbind(c1,c2,c3,c4)
#打印结果
options(digits = 4)#控制输出结果的有效位数
data_dot
代码中,log(x,10)是ln(x)一样;
options可以控制保留四位数小数
[html] view
plain copy
print?
preds=norm.data*sd(data)+mean(data)#还原标准化的数据
scale方法中的两个参数center和scale的解释:
1.center和scale默认为真,即T或者TRUE
2.center为真表示数据中心化
3.scale为真表示数据标准化
中心化=源数据-均值
标准化==中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。
例如有数据集1, 2, 3, 6, 3,其均值为3,其标准差为1.87,那么标准化之后的数据集为(1-3)/1.87,(2-3)/1.87,(3-3)/1.87,(6-3)/1.87,(3-3)/1.87,即:-1.069,-0.535,0,1.604,0
那么以下几种情况是啥意思:
[plain] view
plain copy
print?
scale(x)=scale(x,center=T,scale=T),默认设置
scale(x,center=F,scale=T)代表不进行中心化,直接做标准化;
scale(x,center=T,scale=F)代表中心化
scale(x,center=F,scale=F)代表什么不做,是原来的数据列。
那么与apply族联用就是apply(x,1,scale)
6、Python中的Z-Score
主要借助sklearn中的preprocessing:
[python] view
plain copy
print?
from sklearn import preprocessing
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。
将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
实现时,有两种不同的方式:
使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。
[python] view
plain copy
print?
>> from sklearn import preprocessing
>>> import numpy as np
>>> X = np.array([[ 1., -1., 2.],
... [ 2., 0., 0.],
... [ 0., 1., -1.]])
>>> X_scaled = preprocessing.scale(X)
>>> X_scaled
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
>>>#处理后数据的均值和方差
>>> X_scaled.mean(axis=0)
array([ 0., 0., 0.])
>>> X_scaled.std(axis=0)
array([ 1., 1., 1.])
其中axis = 0是按列(纵向)进行平均,axis = 1代表横向求平均。
同时求X的Z-score还有另外一种表达方式,是使用apply:
[python] view
plain copy
print?
pd.DataFram(X).apply(preprocessing.scale,axis = 0)
使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
[html] view
plain copy
print?
>>> scaler = preprocessing.StandardScaler().fit(X)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_
array([ 1. ..., 0. ..., 0.33...])
>>> scaler.std_
array([ 0.81..., 0.81..., 1.24...])
>>> scaler.transform(X)
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
>>>#可以直接使用训练集对测试集数据进行转换
>>> scaler.transform([[-1., 1., 0.]])
array([[-2.44..., 1.22..., -0.26...]])
使用这个非常好的一点就是,在机器学习的时候,当训练好模型,当要predict预测新的数据集的时候,就可以沿用训练集的均值、方差,比较适合部署模型在新的数据集上。
同时,这里的transform(X)相当于之前的,也就纵向进行平均,是符合要求的!
[python] view
plain copy
print?
pd.DataFram(X).apply(preprocessing.scale,axis = 0)
数据中心化和标准化的意义是一样的,为了消除量纲对数据结构的影响。
1、最小-最大规范化——标准化
也叫离差标准化,是对原始数据的线性变换,将数据映射到[0,1]之间,与功效系数法相同。
标准化 x-min(x) / max(x)-min(x)
[plain] view
plain copy
print?
#最小-最大规范化
b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))
b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))
b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))
b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))
data_scatter=cbind(b1,b2,b3,b4)
2、均值标准化法——正态化
正态标准差标准化、零均值规范化等方法,经过处理的数据均值为0,标准差为1。公式为:
x*=(x-均值)/标准差
因为均值受离群值影响较大,也可以将均值替换成变量的中位数。
[plain] view
plain copy
print?
#零-均值规范化
data_zscore=scale(data)
3、小数定标规范化
移动变量的小数点位置来将变量映射到[-1,1]
[plain] view
plain copy
print?
#小数定标规范化
i1=ceiling(log(max(abs(data[,1])),10))#小数定标的指数
c1=data[,1]/10^i1
i2=ceiling(log(max(abs(data[,2])),10))
c2=data[,2]/10^i2
i3=ceiling(log(max(abs(data[,3])),10))
c3=data[,3]/10^i3
i4=ceiling(log(max(abs(data[,4])),10))
c4=data[,4]/10^i4
data_dot=cbind(c1,c2,c3,c4)
#打印结果
options(digits = 4)#控制输出结果的有效位数
data_dot
代码中,log(x,10)是ln(x)一样;
options可以控制保留四位数小数
4、还原标准化的方法
[html] viewplain copy
print?
preds=norm.data*sd(data)+mean(data)#还原标准化的数据
5、R语言中的scale函数
scale方法中的两个参数center和scale的解释:1.center和scale默认为真,即T或者TRUE
2.center为真表示数据中心化
3.scale为真表示数据标准化
中心化=源数据-均值
标准化==中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。
例如有数据集1, 2, 3, 6, 3,其均值为3,其标准差为1.87,那么标准化之后的数据集为(1-3)/1.87,(2-3)/1.87,(3-3)/1.87,(6-3)/1.87,(3-3)/1.87,即:-1.069,-0.535,0,1.604,0
那么以下几种情况是啥意思:
[plain] view
plain copy
print?
scale(x)=scale(x,center=T,scale=T),默认设置
scale(x,center=F,scale=T)代表不进行中心化,直接做标准化;
scale(x,center=T,scale=F)代表中心化
scale(x,center=F,scale=F)代表什么不做,是原来的数据列。
那么与apply族联用就是apply(x,1,scale)
6、Python中的Z-Score
主要借助sklearn中的preprocessing:
[python] view
plain copy
print?
from sklearn import preprocessing
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。
将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
实现时,有两种不同的方式:
使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。
[python] view
plain copy
print?
>> from sklearn import preprocessing
>>> import numpy as np
>>> X = np.array([[ 1., -1., 2.],
... [ 2., 0., 0.],
... [ 0., 1., -1.]])
>>> X_scaled = preprocessing.scale(X)
>>> X_scaled
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
>>>#处理后数据的均值和方差
>>> X_scaled.mean(axis=0)
array([ 0., 0., 0.])
>>> X_scaled.std(axis=0)
array([ 1., 1., 1.])
其中axis = 0是按列(纵向)进行平均,axis = 1代表横向求平均。
同时求X的Z-score还有另外一种表达方式,是使用apply:
[python] view
plain copy
print?
pd.DataFram(X).apply(preprocessing.scale,axis = 0)
使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
[html] view
plain copy
print?
>>> scaler = preprocessing.StandardScaler().fit(X)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_
array([ 1. ..., 0. ..., 0.33...])
>>> scaler.std_
array([ 0.81..., 0.81..., 1.24...])
>>> scaler.transform(X)
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
>>>#可以直接使用训练集对测试集数据进行转换
>>> scaler.transform([[-1., 1., 0.]])
array([[-2.44..., 1.22..., -0.26...]])
使用这个非常好的一点就是,在机器学习的时候,当训练好模型,当要predict预测新的数据集的时候,就可以沿用训练集的均值、方差,比较适合部署模型在新的数据集上。
同时,这里的transform(X)相当于之前的,也就纵向进行平均,是符合要求的!
[python] view
plain copy
print?
pd.DataFram(X).apply(preprocessing.scale,axis = 0)
相关文章推荐
- R + python︱数据规范化、归一化、Z-Score
- 1. 数据预处理-数据归一化和数据规范化
- 基于数据归一化以及Python实现方式
- 数据规范化(归一化)方法
- 数据预处理-归一化与z-score标准化
- 图像数据集制作——窗位窗宽+归一化处理【python版本】
- 【机器学习】【数据预处理】数据的规范化,归一化,标准化,正则化
- 数据预处理-归一化与z-score标准化
- python机器学习库sklearn——数据归一化、标准化、特征选择、逻辑回归、贝叶斯分类器、KNN模型、支持向量机、参数优化
- 数据的规范化,归一化,标准化,正则化
- 数据归一化与z-score标准化
- 归一化处理数据 python
- 数据归一化以及Python实现方式
- 利用python将所有时序NDVI影像转换为DataFrame数据并进行归一化
- 数据归一化matlab及python 实现
- Python数据预处理(包括处理数据离散值和归一化,分开处理训练集与测试集)
- (Python实现)数据PCA降维白化和L2归一化-深度学习实践常用数据预处理
- Python数据预处理—归一化,标准化,正则化
- 数据预处理练习 等频分箱、one_hot(独热编码)、数据归一化 #python
- 基于Python的Grib数据可视化