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)