在面对多维特征问题的时候,要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛
特征缩放思想: 确保这些特征都处在一个相近的范围
特征缩放目的:将所有数字数据放在一个数量级上
直接求解的缺点
• x(1)特征对应权重会比x(2)对应的权重小很多,降低模型可解释性
• 梯度下降时,最终解被数值大的特征所主导,会影响模型精度与收敛速度
• 正则化时会不平等看待特征的重要程度(尚未标准化就进行L1/L2正则化是错误的)
常用的缩放方法:
1.规范化(归一化,Min-Max)特征缩放
通过对数据的每一个纬度值进行重新调节,使得最终的数据向量落在[0,1]区间内。
适用场景:这种归一化方法比较适用数值比较集中的情况,在不涉及距离度量,协方差计算,数据不符合正态分布的时候,可以使用该方法。
2.标准化(z-score标准化)特征缩放
处理后的数据符合标准正态分布。
适用场景:在分类,聚类算法中需要使用距离度量相似性的时候或者使用PCA(协方差分析)技术进行降维的时候,z-score标准化表现更好。
其中μ是平均值,σ是标准差
样本标准差公式(标准差是方差的算术平方根)
例:在处理自然图像时,我们获得的像素值在[0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1]中
这两种方法的适用场景为:
1.在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。
2.在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
例如多变量线性回归,多项式线性回归可使用特征缩放,其代码和单变量线性回归类似,只是训练集数据需要特征缩放
特征缩放Python代码实现:
# 标准特征缩放
mean = np.mean(train_x, 0) # 求平均值
sigma = np.std(train_x, 0, ddof=1) # 标准差,ddof=1
train_x = (train_x - mean)/sigma # 标准特征缩放
# 归一化特征缩放
min_x = np.min(train_x, 0) # 按列获取最小值
max_x = np.max(train_x, 0) # 按列获取最大值
train_x = (train_x - min_x)/(max_x - min_x) #归一化特征缩放
train_x表示训练集数据(特征),特征缩放放在数据拼接之前