Numpy之数据归一化

由于不同的量纲可能会影响数据的观察结果

解决方案: 将所有的数据映射到同一尺度

1、最值归一化: 把所有的数据映射到0-1之间

适用于有明显边界的情况,受Outlier影响大

            x scale = x − x min ⁡ x max ⁡ − x min ⁡ x_{\text {scale}}=\frac{x-x_{\min }}{x_{\max }-x_{\min }} xscale=xmaxxminxxmin

2、均值方差归一化(Standardization):

把所有数据归一到均值为0方差为1的数据中

既适用于数据没有明显的边界,有可能存在极端数据值的情况。也适用于数据有明显边界的情况

            x s c a l e = x − x m e a n s x_{s c a l e}=\frac{x-x_{m e a n}}{s} xscale=sxxmean


代码示例:(jupyter notebook中编写)

1. 最值归一化

import numpy as np 
import matplotlib.pyplot as plt
x = np.random.randint(0, 100, size=100)  # 0到100的向量,总共100个

结果为:

array([29, 19, 31, 31, 9, 59, 14, 76, 69, 34, 30, 97, 13, 96, 0, 52,
86, 96, 40, 39, 98, 70, 76, 84, 82, 95, 52, 94, 84, 59, 89, 11, 29, 2,
99, 69, 44, 48, 48, 92, 54, 46, 1, 43, 16, 52, 51, 26, 83, 94, 50,74, 55, 30, 18, 44, 36, 62, 8, 56, 12, 44, 27, 26, 43, 88, 86, 58,12, 39, 62, 31, 77, 23, 78, 0, 58, 97, 58, 38, 83, 56, 70, 72, 84,54, 75, 2, 71, 1, 84, 77, 5, 23, 50, 3, 1, 58, 74, 47])

(x-np.min(x))/(np.max(x)-np.min(x))  # 最值归一化

结果为:

array([0.95918367, 0.59183673, 0.92857143, 0.85714286, 0.34693878, 0.97959184, 0.63265306, 0.05102041, 0.09183673, 0.47959184, 0.69387755, 0.30612245, 0.09183673, 0.85714286, 0.21428571, 0.23469388, 0.90816327, 0. , 0.73469388, 0.90816327, 0.36734694, 0.69387755, 0.2755102 , 0.45918367, 0.56122449, 0.21428571, 0.31632653, 0.85714286, 0.64285714, 0.26530612, 0.41836735, 0.90816327, 1. , 0.82653061, 0.16326531, 0.10204082, 0.6122449 , 0.87755102, 0.03061224, 0.2244898 , 0.48979592, 0.56122449, 0.33673469, 0.8877551 , 0.74489796, 0.01020408, 0.89795918, 0.89795918, 0.12244898, 0.41836735, 0.24489796, 0.18367347, 0.59183673, 0.51020408, 0.26530612, 0.59183673, 0.81632653, 0.07142857, 0.42857143, 0.8877551 , 0.04081633, 0.6122449 , 0.3877551 , 0.92857143, 0.70408163, 0.67346939, 0.20408163, 0.30612245, 0.87755102, 0.87755102, 0.60204082, 0.86734694, 0.19387755, 0.02040816, 0.39795918, 0.83673469, 0.02040816, 0.94897959, 0.23469388, 0.16326531, 0.26530612, 0.48979592, 0.20408163, 1. , 0.04081633, 0.42857143, 0.87755102, 0.20408163, 0.04081633, 0.21428571, 0.79591837, 0.17346939, 0.43877551, 0.21428571, 0.54081633, 0.83673469, 0.79591837, 0.17346939, 0.70408163, 0.79591837])

x = np.random.randint(0, 100, (50, 2)) # 50*2维度的矩阵,数值在0-100之间
x[:10, :]  # 取前10个元素

结果为:

array([[80, 95],
[ 1, 70],
[18, 70],
[31, 86],
[48, 57],
[84, 68],
[90, 29],
[44, 60],
[18, 39],
[42, 55]])

x = np.array(x, dtype=float)  # 转化成浮点数
x[:10, :]

结果为:

array([[80., 95.],
[ 1., 70.],
[18., 70.],
[31., 86.],
[48., 57.],
[84., 68.],
[90., 29.],
[44., 60.],
[18., 39.],
[42., 55.]])

x[:, 0] = (x[:, 0] - np.min(x[:, 0]))/(np.max(x[:, 0]) - np.min(x[:,
0])) # 对第0列(第一个特征)进行最值归一化 x[:, 1] = (x[:, 1] - np.min(x[:,
1]))/(np.max(x[:, 1]) - np.min(x[:, 1])) # 对第1列(第二个特征)进行最值归一化

x[:10, :]

结果为:

array([[0.84210526, 0.96938776],
[0.01052632, 0.71428571],
[0.18947368, 0.71428571],
[0.32631579, 0.87755102],
[0.50526316, 0.58163265],
[0.88421053, 0.69387755],
[0.94736842, 0.29591837],
[0.46315789, 0.6122449 ],
[0.18947368, 0.39795918],
[0.44210526, 0.56122449]])

plt.scatter(x[:, 0], x[:, 1])
plt.show()

在这里插入图片描述

np.mean(x[:, 0])  # 第0列对应的均值

结果为: 0.4785263157894737

np.std(x[:, 0])  # 第0列对应的方差

结果为: 0.3047560942923213

np.mean(x[:, 1])  # 第1列对应的均值

结果为: 0.5375510204081633

np.std(x[:, 1])  # 第1列对应的方差

结果为: 0.2753547558441912

2. 均值方差归一化 Standardization

x2 = np.random.randint(0, 100, (50, 2))  # 矩阵
x2 = np.array(x2, dtype=float)    # 转换成浮点型
x2[:, 0] = (x2[:, 0] - np.mean(x2[:, 0]))/ np.std(x2[:, 0])  # 第0列均值方差归一化
x2[:, 1] = (x2[:, 1] - np.mean(x2[:, 1]))/ np.std(x2[:, 1])  # 第1列均值方差归一化
plt.scatter(x2[:, 0], x[:, 1])
plt.show()

在这里插入图片描述

np.mean(x2[:, 0])  # 第0列对应的均值

结果为: -2.2204460492503132e-17

np.std(x2[:, 0])   # 第0列对应的方差

结果为:0.9999999999999998

np.mean(x2[:, 1])  # 第1列对应的均值

结果为:-7.549516567451065e-17

np.std(x2[:, 1])  # 第1列对应的方差

结果为:0.9999999999999999

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值