Normalize正则化的一些总结

一、关于标准化、归一化、Normalizer的总结

  • 标准化 StandardScalerList item

数据标准化 StandardScaler (基于特征矩阵的列,将属性值转换至服从正态分布) 标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下 常用与基于正态分布的算法,比如回归

  • 归一化 MinMaxScalerm

数据归一化 MinMaxScaler (区间缩放,基于最大最小值,将数据转换到0,1区间上的) 提升模型收敛速度,提升模型精度 常见用于神经网络

  • 正则化Normalizer

Normalizer (基于矩阵的行,将样本向量转换为单位向量) 其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准 常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合
首先求出样本的p范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都是1。
规范化(Normalization)是将不同变化范围的值映射到相同的固定范围,常见的是[0,1],也成为归一化
该方法主要应用于文本分类和聚类中
sklearn.preprocessing.Normalizer(norm=’l2’, copy=True)
norm:可以为l1、l2或max,默认为l2

若为l1时,每个样本(每行)的值除以每个样本(每行)各值的绝对值之和
若为l2时,变换后每个样本(每行)的各维特征的平方和为1
若为max时,样本各个特征值除以样本中特征值最大的值

需要说明是,这里的归一化不是对一列的特征进行操作,而是对一行的样本(记录)进行操作。归一化适用于这样的场景:需要使用点积,或者有的模型需要对样本的相似性进行度量。

preprocessing中的normalize方法提供了这样的操作,这个方法有个参数叫做norm,取值可以为 ‘l1’,’l2’,’max’,取不同的值,使用不同的方式进行归一化。

当取值为’l1‘的时候,运用l1范数进行归一化,计算的方法是 :
在这里插入图片描述
运用l2范数进行归一化的时候,计算方法是这样的:

在这里插入图片描述
preproceing 的Normalizer也提供了标准化的方法,可以进行fit和transform操作,而preprocessing.normalize()函数不可以

from sklearn import preprocessing
X = [[ 1., -1., 2.], [ 2., 0., 0.],[ 0., 1., -1.]]

#1、可以使用preprocessing.normalize()函数对指定数据进行转换:
 preprocessing.normalize(X, norm='l2')
 '''
 array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])
'''

 preprocessing.normalize(X, norm='l1')
 '''
 array([[ 0.25, -0.25,  0.5 ],
       [ 1.  ,  0.  ,  0.  ],
       [ 0.  ,  0.5 , -0.5 ]])
 '''
 preprocessing.normalize(X, norm='max')
 '''
 array([[ 0.5, -0.5,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -1. ]])
'''
 
 

#2、可以使用processing.Normalizer()类实现对训练集和测试集的拟合和转换:
normalizer = preprocessing.Normalizer().fit(X)#fit does nothing
normalizer  #Normalizer(copy=True, norm='l2') 
normalizer.transform(X)  
normalizer.transform([[-1.,  1., 0.]])   # array([[-0.70...,  0.70...,  0.  ...]])

norm不同算法:

from sklearn import preprocessing
data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
encoder = preprocessing.OneHotEncoder().fit(data)
encoder.transform(data).toarray()
#输出
array([[1., 0., 1., 0., 0., 0., 0., 0., 1.],
       [0., 1., 0., 1., 0., 1., 0., 0., 0.],
       [1., 0., 0., 0., 1., 0., 1., 0., 0.],
       [0., 1., 1., 0., 0., 0., 0., 1., 0.]])
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值