归一化处理

数据归一化处理

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

最值归一化 normalization

把所有数据映射到0和1之间。适用有明显边界的情况;当边界大小和普遍数据值大小差距过大则也不适用

image
(x - np.min(x)) / (np.max(x) - np.min(x))

均值方差归一化 standardization

把所有数据归一到均值为0反差为1的分布中 。适用于没有明显边界的情况;有可能存在极端数据值

image
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)#进行数据归一化

你可能感兴趣的:(归一化处理)