数据归一化处理
为什么需要归一化呢?通常我们获取训练模型来训练时,很多数据大小参差不齐,比如有的特征可能值200000000,而有的特征是0.00123,那我们在进行大数计算的时候是非常消耗时间的,并且计算结果也会异常的大。另外权重分配也会不均匀,一般大的数获取到的权重可能更大。所以也许这个大的数并不是决定这个数据结果的最关键因素,结果因为数值大而变为最重要因素,这样我们预测就会出现问题了,把所有的数据映射到同一尺度当中----归一化就相应而生
最值归一化 normalization
把所有数据映射到0和1之间。适用有明显边界的情况;当边界大小和普遍数据值大小差距过大则也不适用

(x - np.min(x)) / (np.max(x) - np.min(x))
均值方差归一化 standardization
把所有数据归一到均值为0反差为1的分布中 。适用于没有明显边界的情况;有可能存在极端数据值

def transform(self, X):
#计算每列的均值以及方差
mean = np.array([np.mean(X[:,i]) for i in range(X.shape[1])])
scale = np.array([np.std(X[:,i]) for i in range(X.shape[1])])
resX = np.empty(shape=X.shape, dtype=float)
for col in range(X.shape[1]):
#给每个数据计算出归一化后的值
resX[:,col] = (X[:,col] - mean[col]) / scale[col]
return resX
使用 scikit-learn中的StandardScaler
from sklearn.preprocessing import StandardScaler
standardScalar = StandardScaler()
standardScalar.fit(X_train)#该方法内会就算出平均值和方差
standardScalar.mean_#平均值
standardScalar.scale_#方差
X_train = standardScalar.transform(X_train)#进行数据归一化
网友评论