数据预处理的一些知识
做研究时只要与数据分析相关就避免不了数据预处理。我们常见的预处理包括:标准化(规范化),归一化,零均值(化),白化,正则化……这些预处理的目的是什么呢?网上查的总是零零散散,很难搞清楚。因此我用此片博客来总结下。借鉴其他博客的内容,可能未一一注明还请谅解。
一,数据标准化
**目的:**为了消除量纲影响和变量自身数值大小的影响,方便统计处理(尤其是加权),故将数据标准化。
例如:我们对一个人提取特征时获得:年龄20岁,身高183cm,体重70kg。第二个人:年龄14岁,身高160cm,体重60kg。我们在计算两个人的差距的时候如果这样计算:20-14+183-160+70-60=39。是不是感觉有问题,39中一个身高占了23,一半以上(似乎自己加了权值,还挺大,我们需要自己设定权值)。这就是因为没有标准化,使得个别变量过大产生的问题。
方法:
1、Min-max 标准化
min-max标准化方法是对原始数据进行线性变换。将某一属性的一个原始值
x
x
x通过min-max标准化映射成在区间[0,1]中的值
x
′
x'
x′,其公式为:
x
′
=
(
x
−
m
i
n
)
/
(
m
a
x
−
m
i
n
)
x'=(x-min)/(max-min)
x′=(x−min)/(max−min)
2、z-score标准化
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值
x
x
x使用z-score标准化到
x
′
x'
x′。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
x
′
=
(
x
−
μ
)
/
σ
x'=(x-\mu)/\sigma
x′=(x−μ)/σ
3、其他标准化
**Decimal scaling小数定标标准化:**这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。将属性A的原始值
x
x
x使用decimal scaling标准化到
x
′
x'
x′的计算方法是:
x
′
=
x
/
(
10
∗
j
)
x'=x/(10*j)
x′=x/(10∗j) 其中,
j
j
j是满足条件的最小整数。例如假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用1000(即,j=3)除以每个值,这样,-986被规范化为-0.986。
对数Logistic模式: x ′ = 1 / ( 1 + e ( − x ) ) x'=1/(1+e^{(-x)}) x′=1/(1+e(−x))
注意,标准化会对原始数据做出改变,因此需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化。以上公式中所提高的极大值,极小值,方差等均是某一属性的,并非所有属性。标准化之后数据均值为0方差为1,数据可正可负。
二,归一化
**目的:**消除量纲和过大数据的影响,同时提高计算时的收敛速度。
知乎上有个解释:虽然同样作出了归一化,但归一化的目的却各不相同。对于不同的模型,不同的业务,归一化就会有不同的意义。
我本人总结如下:
1)无量纲化:
还是上面例子:年龄20岁,身高183cm,体重70kg。183cm在数值上比20岁大得多,但实际上这两个对于衡量一个人的特征同等重要,因此将各个属性进行归一化,纯数值对待。(注意和标准化时数据使用的目的不同)
2)避免数值问题:
太大的数会引发数值问题。
3)一些模型求解的需要:
例如梯度下降法。一种情况-----不归一化,容易产生陕谷,而学习率较大时,以之字形下降。学习率较小,则会产生直角形路线,速度较快。
方法:
归一化的映射函数并不固定。例如matlab中的mapminmax函数
y
=
(
y
m
a
x
−
y
m
i
n
)
∗
(
x
−
x
m
i
n
)
/
(
x
m
a
x
−
x
m
i
n
)
+
y
m
i
n
y=(ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin
y=(ymax−ymin)∗(x−xmin)/(xmax−xmin)+ymin
其中
y
m
a
x
,
y
m
i
n
ymax,ymin
ymax,ymin,为自己定义的,一般默认[-1,1],也可以自己修改。详细参考 http://www.ilovematlab.cn/thread-47224-1-1.html
以下方法为基础方法。
1、线性函数转换:
y
=
(
x
−
m
i
n
)
/
(
m
a
x
−
m
i
n
)
y=(x-min)/(max-min)
y=(x−min)/(max−min)
说明:x、y分别为转换前、后的值, m a x max max、 m i n min min分别为样本(与标准化对照下看区别)的最大值和最小值。
2、对数函数转换:
y
=
l
o
g
10
(
x
)
y=log_{10}(x)
y=log10(x)
说明:以10为底的对数函数转换。
例如:常用将数据归一到[0,1]
y
=
(
x
−
m
i
n
)
∗
(
1
−
0
)
(
m
a
x
−
m
i
n
)
y = \dfrac{(x-min)*(1-0)}{(max-min)}
y=(max−min)(x−min)∗(1−0)
区别标准化和归一化
标准化和归一化的处理目的不同。在做统计学时经常用到标准化(数据可正可负),在进行数据挖掘的时候经常用到归一化(所有数据在一个具体区间内),SVM和BP神经网络在输入数据前进行归一化可以显著提高准确率和速度。
应用归一化时所面临的问题:
(1)是对每一个样本进行进行归一化(按行归一化)还是对每一个维度进行归一化(按列归一化)?
(2)是将训练集和测试集分别归一化还是放在一起形成一个大矩阵一起进行归一化?
http://www.ilovematlab.cn/thread-63766-1-1.html
三,零均值
将数据转化为均值为零的数据。z-score方法也可以将作为零均值化的方法。例如:23 20 40 35 34均值为:30.4,方差:72.3;z-score标准化后的数据 -0.1024 -0.1438 0.1328 0.0636 0.0498,均值为
−
5.5511
∗
1
0
−
18
-5.5511*10^{-18}
−5.5511∗10−18,注意零均值一般操作在同一样本的不同属性之间,和z-score用于标准化用作统计学时的目的不同。
四,白化
白化:又称漂白或者球化;是对原始数据
x
x
x实现一种变换,变换成
x
′
x'
x′;使
x
′
x'
x′的协方差矩阵的为单位阵。斯坦福的一篇关于白化的教程提到:由于原始图像相邻像素值具有高度相关性,所以图像数据信息冗余,对于白化的作用的描述主要有两个方面:1,减少特征之间的相关性;2,特征具有相同的方差(协方差阵为1);一般用在深度学习中的图像预处理。
(参考:http://blog.csdn.net/whiteinblue/article/details/36171233)
步骤:
随机向量的“零均值化”和“空间解相关”是最常用的两个预处理过程,其中“零均值化”如上,而“空间解相关”如下矩阵处理:
若一零均值的随机向量
Z
=
[
z
1
,
z
2
,
.
.
.
.
z
m
]
Z=[z_1,z_2,....z_m]
Z=[z1,z2,....zm],满足
E
{
Z
∗
Z
′
}
=
I
E\{Z*Z'\}=I
E{Z∗Z′}=I,
I
I
I为单位矩阵,我们称这个向量为白色向量。白化的本质在于去相关,这个同PCA原理相似;在ICA(独立成分分析)中,对于为零均值的独立源信号当
i
!
=
j
i!=j
i!=j时,
S
(
t
)
=
[
s
1
(
t
)
,
s
2
(
t
)
.
.
.
.
.
.
s
n
(
t
)
]
S(t)=[s_1(t),s_2(t)......s_n(t)]
S(t)=[s1(t),s2(t)......sn(t)],有
E
{
S
i
∗
S
j
}
=
E
{
S
i
}
∗
E
{
S
j
}
=
0
E\{S_i*S_j\}=E\{S_i\}*E\{S_j\}=0
E{Si∗Sj}=E{Si}∗E{Sj}=0,且协方差矩阵是单位阵
c
o
v
(
S
)
=
I
cov(S)=I
cov(S)=I,(零均值时相关系数矩阵和协方差矩阵相等),因此,源信号是白色的。对观测信号
X
(
t
)
X(t)
X(t),我们应该寻找一个线性变换,使
X
(
t
)
X(t)
X(t)投影到新的子空间后变成白化向量,即:
Z
(
t
)
=
W
0
∗
X
(
t
)
Z(t)=W_0*X(t)
Z(t)=W0∗X(t)
其中
W
0
W_0
W0为白化矩阵,
Z
Z
Z为白化向量
利用主分量分析,我们通过计算样本向量得到一个变换:
W
0
=
Λ
−
1
/
2
∗
U
T
W_0=\Lambda^{-1/2}*U^T
W0=Λ−1/2∗UT
其中 Λ \Lambda Λ和 U U U分别代表协方差矩阵的特征向量矩阵和特征值矩阵。可以证明,线性变换 W 0 W_0 W0满足白化变换的要求。通过正交变换,可以保证 U ′ ∗ U = U ∗ U ′ = I U'*U=U*U'=I U′∗U=U∗U′=I。因此通过协方差阵:
再将 X ( t ) = A ∗ S ( t ) X(t)=A*S(t) X(t)=A∗S(t)式代入 Z ( t ) = W 0 ∗ X ( t ) Z(t)=W_0*X(t) Z(t)=W0∗X(t),在令 W 0 ∗ A = B W_0*A=B W0∗A=B;
则有:
Z
(
t
)
=
W
0
∗
A
∗
S
(
t
)
=
B
∗
S
(
t
)
Z(t)=W_0*A*S(t)=B*S(t)
Z(t)=W0∗A∗S(t)=B∗S(t)
由于线性变换连接的是两个白色随机矢量 Z ( t ) Z(t) Z(t)和 S ( t ) S(t) S(t),可以得出 B B B一定是一个正交变换。如果把上式中 Z ( t ) Z(t) Z(t)的看作新的观测信号,那么可以说,白化使原来的混合矩阵A简化成一个新的正交矩阵 B B B。
五,正则化:
**目的:**对最小化经验误差函数上加约束,解决了逆问题的不适定性,产生的解是存在,唯一,同时降低依赖于数据的噪声对不适定的影响,解就不会过拟合,而且如果先验(正则化)合适,则解就倾向于是符合真解(更不会过拟合了),即使训练集中彼此间不相关的样本数很少。
正则化在不同的领域又有着不同的含义,我们说的正则化一般就是数据过拟合。这个处理过程严格的来说并不是
**方法:**正则化过程在公式中主要以正则项的方式体现,不过正则项的一些知识本人实在难以以自己的理解写出来,不过知乎上有一些回答很棒,连接如下以供参考。
加入正则项的目的:https://www.zhihu.com/question/20924039
正则项的添加原则:http://blog.csdn.net/u012507022/article/details/53204142(最后面介绍)
统计学中的几种类型数据
统计学中,统计数据可分为四种类型(级别从低到高):定类数据/定序数据/定距数据/定比数据。定类数据仅标识不同的类别,没有次序关系(eg:汉族、藏族、回族);定序数据用数字表示某个有序状态所处的位置,可以比较大小(有次序),但是不能做四则预算(eg:年龄划分为老、中、青);定距数据是具有间距的变量,有单位,无零点,只能加减不能乘除(eg:智商120,比智商60要高60,但不能说前者智商是后者两倍,因为智商为0不是绝对零点,不代表没有智商);定比数据除了有定局数据的特性之外,还有一个绝对零点,所以能加减也能乘除(eg:60元比30元多30元,且前者是后者的两倍)。