什么是特征缩放:数组
就是将全部数据映射到同一尺度。如:dom
某训练集 x_train 为:优化
(x_trian)spa
将其进行某种特征缩放以后,获得新的值:code
显然通过特征缩放以后,特征值变小了blog
为何要进行特征缩放呢?class
有些特征的值是有区间界限的,如年龄,体重。而有些特征的值是能够无限制增长,如计数值。import
因此特征与特征之间数值的差距会对模型产生不良影响。如:float
在该样本集中,因为量纲不一样,模型受 '次数'特征所主导。所以若是没有对数据进行预处理的话numpy
有可能带来误差,难以较好的反应特征之间的重要程度。其实还有利于优化的其余缘由
特征缩放的分类:
(不止这两种,但经常使用的为标准化)
1.先看一下 归一化(min-max 缩放)
经过归一化处理,将值映射到0-1之间的某个数值。
公式:
X(i)为某个特征值、X(min)为这个特征的全部特征值的最小值、X(max)为这个特征
的全部特征值的最大值
也就是将 (某个特征值减去特征最小值的差)除以 (特征最大值减去特征最小值的差)
从而获得这个特征值归一化以后的数值。
Python简单实现:
import numpy as np def min_max_scaler(X): '''归一化''' assert X.ndim == 2,'必须为二维数组' X = np.array(X,dtype=float) n_feature = X.shape[1] for n in range(n_feature): min_feature = np.min(X[:,n]) max_feature = np.max(X[:,n]) X[:, n] = (X[:,n] - min_feature) / (max_feature - min_feature) return X x = np.random.randint(0,100,(25,4)) print(min_max_scaler(x))
'''
[[0.89247312 0.11494253 0.17857143 0.29347826]
[0.09677419 0.74712644 0.10714286 0.63043478]
[0. 0.87356322 0.95238095 0.67391304]
.......
[0.2688172 0.4137931 0.33333333 0.89130435]
[0.11827957 0.7816092 0.55952381 0.15217391]
[1. 0.57471264 0.70238095 0.45652174]
[0.16129032 1. 0.75 0.23913043]]
'''
sklearn中对应API: from sklearn.preprocessing import MinMaxScaler