come from:
歸一化是要把需要處理的資料經過處理後限制在一定範圍內,例如:[-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) );
歸一化輸入向量
1 加快梯度下降求解速度 如下圖所示,藍色的圈圈圖代表的是兩個特徵的等高線。其中左圖兩個特徵x1和x2的區間相差非常大,x1區間是 0,2000 x2區間是 1,5 其所形成的等高線非常尖。當使用梯度下降法尋求最優解時,很有可能走 之字型 路線 垂直等高線走 從而導致需要迭代很多次才能收斂 而右圖對...
特徵向量的歸一化方法
在使用knn k nearest neighbours 根據特徵值進行分類的時候,如果所有變數位於同一值域範圍內,利用這些變數一次性算出距離值是有意義的。不過,假設我們引入乙個對最終的分類結果產生影響的新變數 不同型別的變數 heterogenous varibales 與我們目前使用過的變數不同 ...
matlab歸一化函式,以及還原歸一化
2 只按行歸一化,如果是矩陣,則每行各自歸一化,如果需要對整個矩陣歸一化,用如下方法 flatteneddata originaldata 展開矩陣為一列,然後轉置為一行。mapminmax flatteneddata,0,1 歸一化。reshape size originaldata 還原為原始矩...