数据预处理之归一化标准化正则化零均值化

更新时间:2023-07-18 03:34:23 阅读: 评论:0

肉丝米粉数据预处理之归⼀化标准化正则化零均值化
数据预处理之归⼀化/标准化/正则化/零均值化
⼀、标准化(Standardization)
将数据按期属性(按列进⾏)减去其均值,并处以其⽅差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,⽅差为1。实现时,有两种不同的⽅式:
使⽤sklearn.preprocessing.scale()函数,可以直接将给定数据进⾏标准化。
from sklearn import preprocessing
import numpy as np
X = np.array([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
X_scaled = preprocessing.scale(X)
print(X_scaled)
# 处理后数据的均值和⽅差
print(an(axis=0))
print(X_scaled.std(axis=0))
[[0.-1.224744871.33630621]
[1.224744870.-0.26726124]
[-1.224744871.22474487-1.06904497]]
[0.0.0.]
[1.1.1.]
使⽤sklearn.preprocessing.StandardScaler类,使⽤该类的好处在于可以保存训练集中的参数(均值、⽅差)直接使⽤其对象转换测试集数据。
from sklearn import preprocessing
import numpy as np
X = np.array([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
scaler = preprocessing.StandardScaler().fit(X)
print(scaler)
an_)
古诗竹里馆#print(scaler.std_)
# 可以直接使⽤训练集对测试集数据进⾏转换
ansform([[-1.,1.,0.]]))
StandardScaler(copy=True, with_mean=True, with_std=True)
[1.0.0.33333333]
[[-2.449489741.22474487-0.26726124]]
得到的结果分布和原分布是⼀样的。不⼀定是标准正态分布。
标准化的⽬的是统⼀规格。使⼤家都在同⼀个量纲上。不⾄于⼀个特征的量纲过⼤⽽导致整个模型⽆法收敛。
代码举例说明标准化后不⼀定是标准正态分布
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
import aborn as sns
original_data = ponential(size =1000)
normalizad_data =(original_data- an())/original_data.std()
fig, ax = plt.subplots(1,2)
sns.distplot(original_data, ax= ax[0])
ax[0].t_title("Original Data")
sns.distplot(normalizad_data, ax= ax[1])
ax[1].t_title("Normalizad Data ")
plt.show()
⼆、归⼀化(Normalization)
这种⽅法是将属性缩放到⼀个指定的最⼤和最⼩值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现。
使⽤这种⽅法的⽬的包括:
1、对于⽅差⾮常⼩的属性可以增强其稳定性。
设备销售合同2、维持稀疏矩阵中为0的条⽬。
from sklearn import preprocessing
import numpy as np
X_train = np.array([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)
# 将相同的缩放应⽤到测试集数据中
X_test = np.array([[-3.,-1.,4.]])
X_test_minmax = min_ansform(X_test)
print(X_test_minmax)
difficult# 缩放因⼦等属性
print(min_max_scaler.scale_)
print(min_max_scaler.min_)
[[0.50.1.]
[1.0.50.33333333]
[0.1.0.]]
[[-1.50.  1.66666667]]
[0.50.50.33333333]
[0.0.50.33333333]
当然,在构造类对象的时候也可以直接指定最⼤最⼩值的范围:feature_range=(min, max),此时应⽤的公式变为:
X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))
X_scaled=X_std/(max-min)+min
代码举例说明标准化后不⼀定是标准正态分布
import  numpy as  np
import  scipy .stats as  stats
import  matplotlib .pyplot as  plt
import  aborn as  sns
original_data = np .random .exponential (size =1000)
normalizad_data = (original_data - original_data .mean ())/original_data .std ()
fig , ax = plt .subplots (1, 2)
sns .distplot (original_data , ax = ax [0])
ax [0].t_title ("Original Data")
sns .distplot (normalizad_data , ax = ax [1])
ax [1].t_title ("Normalizad Data ")
plt .show
()
三,中⼼化/零均值化 (Zero-centered )
另外,还有⼀种处理叫做中⼼化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。
四、正则化
正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后⾯要使⽤如⼆次型(点积)或者其它核⽅法计算两个样本之间的相似性这个⽅法会很有⽤。
正则化主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。
L1 norm 是指对每个样本的每⼀个元素都除以该样本的L1范数.
L2 norm 是指对每个样本的每⼀个元素都除以该样本的L2范数.
p-范数的计算公式:该⽅法主要应⽤于⽂本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进⾏
点积,就可以得到这两个向量的余弦相似性。
1、可以使⽤alize()函数对指定数据进⾏转换:
from  sklearn import  preprocessing
import  numpy as  np
x = np .array ([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
x_normalized = preprocessing .normalize (x , norm ='l2', copy =True )
print (x_normalized )
给老师的一封信200字#y = np.sqrt(x)
y = np .square (x )
y = np .sum (y , axis =1)
y = np .sqrt (y )
y = y [:, np .newaxis ]
print (y )
print (x /y )
x =′x −μ
∣∣X ∣∣p =(∣x 1∣+p ∣x 2∣+p ...+∣xn ∣)p 1/p
[[0.40824829-0.408248290.81649658]
[1.0.0.]
党性
[0.0.70710678-0.70710678]]
[[2.44948974]
[2.]
[1.41421356]]痛定思痛
[[0.40824829-0.408248290.81649658]
[1.0.0.]
[0.0.70710678-0.70710678]]
2、可以使⽤processing.Normalizer()类实现对训练集和测试集的拟合和转换:
from sklearn import preprocessing
import numpy as np
x = np.array([[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]])
normalizer = preprocessing.Normalizer().fit(x)# fit does nothing
print(normalizer)
ansform(x))
ansform([[-1.,1.,0.]]))
Normalizer(copy=True, norm='l2')
[[0.40824829-0.408248290.81649658]
[1.0.0.]
[0.0.70710678-0.70710678]]
[[-0.707106780.707106780.]]
补充:
五, boxcox变换
对数据的分布的进⾏转换,使其符合某种分布(⽐如正态分布)的⼀种⾮线性特征变换。来⾃百度百科
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt对眼睛好的方法
import aborn as sns
original_data = ponential(size =1000)
normalizad_data = stats.boxcox(original_data)[0]
fig, ax = plt.subplots(1,2)
sns.distplot(original_data, ax= ax[0])
ax[0].t_title("Original Data")
sns.distplot(normalizad_data, ax= ax[1])
ax[1].t_title("Normalizad Data ")
plt.show()
六,⾮线性归⼀化
sigmoid变换(sigmoid函数)
softmax 变换(softmax 函数
)
七,标准化(Standardization)与归⼀化(Normalization)的联系和差异
1. 联系
Standardization和Normalization本质上都是对数据的线性变换,⼴义的说,你甚⾄可以认为他们是同⼀个母亲⽣下的双胞胎,为何⽽⾔,因为⼆者都是不会改变原始数据排列顺序的线性变换:
假设原始数据为X ,
令 and  很明显,数据给定后α 、 β就是常数),
则可见Normalization是⼀个线性变换,按α进⾏缩放,然后平移c个单位。
其实 中的β 和α 就像是Standardization中的μ和σ(数据给定后,μ和σ也是常数)。线性变换,必不改变原始的排位顺序。2. 差异
1. Normalization会严格的限定变换后数据的范围,⽐如按之前最⼤最⼩值处理的Normalization,它的范围严格在[0,1]之间; ⽽Standardization就没有严格的区间,变换后的数据没有范围,只是其均值是0,标准差为1。
2. 归⼀化(Normalization)对数据的缩放⽐例仅仅和极值有关,就是说⽐如100个数,你除去极⼤值和极⼩值其他数据都更换掉,缩放⽐例是不变的;反观,对于标准化(Standardization)⽽⾔,它的α= σ,β = μ,如果除去极⼤值和极⼩值其他数据都更换掉,那么均值和标准差⼤概率会改变,这时候,缩放⽐例⾃然也改变了。
3. 什么时候使⽤
如果你对处理后的数据范围有严格要求,那肯定是归⼀化,个⼈经验,标准化是ML中更通⽤的⼿段,如果你⽆从下⼿,可以直接使⽤标准化;如果数据不为稳定,存在极端的最⼤最⼩值,不要⽤归⼀化。在分类、聚类算法中,需要使⽤距离来度量相似性的时候、或者使⽤PCA 技术进⾏降维的时候,标准化表现更好;在不涉及距离度量、协⽅差计算的时候,可以使⽤归⼀化⽅法。
PS:PCA中标准化表现更好的原因可以参考(PCA标准化)
4. 是否所有情况都⽤Standardization 或Normalization
当原始数据不同维度特征的尺度(量纲)不⼀致时,需要标准化步骤对数据进⾏标准化或归⼀化处理,反之则不需要进⾏数据标准化。也不是所有的模型都需要做归⼀的,⽐如模型算法⾥⾯有没关于对距离的衡量,没有关于对变量间标准差的衡量。⽐如决策树,他采⽤算法⾥⾯没有涉及到任何和距离等
有关的,所以在做决策树模型时,通常是不需要将变量做标准化的;另外,概率模型不需要归⼀化,因为它们不关⼼变量的值,⽽是关⼼变量的分布和变量之间的条件概率。
其它
⾯试相关的。
标准化对逻辑回归有什么好处吗?
答案是有好处,进⾏标准化后,我们得出的参数值的⼤⼩可以反应出不同特征对样本label的贡献度,⽅便我们进⾏特征筛选。如果不做标准化,是不能这样来筛选特征的。
答到这⾥,有些厉害的⾯试官可能会继续问,做标准化有什么注意事项吗?
最⼤的注意事项就是先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引⼊到训练集中,这是⼀个⾮常容易犯的错误!α=X −max X min β=X min X ==αX −βi −αX i =αβ−αX i c
αX −β
i α=X −max X min

本文发布于:2023-07-18 03:34:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1085861.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   标准化   样本
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图