如何用sklearn规范化二维数组?
How to normalize 2D array with sklearn?
给定一个二维数组,我想将其归一化到 0-1 范围内。
我知道这可以实现如下
import numpy as np
from sklearn.preprocessing import normalize,MinMaxScaler
np.random.seed(0)
t_feat=4
t_epoch=3
t_wind=2
result = [np.random.rand(t_epoch, t_feat) for _ in range(t_wind)]
wdw_epoch_feat=np.array(result)
matrix=wdw_epoch_feat[:,:,0]
xmax, xmin = matrix.max(), matrix.min()
x_norm = (matrix - xmin)/(xmax - xmin)
产生
[[0.55153917 0.42094786 0.98439526], [0.57160496 0. 1. ]]
但是,我无法使用 sklearn
的 MinMaxScaler
得到相同的结果
scaler = MinMaxScaler()
x_norm = scaler.fit_transform(matrix)
产生
[[0. 1. 0.], [1. 0. 1.]]
感谢任何想法
您正在对整个矩阵进行标准化。 MinMaxScaler 专为机器学习而设计,因此根据您的定义对每行或每列执行标准化。要获得与您相同的结果,您需要将二维数组转换为一维数组。我在下面显示这个并在第一列中得到相同的结果:
import numpy as np
from sklearn.preprocessing import normalize, MinMaxScaler
np.random.seed(0)
t_feat=4
t_epoch=3
t_wind=2
result = [np.random.rand(t_epoch, t_feat) for _ in range(t_wind)]
wdw_epoch_feat=np.array(result)
matrix=wdw_epoch_feat[:,:,0]
xmax, xmin = matrix.max(), matrix.min()
x_norm = (matrix - xmin)/(xmax - xmin)
matrix = np.array([matrix.flatten(), np.random.rand(len(matrix.flatten()))]).T
scaler = MinMaxScaler()
test = scaler.fit_transform(matrix)
print(test)
-------------------------------------------
[[0.55153917 0. ]
[0.42094786 0.63123194]
[0.98439526 0.03034732]
[0.57160496 1. ]
[0. 0.48835502]
[1. 0.35865137]]
当您使用 MinMaxScaler 进行机器学习时,您通常希望标准化每一列。
一个聪明的方法是将数据重塑为一维,应用变换并将其重塑回原始 -
import numpy as np
X = np.array([[-1, 2], [-0.5, 6]])
scaler = MinMaxScaler()
X_one_column = X.reshape([-1,1])
result_one_column = scaler.fit_transform(X_one_column)
result = result_one_column.reshape(X.shape)
print(result)
[[ 0. 0.42857143]
[ 0.07142857 1. ]]
给定一个二维数组,我想将其归一化到 0-1 范围内。
我知道这可以实现如下
import numpy as np
from sklearn.preprocessing import normalize,MinMaxScaler
np.random.seed(0)
t_feat=4
t_epoch=3
t_wind=2
result = [np.random.rand(t_epoch, t_feat) for _ in range(t_wind)]
wdw_epoch_feat=np.array(result)
matrix=wdw_epoch_feat[:,:,0]
xmax, xmin = matrix.max(), matrix.min()
x_norm = (matrix - xmin)/(xmax - xmin)
产生
[[0.55153917 0.42094786 0.98439526], [0.57160496 0. 1. ]]
但是,我无法使用 sklearn
MinMaxScaler
得到相同的结果
scaler = MinMaxScaler()
x_norm = scaler.fit_transform(matrix)
产生
[[0. 1. 0.], [1. 0. 1.]]
感谢任何想法
您正在对整个矩阵进行标准化。 MinMaxScaler 专为机器学习而设计,因此根据您的定义对每行或每列执行标准化。要获得与您相同的结果,您需要将二维数组转换为一维数组。我在下面显示这个并在第一列中得到相同的结果:
import numpy as np
from sklearn.preprocessing import normalize, MinMaxScaler
np.random.seed(0)
t_feat=4
t_epoch=3
t_wind=2
result = [np.random.rand(t_epoch, t_feat) for _ in range(t_wind)]
wdw_epoch_feat=np.array(result)
matrix=wdw_epoch_feat[:,:,0]
xmax, xmin = matrix.max(), matrix.min()
x_norm = (matrix - xmin)/(xmax - xmin)
matrix = np.array([matrix.flatten(), np.random.rand(len(matrix.flatten()))]).T
scaler = MinMaxScaler()
test = scaler.fit_transform(matrix)
print(test)
-------------------------------------------
[[0.55153917 0. ]
[0.42094786 0.63123194]
[0.98439526 0.03034732]
[0.57160496 1. ]
[0. 0.48835502]
[1. 0.35865137]]
当您使用 MinMaxScaler 进行机器学习时,您通常希望标准化每一列。
一个聪明的方法是将数据重塑为一维,应用变换并将其重塑回原始 -
import numpy as np
X = np.array([[-1, 2], [-0.5, 6]])
scaler = MinMaxScaler()
X_one_column = X.reshape([-1,1])
result_one_column = scaler.fit_transform(X_one_column)
result = result_one_column.reshape(X.shape)
print(result)
[[ 0. 0.42857143]
[ 0.07142857 1. ]]