1. 标准化
标准化的公式:z-score
X = ( X − m e a n ) s t d X = \frac {(X-mean)} {std} X=std(X−mean)
计算时对 每个属性(每列) 分别进行。
每一列的 每一个数 都减去 该列的均值,并除以 该列的标准差。
得到的结果在 0 附近并且方差为 1 。
方法实现sklearn.preprocessing.scale()
from sklearn import preprocessing
import numpy as np
X = np.linspace(1,9,9).reshape((3,3))
'''
X = [[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
'''
X = preprocessing.scale(X)
'''
X= [[-1.22474487 -1.22474487 -1.22474487]
[ 0. 0. 0. ]
[ 1.22474487 1.22474487 1.22474487]]
'''
推算
标准差公式为:该列每个数减去平均值的平方求和,除以数的个数后开方
s
t
d
=
∑
(
x
i
−
m
e
a
n
)
2
n
std = \sqrt {\frac{\sum(x_i-mean)^2} n}
std=n∑(xi−mean)2
第一列的均值为
(
1
+
4
+
7
)
3
=
4
\frac {(1+4+7)} 3=4
3(1+4+7)=4
第一列的第一个数标准差为
(
1
−
4
)
2
+
(
4
−
4
)
2
+
(
7
−
4
)
2
3
=
6
\sqrt \frac { {(1-4)^2+(4-4)^2+(7-4)^2}} 3 =\sqrt {6}
3(1−4)2+(4−4)2+(7−4)2=6
第一列第一个数为
1
−
4
6
=
−
1.22474487
\frac {1-4} {\sqrt {6}}=-1.22474487
61−4=−1.22474487
方法实现sklearn.preprocessing.StandardScaler()
sklearn里的封装好的算法使用前都要使用fit,为后续的API服务
from sklearn import preprocessing
import numpy as np
X = np.linspace(1,9,9).reshape((3,3))
'''
X = [[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
'''
scaler = preprocessing.StandardScaler().fit(X)
scaler.transform(X)
'''
X= [[-1.22474487 -1.22474487 -1.22474487]
[ 0. 0. 0. ]
[ 1.22474487 1.22474487 1.22474487]]
'''
fit() 简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
在fit() 的基础上,进行标准化,降维,归一化等操作。
2. 正则化
正则化:
- 将每个样本缩放到单位范数,对每个样本计算其 p-范数 ,然后样本中 每个 数除以该范数
p-范数计算公式: x p = ∑ x i p p x_p= \sqrt[p]{\sum x_i^p} xp=p∑xip
一般使用 l1-norm(p=1) 或 l2-norm(p=2)
计算时对一个样本即 一行 数据
方法实现:sklearn.preprocessing.Normalizer()
from sklearn import preprocessing
import numpy as np
X = np.linspace(1,9,9).reshape((3,3))
'''
X = [[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
'''
normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)
'''
X= [[0.26726124 0.53452248 0.80178373]
[0.45584231 0.56980288 0.68376346]
[0.50257071 0.57436653 0.64616234]]
'''
推算
- 默认是 l2-norm
第一行的 2-范数 1 2 + 2 2 + 3 2 = 14 \sqrt {1^2+2^2+3^2}=\sqrt {14} 12+22+32=14
第一行第一个数 1 14 = 0.26726124 \frac 1 {\sqrt {14}}=0.26726124 141=0.26726124
3. 归一化
- 将属性缩放到一个指定的范围
常见的min-max标准化也叫 离差标准化
X
=
X
−
m
i
n
m
a
x
−
m
i
n
X=\frac {X-min} {max-min}
X=max−minX−min
针对某个属性即 一列 数据
from sklearn import preprocessing
import numpy as np
X = np.linspace(1,9,9).reshape((3,3))
'''
X = [[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
'''
min_max_scaler = preprocessing.MinMaxScaler().fit(X)
min_max_scaler.transform(X)
'''
X= [[0. 0. 0. ]
[0.5 0.5 0.5]
[1. 1. 1. ]]
'''
推算
第一列第一个数
1
−
1
7
−
1
=
0
\frac {1-1} {7-1}=0
7−11−1=0
第一列第二个数
4
−
1
7
−
1
=
0.5
\frac {4-1} {7-1}=0.5
7−14−1=0.5