归一化----标准化---正则化----Python的实现

1、(0,1)标准化:

from sklearn.preprocessing import MinMaxScaler

这是最简单也是最容易想到的方法,通过遍历feature vector里的每一个列数据,将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理:

def MaxMinNormalization(x,Max,Min):  
    x = (x - Min) / (Max - Min);  
    return x;  


'''
sklearn 包就是这么处理的,输入必须是二维数组,每个尺度是纵向分的,

举个例子X_train为(2,3)矩阵,Min为第一列的最小值,第二列的最小值,第三列的最小值
                            Max 为第一列的最大值,为第一列的最大值,第二列的最大值

下面的例子结果:temp
array([[0., 1., 0.],
       [1., 0., 1.]])
scaler.scale_   为   1/ (Max - Min)
array([0.5       , 0.5       , 0.33333333])
'''
import numpy as np
from sklearn.preprocessing import MinMaxScaler

X_train = np.array([[ 2., 4.,  2.], 
                    [4,   2,    5]
                   ])
scaler = MinMaxScaler(feature_range=(0, 1))
temp = scaler.fit_transform(X_train)
print(scaler.scale_)#  array([0.5       , 0.5       , 0.33333333])
scaler.min_      #     array([-1.        , -1.        , -0.66666667])

scaler.inverse_transform(X_train )  # 预测完成后你归一化 要保证和X_train 一个形状

还有一个函数fit_transform很像transform,这里就用fit_transform就可以,什么情况下都用fit_transform,就完事了

scaler.min_  目前代表什么还不知道呢。

scaler.inverse_transform(X_train )  # 预测完成后你归一化 要保证和X_train 一个形状

回归预测一般来说是(n,1)数据预测(n,1)的数据(有一些预测结果是(n,)的数据,需要变成(n,1)的数据,其实(n,)经验证也可以,

将预测结果传入inverse_transform  API 中,即可。

找大小的方法直接用np.max()np.min()就行了,尽量不要用python内建的max()和min(),除非你喜欢用List.可以试试np.argsort()np.argmax()

3、Sigmoid函数

Sigmoid函数是一个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中心对称,在(0, 0.5)附近有比较大的斜率而当数据趋向于正无穷和负无穷的时候,映射出来的值就会无限趋向于1和0.

个人非常喜欢的“归一化方法”,之所以打引号是因为我觉得Sigmoid函数在阈值分割上也有很不错的表现,根据公式的改变,就可以改变分割阈值,这里作为归一化方法,我们只考虑(0, 0.5)作为分割阈值的点的情况:

def sigmoid(X,useStatus):  #这里useStatus管理是否使用sigmoid的状态,方便调试使用
    if useStatus:  
        return 1.0 / (1 + np.exp(-float(X)))
    else:  
        return float(X)

猜你喜欢

转载自blog.csdn.net/weixin_42053726/article/details/82930571