数据预处理之数据的特征缩放——sklearn实现
Posted serity
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据预处理之数据的特征缩放——sklearn实现相关的知识,希望对你有一定的参考价值。
目录
- 前言
- 一、标准化(StandardScaler)
- 二、归一化(MinMaxScaler)
- 三、正则化(Normalizer)
- 四、绝对值最大标准化(MaxAbsScaler)
- 五、二值化(Binarizer)
- 参考
前言
在现实任务中,我们的数据集往往存在各种各样的问题,如果不对数据进行预处理,模型就无法得到有效的训练。
例如,对于神经网络而言,权重矩阵和阈值向量一般都是在 ( 0 , 1 ) (0,1) (0,1) 范围内初始化。如果输入的特征向量的某些分量过大或过小,可能会导致神经网络无法学习到一些重要的特征,因此有必要对输入的向量进行特征缩放。
sklearn 中的 sklearn.preprocessing
中提供了数据预处理的相关函数,本文将主要围绕特征缩放来展开讲解。
一、标准化(StandardScaler)
设数据矩阵为
X = [ x 1 T x 2 T ⋮ x n T ] X= \\beginbmatrix \\boldsymbolx_1^\\mathrm T \\\\ \\boldsymbolx_2^\\mathrm T \\\\ \\vdots \\\\ \\boldsymbolx_n^\\mathrm T \\endbmatrix X=⎣⎢⎢⎢⎡x1Tx2T⋮xnT⎦⎥⎥⎥⎤
其中 x i = ( x i 1 , x i 2 , ⋯ , x i d ) T \\boldsymbolx_i=(x_i1, x_i2,\\cdots,x_id)^\\mathrm T xi=(xi1,xi2,⋯,xid)T 为特征向量。
在进行下一步之前,我们有必要先引入数据矩阵的均值和标准差。
我们知道,对于数据向量 a = ( a 1 , ⋯ , a n ) T \\boldsymbola=(a_1,\\cdots,a_n)^\\mathrm T a=(a1,⋯,an)T 而言(这里的向量可以理解成一组数据,之所以称之为向量,是为了方便后续的表述),其均值和标准差分别为:
μ ( a ) = a 1 + ⋯ + a n n , σ ( a ) = ( 1 n ∥ a − μ ( a ) ∥ 2 ) 1 / 2 , 其 中 μ ( a ) = ( μ ( a ) , ⋯ , μ ( a ) ⏟ n 个 ) T \\mu(\\boldsymbola)=\\fraca_1+\\cdots+a_nn,\\quad\\sigma(\\boldsymbol a)=\\left(\\frac1n \\Vert \\boldsymbola-\\boldsymbol\\mu(\\boldsymbola)\\Vert^2\\right)^1/2,\\quad 其中 \\;\\boldsymbol\\mu(\\boldsymbola)=(\\underbrace\\mu(\\boldsymbola),\\cdots, \\mu(\\boldsymbola)_n 个)^\\mathrm T μ(a)=na1+⋯+an,σ(a)=(n1∥a−μ(a)∥2)1/2,其中μ(a)=(n个 μ(a),⋯,μ(a))T
我们将 X X X 写成行向量的形式: X = ( a 1 , a 2 , ⋯ , a d ) X =(\\boldsymbola_1,\\boldsymbola_2,\\cdots,\\boldsymbola_d) X=(a1,a2,⋯,ad),其中每个 a i \\boldsymbola_i ai 均为列向量,因此
μ ( X ) = ( μ ( a 1 ) , μ ( a 2 ) , ⋯ , μ ( a d ) ) T σ ( X ) = ( σ ( a 1 ) , σ ( a 2 ) , ⋯ , σ ( a d ) ) T \\beginaligned \\mu(X)&=(\\mu(\\boldsymbola_1),\\mu(\\boldsymbola_2),\\cdots,\\mu(\\boldsymbola_d))^\\mathrm T \\\\ \\sigma(X)&=(\\sigma(\\boldsymbola_1),\\sigma(\\boldsymbola_2),\\cdots,\\sigma(\\boldsymbola_d))^\\mathrm T \\endaligned μ(X)σ(X)=(μ(a1),μ(a2),⋯,μ(ad))T=(σ(a1),σ(a2),⋯,σ(ad))T
设对 X X X 进行标准化后得到 Z Z Z,利用 numpy 的广播机制, Z Z Z 有如下形式
Z = ( z 1 , z 2 , ⋯ , z d ) , 其 中 z i = a i − μ ( a i ) σ ( a i ) , i = 1 , 2 , ⋯ , d Z=(\\boldsymbolz_1,\\boldsymbolz_2,\\cdots,\\boldsymbolz_d),\\quad 其中\\; \\boldsymbolz_i=\\frac\\boldsymbola_i-\\mu(\\boldsymbola_i)\\sigma(\\boldsymbola_i),\\;\\;i=1,2,\\cdots,d Z=(z1,z2,⋯,zd),其中zi=σ(ai)ai−μ(ai),i=1,2,⋯,d
当然 Z Z Z 可以更为简洁地表成
Z = X − μ ( X ) T σ ( X ) T Z=\\fracX-\\mu(X)^\\mathrm T\\sigma(X)^\\mathrm T Z=σ(X)TX−μ(X)T
查看 X X X 的均值,方差和标准差:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 数据矩阵
X = np.array([
[1, 3],
[0, 1]
])
# 创建一个scaler实例并将数据传入该实例中
scaler = StandardScaler().fit(X)
# 查看X的的均值,方差和标准差
print(scaler.mean_) # [0.5 2. ]
printsklearn工具-数据集变换
机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段