import numpy as np
#导入numpy库
from scipy.linalg import sqrtm
#导入矩阵开方的一个方法(非逐元素操作)
def shuffle(data):
#打乱数据集
index=np.arange(len(data))
np.random.shuffle(index)
data=data[index]
return data
def center(data):
#中心化
mean=data.mean(axis=0)
centered=data-mean
return centered,mean
def normalize(data):
#标准化
std_deviation=data.std(axis=0)
std_deviation[std_deviation==0]=1
#如果有某一个特征标准差为0,在计算的过程中容易出错,将其改为1即对该特征不做缩放处理
normalized=data/std_deviation
return normalized,std_deviation
def white(data):
#白化
cov=np.cov(data.T)
c=sqrtm(cov)
c=np.linalg.pinv(c)
whiten=data@c
return whiten,c
由下图可以看出
中心化就是移动整体数据点使得"重心"落在坐标轴原点
标准化就是使得数据大部分落在[-1,+1]这个范围内,
白化之前显然数据呈现为线性,白化之后数据变得没有规律,也就是说白化消除了特征间的联系
原文:https://www.cnblogs.com/redo19990701/p/11479392.html