标准化,正则化,归一化介绍

1. 标准化

标准化的公式:z-score

X = ( X − m e a n ) s t d X = \frac {(X-mean)} {std} X=std(Xmean)

计算时对 每个属性(每列) 分别进行。

每一列的 每一个数 都减去 该列的均值,并除以 该列的标准差
得到的结果在 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(ximean)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(14)2+(44)2+(74)2 =6
第一列第一个数为 1 − 4 6 = − 1.22474487 \frac {1-4} {\sqrt {6}}=-1.22474487 6 14=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=pxip

一般使用 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 14 1=0.26726124

3. 归一化

  • 将属性缩放到一个指定的范围
常见的min-max标准化也叫 离差标准化

X = X − m i n m a x − m i n X=\frac {X-min} {max-min} X=maxminXmin
针对某个属性即 一列 数据

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 7111=0
第一列第二个数 4 − 1 7 − 1 = 0.5 \frac {4-1} {7-1}=0.5 7141=0.5

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值