如何在Python中对数据进行标准化处理

397 阅读2分钟

在统计学和机器学习中,我们经常变量归一化,使其数值范围在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

请注意,只有前两列的值被规范化了。

其他资源

下面的教程提供了关于数据规范化的额外信息:

如何将0和1之间的数据归一化
如何将0和100之间的数据归一化
标准化与归一化。有什么区别?