在统计学和机器学习中,我们经常将变量归一化,使其数值范围在0和1之间。
对变量进行归一化的最常见原因是当我们进行某种类型的多元分析时(即我们想了解几个预测变量和一个响应变量之间的关系),我们希望每个变量对分析的贡献是相等的。
当变量在不同尺度上被测量时,它们对分析的贡献往往不一样。例如,如果一个变量的值在0到100,000之间,而另一个变量的值在0到100之间,那么范围较大的变量在分析中会被赋予较大的权重。
通过对变量进行归一化处理,我们可以确保每个变量对分析的贡献相同。
为了将数值归一化为0到1之间,我们可以使用以下公式。
xnorm = (xi - xmin) / (xmax - xmin)
其中。
- xnorm:数据集中的第i个规范化值
- xi:数据集中的第i个值
- xmax。数据集中的最小值
- xmin: 数据集中的最大值
下面的例子展示了如何在Python中对一个或多个变量进行归一化。
例1:规范化NumPy数组
下面的代码展示了如何将一个NumPy数组中的所有数值归一化。
import numpy as np
#create NumPy array
data = np.array([[13, 16, 19, 22, 23, 38, 47, 56, 58, 63, 65, 70, 71]])
#normalize all values in array
data_norm = (data - data.min())/ (data.max() - data.min())
#view normalized values
data_norm
array([[0. , 0.05172414, 0.10344828, 0.15517241, 0.17241379,
0.43103448, 0.5862069 , 0.74137931, 0.77586207, 0.86206897,
0.89655172, 0.98275862, 1. ]])
现在归一化数组中的每个值都在0和1之间。
例2:规范化Pandas数据框架中的所有变量
下面的代码展示了如何将pandas数据框架中的所有变量归一化。
import pandas as pd
#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
#normalize values in every column
df_norm = (df-df.min())/ (df.max() - df.min())
#view normalized DataFrame
df_norm
points assists rebounds
0 0.764706 0.125 0.857143
1 0.000000 0.375 0.428571
2 0.176471 0.375 0.714286
3 0.117647 0.625 0.142857
4 0.411765 1.000 0.142857
5 0.647059 0.625 0.000000
6 0.764706 0.625 0.571429
7 1.000000 0.000 1.000000
现在每一列的数值都在0到1之间。
例3:规范化Pandas数据框架中的特定变量
下面的代码展示了如何对pandas DataFrame中的特定变量进行规范化处理。
import pandas as pd
#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})
define columns to normalize
x = df.iloc[:,0:2]
#normalize values in first two columns only
df.iloc[:,0:2] = (x-x.min())/ (x.max() - x.min())
#view normalized DataFrame
df
points assists rebounds
0 0.764706 0.125 11
1 0.000000 0.375 8
2 0.176471 0.375 10
3 0.117647 0.625 6
4 0.411765 1.000 6
5 0.647059 0.625 5
6 0.764706 0.625 9
7 1.000000 0.000 12
请注意,只有前两列的值被规范化了。
其他资源
下面的教程提供了关于数据规范化的额外信息: