机器学习 数据预处理之归一化
程序员文章站
2022-06-02 17:07:18
...
1、什么是归一化
为了用占比表示特征,每个样本的特征值除以该样本的特征值绝对值之和(对行《样本》操作),使得每个样本的特征值绝对值之和为1 (这里的一般可以在某个东西的增长率或者占比的时候使用)
例如:
python java C PHP
2017 30 50 40 20
2018 20 30 20 10
用1范数归一化后
python java C PHP
2017 30 /140 50/140 40/140 20/140
2018 20/80 30 /80 20/80 10 /80
2、作用
使得预处理的数据被限定在一定的范围内(比如【0,1】或者[-1,1]),从而消除奇异样本数据导致的不良影响(奇异样本就是指相对于其他输入样本特别大或特别小的样本矢量(即特征向量)) 加快了梯度下降求最优解的速度 归一化有可能提高精度(如KNN)
详细参考讲解:https://blog.csdn.net/zenghaitao0128/article/details/78361038
3、原理示例代码
import numpy as np
import sklearn.preprocessing as sp
sample = np.array([
[30, 50, 40, -20],
[20, 30, 20, -10]
],dtype="float")
s = sample.copy()
# l1范数来归一化数据
for row in s:
row_abs_sum = abs(row).sum()
row /= row_abs_sum
print(s)
for row in sample:
row_sqrt_sum = pow(pow(row, 2).sum(), 0.5)
row /=row_sqrt_sum
print(sample)
4、库包调用代码
import numpy as np
import sklearn.preprocessing as sp
sample = np.array([
[30, 50, 40, -20],
[20, 30, 20, -10]
],dtype="float")
s = sample.copy()
new_s = sp.normalize(s, norm='l1') #选用l1范数 即绝对值
new_sample = sp.normalize(sample, norm='l2') #选用l2范数 即平方和开根号
print(new_s)
print(new_sample)
上一篇: 预处理系列之一(C++)
下一篇: Java优化