matlab 工具函数(三)—— normalize(归一化数据)
注:待处理的数据
X∈Rd×N
,
N
表示样本的个数,
1. 去均值(remove DC)
X = bsxfun(@minus, X, mean(X));
2. 截断标准差
这里比如截断保留 +/- 3 个标准差,并 scale 至 -1/1
xstd = 3*std(X(:));
X = max(min(xstd, X), -xstd)/xstd;
3. 从一个尺度空间,缩放(线性映射)到另一个尺度空间
现考虑将 [a,b] 缩放(map/transform)到另一个尺度空间 [c,d] :
x∈[a,b]⇒x′=(d−c)⋅x−ab−a+c,x′∈[c,d]
其中 x−ab−a 将原始数据,缩放到 [0, 1] 区间内;
比如将数据从 [-1, 1] 线性映射到 [0.1, 0.9] 区间:
X = (.9-.1)*(X+1)/2+.1;
再比如对神经网络权值矩阵的 xavier-initializer 初始化方式,服从 (-r, r) 上的均匀分布( r=6nin+nout−−−−−−√ ),matlab 中的 rand() 生成的是 (0, 1) 上的均匀分布,这里如何从 (0, 1) 上的均匀分布,获取任意区间上的均匀分布( (−r,r) ),
x∼U[0,1]⇒x−01−0(r−(−r))−r=x⋅2r−r
function theta = initializeParameters(visSize, hidSize):
r = sqrt(6/(visSize+hidSize));
W1 = rand(hidSize, visSize)*2*r-r;
b1 = zeros(hidSize, 1);
theta = [W1(:); b1(:)];
end