python矩阵标准化_归一化----标准化---正则化----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)

来源:http://www.icode9.com/content-1-35251.html

你可能感兴趣的:(python矩阵标准化)