https://blog.csdn.net/cindy407/article/details/92002448
为什么要归一化/标准化?
1、去除量纲的影响,将有量纲的数值变成无量纲的纯数值;(归一化)
2、解决各特征之间数值差异过大的问题,比如一个向量(uv:10000, rate:0.03,money: 20),如果要与其它向量一起计算欧氏距离或者余弦相似度时,会向uv倾斜非常严重,导致其余2个特征对模型的贡献度非常低
3、提升训练的速度,防止过拟合
一、Z-score标准化
# 自己手写
x = (x-x.mean())/x.std()
print(x.mean(),x.std())
print(x[:3])
#调用库
from sklearn import preprocessing
t= preprocessing.StandardScaler().fit(x)
x=t.transform(x)
print(x.mean(),x.std())
print(x[:3])
二、最大最小归一化
如果有一次期末考试题特别难,大家都在59分以下,学校觉得此成绩不太妥当,想进行整体提升,但是怎么提能保证公平性呢?
最大最小化就出场了:最终分数 = (原始分数-最小分数)/(最大分数-最小分数)*100
## 自己手写
#[0,1]
x = (x-x.min())/(x.max()-x.min())
print(x.max(),x.min())
print(x[:3])
#[-1,1]
x = (x-x.mean())/(x.max()-x.min())
print(x.max(),x.min())
print(x[:3])
# 调库
from sklearn import preprocessing
t= preprocessing.MinMaxScaler().fit(x)
x=t.transform(x)
print(x.max(),x.min())
print(x[:3])
三、正则化
在训练数据不够多时,常常会导致过拟合,正则化主是防止过拟合的一种方法,常用的就L1和L2正则化
① L1正则化:将每一个样本的各向量绝对值之和作为范数,再用每个向量去除了这个范数,就得到这个样本L1正则化后的向量;
② L2正则化:将每一个样本的向量先平方和再开方作为范数,再相除
from sklearn import preprocessing
t= preprocessing.Normalizer().fit(x)
x=t.transform(x)
print(x[:3])