大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1. 归一化 (Normalization)
引入归一化,是由于在不同评价指标(特征指标)中,其量纲或是量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,可能导致某些指标被忽视,影响到数据分析的结果。
为了消除特征数据之间的量纲影响,需要进行归一化处理,以解决特征指标之间的可比性。原始数据经过归一化处理后,各指标处于同一数量级,以便进行综合对比评价。
1. 必要性
举例:
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
h_\theta (x) = \theta_1 x_1 + \theta_2 x_2
Cost function 等高线可能如下:
解决的方法是尝试将所有特征的尺度都尽量缩放到 0 到 1 之间。如图:
2. 场合
图像或是视频的数据值处于固定区间,往往对整个样本进行归一化。但是,有一些样本,比如多个特征序列组成的样本,要对每列进行归一化。还有一些是多传感器序列以及多通道信号,都要分别对每列进行归一化。
总结就是如果样本中具有不同量纲的指标,最好进行归一化。 在深度学习任务中,仍然需要进行归一化。
3. 归一化方法
3.1 min-max 标准化
又称线性归一化、离差归一化。
使用线性函数将原始数据线性化的方法转换到[0 1]的范围,归一化公式如下:
x_{norm} = \frac{x – x_{min}}{x_{max} – x_{min}}
使用场景概括:
在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用此方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
3.2 Z-score 标准化方法
零均值标准化,此归一化方式要求原始数据的分布可以近似为高斯分布
将原始数据集归一化为均值为0、方差1的数据集。
x^* = \frac{x – \mu}{\sigma}
其中,\mu、\sigma 分别为原始数据集的均值和方法。
使用场景概括:
在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,此法表现更好。
3.3 非线性归一化
常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。例如:
x^* = log_{10}(x)
2. 归一化方法 python 实现
Python实现上述归一化方法。
2.1 自实现
def minMaxNorm(dataSet_org):
”’min-max normalization”’
numSamples, dim = dataSet_org.shape
dataSet_norm = np.zeros((numSamples, dim), dtype=np.float32)
minData = np.min(dataSet_org, axis=0)
maxData = np.max(dataSet_org, axis=0)
for ii in range(dim):
dataSet_norm[:, ii] = (dataSet_org[:, ii] – minData[ii]) / (maxData[ii] – minData[ii])
return dataSet_norm
def zScoreNorm(dataSet_org):
”’Z score normalization”’
numSamples, dim = dataSet_org.shape
dataSet_norm = np.zeros((numSamples, dim), dtype=np.float32)
mu = np.average(dataSet_org, axis=0)
sigma = np.std(dataSet_org, axis=0)
for ii in range(dim):
dataSet_norm[:, ii] = (dataSet_org[:, ii] – mu[ii]) / sigma[ii]
return dataSet_norm
2.2 Scikit-learn 函数
2.2.1 max-min 归一化
MinMaxScaler缩放到 [0, 1]
>>> 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)
>>> X_train_minmax
array([[ 0.5 , 0. , 1. ],
[ 1. , 0.5 , 0.33333333],
[ 0. , 1. , 0. ]])
对测试数据实现和训练数据一致的缩放和移位操作:
>>> X_test = np.array([[ -3., -1., 4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5 , 0. , 1.66666667]])
检查缩放器(scaler)属性,来观察在训练集中学习到的转换操作的基本性质:
>>> min_max_scaler.scale_
array([ 0.5 , 0.5 , 0.33…])
>>> min_max_scaler.min_
array([ 0. , 0.5 , 0.33…])
2.2.2 零均值归一化
StandardScaler:
>>> X_train = np.array([[ 1., -1., 2.],
… [ 2., 0., 0.],
… [ 0., 1., -1.]])
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_
array([ 1. …, 0. …, 0.33…])
>>> scaler.scale_
array([ 0.81…, 0.81…, 1.24…])
>>> X_train_scaled = scaler.transform(X_train)
array([[ 0. …, -1.22…, 1.33…],
[ 1.22…, 0. …, -0.26…],
[-1.22…, 1.22…, -1.06…]])
# 查看标准化后的均值与方差
>>> np.mean(X_train_scaled[:, 2]) # 查看最后一列的均值
0.0
>>> np.std(X_train_scaled[:, 0]) # 查看第一列的方差
0.99999999999999989
在新的数据上实现和训练集相同缩放操作:
>>> X_test = [[-1., 1., 0.]]
>>> X_test_scaled = scaler.transform(X_test)
array([[-2.44…, 1.22…, -0.26…]])
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183196.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...