如何对NumPy数组进行标准化处理,使其数值范围正好在0和1之间
在这篇文章中,我们将介绍如何对NumPy数组进行规范化处理,使其数值正好在0和1之间。
对数据进行归一化处理,使数据在所有记录中以相同的比例出现。正常化后,数据中的最小值将被正常化为0,最大值被正常化为1。所有其他的值将在0到1之间。对于以不同尺度表示的数据,归一化是必要的。因为机器学习模型可能会受到数值较高的参数的过度影响。有不同的方法来归一化数据。其中一个标准程序是最小-最大值方法。
使用最小最大值进行归一化
在这里,数据的规范化可以通过用数据中的最小值减去数据,然后用结果除以给定数据中的最大值和最小值之差来完成。
示例
NumPy数组中的最大值和最小值可以通过min()和max()来确定。使用最小-最大值进行规范化的公式如下
归一化数据= ( 数据- 最小(数据))/( 最大(数据)- 最小(数据) )
# import necessary packages
import numpy as np
# create an array
data = np.array([[10, 20], [30, 40],
[5, 15], [0, 10]])
normalizedData = (data-np.min(data))/(np.max(data)-np.min(data))
# normalized data using min max value
print(normalizedData)
输出
[[0.25 0.5 ]
[0.75 1. ]
[0.125 0.375]
[0. 0.25 ]]
也有其他方法可以使数据正常化。它们是
- 使用sklearn MinMaxScaler进行规范化处理
- 使用numpy.linalg.norm进行规范化处理
- 使用数学公式进行归一化
使用sklearn MinMaxScaler进行规范化处理
在Python中,sklearn模块提供了一个叫做MinMaxScaler的对象,它使用最小值和最大值对给定的数据进行标准化。这里fit_tranform方法使用MinMaxScaler对象在0和1之间对数据进行缩放。
# import necessary packages
import numpy as np
from sklearn import preprocessing as p
# create an array
data = np.array([[10, 20], [30, 40],
[5, 15], [0, 10]])
min_max_scaler = p.MinMaxScaler()
normalizedData = min_max_scaler.fit_transform(data)
# normalized data using MinMaxScaler
print(normalizedData)
输出
[[0.33333333 0.33333333]
[1. 1. ]
[0.16666667 0.16666667]
[0. 0. ]]
使用numpy.linalg .norm进行归一化。
NumPy库提供了一个叫做norm的方法,它可以返回八个不同的矩阵规范中的一个,或者无数个向量规范中的一个。它完全取决于norm方法中的ord参数。默认情况下,规范考虑的是Frobenius规范。这里的数据是通过将给定的数据与norm方法返回的norm相除来实现规范化的。
# import necessary packages
import numpy as np
# create an array
data = np.array([[10, 20], [30, 40],
[5, 15], [0, 10]])
normalizedData = data/np.linalg.norm(data)
# normalized data using linalg.norm
print(normalizedData)
输出
[[0.17277369 0.34554737]
[0.51832106 0.69109474]
[0.08638684 0.25916053]
[0. 0.17277369]]
使用数学公式进行归一化
在这里,通过用给定数据的平方根之和对数据进行归一化处理。为了实现这一点,需要一个简单的NumPy库,它提供了平方根和总和的方法,有助于减少代码行。下面是使用数据的平方之和对数据进行标准化的代码
# import necessary packages
import numpy as np
# create an array
data = np.array([[10, 20], [30, 40],
[5, 15], [0, 10]])
normalizedData = data/np.sqrt(np.sum(data**2))
# normalized data using sum of squares
print(normalizedData)
输出
[[0.17277369 0.34554737]
[0.51832106 0.69109474]
[0.08638684 0.25916053]
[0. 0.17277369]]