天天看點

向量歸一化的matlab程式,向量X的歸一化及其Matlab簡單示例

徐海蛟博士

歸一化是要把需要處理的資料經過處理後限制在一定範圍内,例如:[-1,1]或[0,1]。歸一化是為了後續資料處理的友善,也使得算法程式收斂加快。

在Matlab裡面,歸一化的方法共有3種:

(1)mapminmax% 範圍映射

(2)mapstd% 均值與偏差

(3)自定義函數

在資料預處理過程中,對資料集按行或者按列(統一記為向量X)進行L1或者L2範數歸一化是一種常見的處理方式。

對于向量X(x1,x2,...,xn),記norm(X)為向量X的範數,那麼,X的L1範數為xi絕對值之和,L2範數為xi的平方和,而其Lp範數:向量X各個元素xi絕對值的p次方求和後再求1/p次方。這裡,i = 1,2,...,n。則X歸一化後的向量是X'(x1',x2',...,xn'), xi' = xi/norm(X)。

童鞋們,可以跟着徐海蛟老師寫出最簡單的matlab示例代碼:

%% 徐海蛟博士: L1範數-行歸一化

A = [1 2 3; 4 5 6];

[m n] = size(A);

% 歸一化

for i = 1:m

A(i,:) = A(i,:)/norm(A(i,:),1);

end

%% 徐海蛟博士: L2範數-行歸一化

A = [1 2 3; 4 5 6];

[m n] = size(A);

% 歸一化

for i = 1:m

A(i,:) = A(i,:)/norm(A(i,:));

end

這裡,Lp範數 norm(X,p) = sum(abs(A).p)^(1/p)。那麼,

L1範數norm(X) = sum(abs(A)) = norm(X,1),

L2範數norm(X) = sum(A.^2)^(1/2) = norm(X,2)。

若去掉循環,更高效的MatLab代碼如下。

% 徐海蛟博士: L1範數-行歸一化

A = [1 2 3; 4 5 6];

A = A./repmat( sum(abs(A),2), 1, size(A,2) );

% 徐海蛟博士: L2範數-行歸一化

A = [1 2 3; 4 5 6];

A = A./repmat( sqrt(sum(A.^2,2)), 1, size(A,2) );