1. matlab mapminmax归一化函数:
函数用法: [Xn,Xps]=mapminmax(X,min,max)
说明:(1)该函数将X按行归一化,即计算某元素的归一化值时,最大最小值时该元素所处行的最大最小值;因此若只有一组观测时,X需是1*N的行向量。
(2)min,max规定X的归一化范围,根据需要自行设置
(3)ps是结构变量记录了归一化时的最大值最小值等参数,后续可重复调用
调用方法:X1=mapminmax('apply', X_new,Xps);%利用先前的结构Xps进行相同的归一化
X2=mapminmax('reverse',Xn, Xps);%反归一化
例:
x=[1,-1,2;
2,0,0;
0,1,-1]
[x1,Xps]=mapminmax(x,0,1)
>>x1=0.6667 0 1
1 0 0
0.5 1 0
2.python sklearn.preprocessing.MinMaxScaler
函数用法:
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))#这里feature_range根据需要自行设置,默认(0,1)
X_train_minmax = min_max_scaler.fit_transform(X)
X=min_max_scaler.inverse_transform(X_train_minmax)#利用上面的归一化结构反归一化
说明:(1)这里是先定义一个结构min_max_scaler, 并规定这个结构的映射最大最小值
(2)sklearn中的这个归一化是对列进行归一化,公式:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) X_scaled = X_std * (max - min) + min
因此要得到matlab中的结果需要转至
(3)对于python中的axis=0 和axis=1的问题:
如df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注)
换句话说:
python归一化例子:
#归一化处理
from sklearn import preprocessing
import numpy as np
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_test = np.array([[ -3., -1., 4.]])
#标准化均值方差
X_scaled = preprocessing.scale(X_train)
#利用transform多次使用归一化结构scaler = preprocessing.StandardScaler().fit(X_train)scaler.transform(X_train)#最大值最小值归一化到指定范围min_max_scaler = preprocessing.MinMaxScaler()min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))X_train_minmax = min_max_scaler.fit_transform(X_train)X=min_max_scaler.inverse_transform(X_train_minmax)
结果:
In[22]:
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
X_train_minmax = min_max_scaler.fit_transform(X_train.T)
X_train_minmax
Out[23]:
array([[ 0.66666667, 1. , 0.5 ],
[ 0. , 0. , 1. ],
[ 1. , 0. , 0. ]])