数据预处理之数据的特征缩放——sklearn实现

Posted serity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据预处理之数据的特征缩放——sklearn实现相关的知识,希望对你有一定的参考价值。

目录

前言

在现实任务中,我们的数据集往往存在各种各样的问题,如果不对数据进行预处理,模型就无法得到有效的训练。

例如,对于神经网络而言,权重矩阵和阈值向量一般都是在 ( 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=x1Tx2TxnT

其中 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)=(n1aμ(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与特征工程

使用sklearn做单机特征工程

使用sklearn做单机特征工程

使用sklearn做单机特征工程

机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段