• 矩阵归一化


    一.最小最大归一化

      和区间映射(我理解的是把一个区间[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。

      这种方法的缺点是,如何加入新数据的话min和max可能变化。

    二.Z-Score标准化方法

      这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化(x-u)/std。经过处理的数据符合标准正态分布,即均值为0,标准差为1。

    三.L2标准化

      由此,我们可以很块的写出最简单的matlab源代码如下:首先按行归一化:

    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>

      按列归一化。

    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命令得到另一种更加简洁更加快速的代码,只是这种代码对于初学者理解起来比较费劲。可以看做是自己水平的一种进阶吧。

    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>
  • 相关阅读:
    Codevs_1403_新三国争霸_(Kruskal+动态规划)
    BZOJ_1084_[SCOI2005]_最大子矩阵_(动态规划)
    BZOJ_1180_[CROATIAN2009]_OTOCI_(LCT)
    BZOJ_1611_[Usaco2008_Feb]_Meteor_Shower流星雨_(bfs)
    hdu5338 (二进制,双指针)
    并查集专辑 (poj1182食物链,hdu3038, poj1733, poj1984, zoj3261)
    生成树专题
    生成树相关问题
    uvaLive5713 次小生成树
    如何将无向图变为点/边双连通,如何将有向图变为强连通图
  • 原文地址:https://www.cnblogs.com/wl-v/p/5856620.html
Copyright © 2020-2023  润新知