矩陣歸一化

 

一.最小最大歸一化

  和區間映射(我理解的是把一個區間[a,b]映射到[c,d],c+(x-a)*(d-c)/(b-a),沒查,應該是這樣,主要要理解的問題是兩段距離映射的話要除以比例因子(d-c)/(b-a),本身理解的,這樣就能夠把數據映射到[-1,1])不同,這是映射到[0,1],就是x' = (x-min)/(max-min),其中max和min分別是是x序列的最大、小值,並非0和1。html

  這種方法的缺點是,如何加入新數據的話min和max可能變化。post

二.Z-Score標準化方法

  這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化(x-u)/std。通過處理的數據符合標準正態分佈,即均值爲0,標準差爲1。spa

三.L2標準化

 

  由此,咱們能夠很塊的寫出最簡單的matlab源代碼以下:首先按行歸一化:code

?
1
2
3
4
5
6
7
8
<span style= "font-family: 楷體; font-size: 18pt;" >% Examples
A=[3 4;5 12];
[m n] = size(A);
% normalize each row to unit
for i = 1:m
     A(i,:)=A(i,:)/norm(A(i,:));
end
</span>

  按列歸一化。orm

?
1
2
3
4
5
6
<span style= "font-family: 楷體; font-size: 18pt;" >% normalize each column to unit
A=[3 4;5 12];
for i = 1:n
     A(:,i)=A(:,i)/norm(A(:,i));
end
</span>


  然而,上述代碼最能實現功能,但並非最優的,它只是一種對該過程的最佳理解代碼。在Matlab中,for循環是一件很是費時間的結構,所以咱們在代碼中應該儘可能少用for循環。由此,咱們能夠用repmat命令獲得另外一種更加簡潔更加快速的代碼,只是這種代碼對於初學者理解起來比較費勁。能夠看作是本身水平的一種進階吧。htm

?
1
2
3
4
<span style= "font-family: 楷體; font-size: 18pt;" >%  normalize each row to unit
A = A./repmat( sqrt (sum(A.^2,2)),1,size(A,2));
%  normalize each column to unit
A = A./repmat( sqrt (sum(A.^2,1)),size(A,1),1);</span>
相關文章
相關標籤/搜索