精华内容
下载资源
问答
  • LDPC码的一种低复杂度归一化最小和译码算法.pdf
  • 文章目录归一化8点算法及图像之间基础矩阵求解归一化8点算法介绍归一化8点算法步骤归一化8点算法总结对极几何与基础矩阵实验详细需求实验过程及代码(1)左右拍摄,极点位于图像平面上。(2)像平面接近平行,极点...

    归一化8点算法及图像之间基础矩阵求解


    多视图几何时利用在不同视点所拍摄图像间的关系,来研究照相机之间或者特征之间关系的一门科学。多视图几何中最重要的内容是双视图几何。如果有一个场景的两个视图以及视图中的对应图像点,那么根据照相机的空间相对位置关系、照相机的性质以及三维场景点的位置,可以得到对这些图像点的一些几何关系约束。

    归一化8点算法介绍

    基本矩阵是由下述方程定义:
    在这里插入图片描述
    其中x↔x’x↔x′是两幅图像的任意一对匹配点。由于每一组点的匹配提供了计算F系数的一个线性方程,当给定至少7个点(3×3)的齐次矩阵减去一个尺度,以及一个秩为2的约束),方程就可以计算出未知的FF。我们记点的坐标为x=(x,y,1)T,x’=(x’,y’,1)Tx=(x,y,1) T,x′=(x′,y′,1) T,则对应的方程为:
    在这里插入图片描述
    展开后有:
    在这里插入图片描述
    把矩阵F写成列向量的形式,则有:
    在这里插入图片描述
    给定n组点的集合,我们有如下方程:
    在这里插入图片描述
    如果存在确定(非零)解,则系数矩阵AA的秩最多是8。由于F是齐次矩阵,所以如果矩阵A的秩为8,则在差一个尺度因子的情况下解是唯一的。可以直接用线性算法解得。

    如果由于点坐标存在噪声则矩阵A的秩可能大8(也就是等于9,由于A是n×9的矩阵)。这时候就需要求最小二乘解,这里就可以用SVD来求解,ff的解就是系数矩阵A最小奇异值对应的奇异向量,也就是A奇异值分解后A=UDVT

    中矩阵V的最后一列矢量,这是在解矢量ff在约束‖f‖下取‖Af‖最小的解。以上算法是解基本矩阵的基本方法,称为8点算法。

    归一化8点算法步骤

    由于基本矩阵有一个重要的特点就是奇异性,F矩阵的秩是2。如果基本矩阵是非奇异的,那么所计算的对极线将不重合。所以在上述算法解得基本矩阵后,会增加一个奇异性约束。最简便的方法就是修正上述算法中求得的矩阵F。设最终的解为F′ ,令detF′=0下求得Frobenius范数(二范数)‖F−F ′‖最小的F′F′ 。这种方法的实现还是使用了SVD分解,若F=UDV ,此时的对角矩阵D=diag(r,s,t),满足r≥s≥t,则F′=Udiag(r,s,0)VT 最小化范数‖F−F′‖,也就是最终的解。

    所以8点算法由下面两个步骤组成:
    1.求线性解 由系数矩阵AA最小奇异值对应的奇异矢量ff求的FF。
    2.奇异性约束 是最小化Frobenius范数∥F−F′∥‖F−F′‖的F′F′代替FF。

    归一化8点算法总结

    8点算法是计算基本矩阵的最简单的方法。为了提高解的稳定性和精度,往往会对输入点集的坐标先进行归一化处理。在MVG的估计一章中推荐各向同性归一化,OpenCV的8点算法也是使用了各向同性,也就是使得各个点做平移缩放之后到坐标原点的均方根距离等于2–√ 2 。

    对于归一化八点算法的总结如下:
    给定n≥8n≥8组对应点xi↔x′i ,确定基本矩阵FF使得x’TiFxi=0x
    算法:
    1.归一化:根据xˆi=Txi,xˆ′i=T′x′i ,变换图像坐标。其中T和T′ 是有平移和缩放组成的归一化变换。
    2.求解对应匹配的基本矩阵F’。
    1.求线性解:用由对应点集xˆi↔xˆ′i 确定的系数矩阵Aˆ 的最小奇异值的奇异矢量确定Fˆ。
    2.奇异性约束:用SVD对Fˆ 进行分解,令其最小奇异值为0,得到Fˆ′ 使得detF’=0。
    3.解除归一化:令F=T’TFˆ′T。矩阵F就是数据xi↔x′i 对应的基本矩阵。

    通常SVD算法来计算最小二乘法,由于上面的算法得出的解可能秩不为2(基础矩阵的秩小于等于2),所以需要通过最后一个奇异值置0来得到秩最接近2的基础矩阵。上面的函数忽略了一个重要的步骤:对图像坐标进行归一化,这可能会带来数值问题。

    八点算法的优点:
    线性求解,容易实现,运行速度快 。
    八点算法的缺点:
    对噪声敏感。

    对极几何与基础矩阵

    基本矩阵体现了两视图几何(对极几何,epipolar geometry)的内在射影几何(projective geometry)关系,基本矩阵只依赖于摄像机的内部参数K和外部参数R、t

    对极平面 = 包含基线的平面
    对极线 = 对极平面与像平面的交线
    对极点= 基线与像平面相交点= 光心在另一幅图像中的投影

    基础矩阵是对极几何的代数表达方式
    基础矩阵描述了图像中任意对应点 x↔x’ 之间的约束关系
    在这里插入图片描述
    F 为 3x3 矩阵,秩为2,对任意匹配点对 x↔x’ 均满足xTFx’=0

    1. 转置: 如果 F 是表述点对 (x, x’)之间的基础矩阵, 则 FT 表述点对 (x’,x)之间的基础矩阵;
    2. 对极线: F 可以将点 x 映射到对应像平面上一条线 l=Fx’,同理可得 l’=FTx
    3. 对极点: 对于所有对极线, 有 eTFx’=0, 全x’ →eTF=0, 同理有 Fe’=0
    4. F 自由度为 7 , i.e. 3x3-1(homogeneous)-1(rank2)

    实验详细需求

    分别用七点、八点、十点(匹配点),计算基础矩阵
    图片包含三种情况,即:
    (1)左右拍摄,极点位于图像平面上,如图所示
    在这里插入图片描述
    (2)像平面接近平行,极点位于无穷远,如图所示
    在这里插入图片描述
    (3)图像拍摄位置位于前后,如图所示
    在这里插入图片描述
    针对上述情况,画出极点和极线,其中点坐标要均匀分布于各行

    实验过程及代码

    我是用了SIFT对两个图像进行特征提取以及匹配,然后使用归一化8点算法进行基本矩阵的求解。

    代码实现:

    # coding: utf-8
    from PIL import Image
    from numpy import *
    from pylab import *
    import numpy as np
    from PCV.geometry import homography, camera,sfm
    from PCV.localdescriptors import sift
     
    camera = reload(camera)
    homography = reload(homography)
    sfm = reload(sfm)
    sift = reload(sift)
     
    # 提取特征
    im1 = array(Image.open('D:/test/test5/7.jpg'))
    sift.process_image('D:/test/test5/7.jpg', 'im1.sift')
     
    im2 = array(Image.open('D:/test/test5/8.jpg'))
    sift.process_image('D:/test/test5/8.jpg', 'im2.sift')
     
    l1, d1 = sift.read_features_from_file('im1.sift')
    l2, d2 = sift.read_features_from_file('im2.sift')
     
    matches = sift.match_twosided(d1, d2)
     
    ndx = matches.nonzero()[0]
    x1 = homography.make_homog(l1[ndx, :2].T)#将点集转化为齐次坐标表示
    ndx2 = [int(matches[i]) for i in ndx]
    x2 = homography.make_homog(l2[ndx2, :2].T)#将点集转化为齐次坐标表示
     
    d1n = d1[ndx]
    d2n = d2[ndx2]
    x1n = x1.copy()
    x2n = x2.copy()
     
    figure(figsize=(16,16))
    sift.plot_matches(im1, im2, l1, l2, matches, True)#可视化
    show()
     
    def F_from_ransac(x1, x2, model, maxiter=5000, match_threshold=1e-6):
        """
        使用RANSAC从点对应中稳健估计基本矩阵F.
      (来自http://www.scipy.org/Cookbook/RANSAC的ransac.py)。
        input: x1, x2 (3*n arrays) points in hom. coordinates. """
     
        from PCV.tools import ransac
        data = np.vstack((x1, x2))
        d = 10 # 20 is the original
        # 计算F并返回inlier索引
        F, ransac_data = ransac.ransac(data.T, model,
                                       8, maxiter, match_threshold, d, return_all=True)
        return F, ransac_data['inliers']
     
     
    # 通过RANSAC找到F.
    model = sfm.RansacModel()
    F, inliers = F_from_ransac(x1n, x2n, model, maxiter=5000, match_threshold=1e-3)
     
     
    P1 = array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]])
    P2 = sfm.compute_P_from_fundamental(F)#计算第二个相机矩阵
     
    #print P2
    print 'F is'
    print F
     
    # triangulate inliers and remove points not in front of both cameras
    X = sfm.triangulate(x1n[:, inliers], x2n[:, inliers], P1, P2)
     
    # 绘制X的投影
    cam1 = camera.Camera(P1)
    cam2 = camera.Camera(P2)
    x1p = cam1.project(X)
    x2p = cam2.project(X)
     
    figure(figsize=(16, 16))
    imj = vstack((imj, imj))
     
    imshow(imj)
     
    cols1 = im1.shape[1]
    rows1 = im1.shape[0]
    for i in range(len(x1p[0])):
        if (0<= x1p[0][i]<cols1) and (0<= x2p[0][i]<cols1) and (0<=x1p[1][i]<rows1) and (0<=x2p[1][i]<rows1):
            plot([x1p[0][i], x2p[0][i]+cols1],[x1p[1][i], x2p[1][i]],'c')
    axis('off')
    show()
     
    d1p = d1n[inliers]
    d2p = d2n[inliers]
    # 读取特征
    im3 = array(Image.open('D:/test/test5/9.jpg'))
    sift.process_image('D:/test/test5/9.jpg', 'im3.sift')
    l3, d3 = sift.read_features_from_file('im3.sift')
    matches13 = sift.match_twosided(d1p, d3)
    ndx_13 = matches13.nonzero()[0]
    x1_13 = homography.make_homog(x1p[:, ndx_13])
    ndx2_13 = [int(matches13[i]) for i in ndx_13]
    x3_13 = homography.make_homog(l3[ndx2_13, :2].T)
    figure(figsize=(16, 16))
    imj = sift.appendimages(im1, im3)
    imj = vstack((imj, imj))
    imshow(imj)
     
    cols1 = im1.shape[1]
    rows1 = im1.shape[0]
    for i in range(len(x1_13[0])):
        if (0<= x1_13[0][i]<cols1) and (0<= x3_13[0][i]<cols1) and (0<=x1_13[1][i]<rows1) and (0<=x3_13[1][i]<rows1):
            plot([x1_13[0][i], x3_13[0][i]+cols1],[x1_13[1][i], x3_13[1][i]],'c')
    axis('off')
    show()
     
    P3 = sfm.compute_P(x3_13, X[:, ndx_13])#计算第三个相机的矩阵
     
    #print P3
    print 'P1 is'
    print P1
    print 'P2 is'
    print P2
    print 'P3 is'
    print P3
    

    外极点满足Fe1=0,因此可以通过计算F的零空间来得到。如果想要获得另一幅图像的外极点(对应左零空间的外极点),只需将F转置后输入到函数def compute_epipole(F) 中即可。
    可以将之前样本数据集的两个视图上运行这个函数:

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2 as cv
    from matplotlib import pyplot as plt
    
    
    def drawlines(img1, img2, lines, pts1, pts2):
        ''' img1 - image on which we draw the epilines for the points in img2
            lines - corresponding epilines '''
        r, c = img1.shape
        img1 = cv.cvtColor(img1, cv.COLOR_GRAY2BGR)
        img2 = cv.cvtColor(img2, cv.COLOR_GRAY2BGR)
        for r, pt1, pt2 in zip(lines, pts1, pts2):
            color = tuple(np.random.randint(0, 255, 3).tolist())
            x0, y0 = map(int, [0, -r[2] / r[1]])
            x1, y1 = map(int, [c, -(r[2] + r[0] * c) / r[1]])
            img1 = cv.line(img1, (x0, y0), (x1, y1), color, 1)
            img1 = cv.circle(img1, tuple(pt1), 5, color, -1)
            img2 = cv.circle(img2, tuple(pt2), 5, color, -1)
        return img1, img2
    
    
    img1 = cv.imread('D:/Study/untitled1/222/31.jpg', 0)  # queryimage # left image
    img2 = cv.imread('D:/Study/untitled1/222/32.jpg', 0)  # trainimage # right image
    sift = cv.xfeatures2d.SIFT_create()
    # find the keypoints and descriptors with SIFT
    kp1, des1 = sift.detectAndCompute(img1, None)
    kp2, des2 = sift.detectAndCompute(img2, None)
    # FLANN parameters
    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    search_params = dict(checks=50)
    flann = cv.FlannBasedMatcher(index_params, search_params)
    matches = flann.knnMatch(des1, des2, k=2)
    good = []
    pts1 = []
    pts2 = []
    # ratio test as per Lowe's paper
    for i, (m, n) in enumerate(matches):
        if m.distance < 0.8 * n.distance:
            good.append(m)
            pts2.append(kp2[m.trainIdx].pt)
            pts1.append(kp1[m.queryIdx].pt)
    
    pts1 = np.int32(pts1)
    pts2 = np.int32(pts2)
    F, mask = cv.findFundamentalMat(pts1, pts2, cv.FM_LMEDS)
    # We select only inlier points
    pts1 = pts1[mask.ravel() == 1]
    pts2 = pts2[mask.ravel() == 1]
    
    # Find epilines corresponding to points in right image (second image) and
    # drawing its lines on left image
    lines1 = cv.computeCorrespondEpilines(pts2.reshape(-1, 1, 2), 2, F)
    lines1 = lines1.reshape(-1, 3)
    img5, img6 = drawlines(img1, img2, lines1, pts1, pts2)
    # Find epilines corresponding to points in left image (first image) and
    # drawing its lines on right image
    lines2 = cv.computeCorrespondEpilines(pts1.reshape(-1, 1, 2), 1, F)
    lines2 = lines2.reshape(-1, 3)
    img3, img4 = drawlines(img2, img1, lines2, pts2, pts1)
    plt.subplot(121), plt.imshow(img5)
    plt.subplot(122), plt.imshow(img3)
    plt.show()
    

    实验结果分析:
    从左到右三张图分别为:
    图像1和图像2的sift特征匹配结果图
    图像1和图像2的投影效果图
    图像1和图像3的投影效果图

    (1)左右拍摄,极点位于图像平面上。

    在这里插入图片描述
    基础矩阵为F,图像1、图像2和图像3的投影矩阵分别为P1、P2、P3(默认P1的投影矩阵为[[1 0 0 0] ,[0 1 0 0], [0 0 1 0]])
    在这里插入图片描述
    关于极点的实验结果如下:
    在这里插入图片描述
    (错误结果)
    在这里插入图片描述

    (2)像平面接近平行,极点位于无穷远,如图所示

    在这里插入图片描述
    基础矩阵为F,图像1、图像2和图像3的投影矩阵分别为P1、P2、P3(默认P1的投影矩阵为[[1 0 0 0] ,[0 1 0 0], [0 0 1 0]])
    在这里插入图片描述
    关于极点的实验结果如下:
    在这里插入图片描述
    (错误结果)
    在这里插入图片描述

    (3)图像拍摄位置位于前后,如图所示

    在这里插入图片描述
    基础矩阵为F,图像1、图像2和图像3的投影矩阵分别为P1、P2、P3(默认P1的投影矩阵为[[1 0 0 0] ,[0 1 0 0], [0 0 1 0]])
    在这里插入图片描述
    关于极点的实验结果如下:
    在这里插入图片描述
    在这里插入图片描述

    由于两幅图像在匹配的时候有不少错误的匹配,所以计算的基本矩阵有较大的误差。sift算法本身有时候会因为匹配点附近太过相似而出现错误匹配,这个算法便能在这个基础上相对优化,避开错误的匹配,但是以上的结果都出现了一个情况,优化后的结果仍存在错误的匹配点,整体效果并不好,由于图像远近以及光线的影响,呈现的效果也不够理想,而相对的,远近相同的测试图片效果会比远近相差较大的图片要好,更容易匹配。可以总结出使用八点算法估算F的步骤:

    第一步,导入两幅图像,并使用sift算法提取特征;
    第二步,使用函数match_twosided连接两幅图的特征;
    第三步,RANSAC去除错误点匹配;
    第四步,归一化8点算法估计基础矩阵。这是通过对应点来计算基础矩阵的算法。

    选择两幅图像的对应点,然后将它们转换为齐次坐标,这里的对应点是从一个文本文件中读取得到的;而实际上,可以按照sift提取图像特征的方式,然后通过匹配来找到它们,上面的程序通过数组操作符&只选取了索引大于等于0的点,还借助了plot_epipolar_line()函数,这个函数将x轴的范围作为直线的参数,所以直线超出了图像边界的部分会被截断。如show_epipole为真,外极点会被画出来,用不同的颜色将点和对应的外极线对应起来。

    这个报错经常出现,导致需要更换很多组图片!!!!!!

    did not meet fit acceptance criteria
    

    这是因为这段代码在计算单应性矩阵时,每个图像对中,匹配是从最右边的图像计算出来的,如果你的第二张与第一张图片没有共同点, 会错乱拼接图片或者出现ValueError: did not meet fit acceptance criteria错误。所以你在给图片命名时,要按照从右到左的顺序命名。

    展开全文
  • LDPC的信道编译码的matlab仿真——LDPC译码最小和和归一化最小和 2.部分程序: clc; clear all; load H; D=H(1:675,5401:6075); %-------下面是通过H求G的过程,假设D的第1,2列子矩阵的第一列为相关的---------...

    1.问题描述:

     LDPC的信道编译码的matlab仿真——LDPC译码最小和和归一化最小和

    2.部分程序:

     


    clc; clear all;
    load H;
    D=H(1:675,5401:6075);

    %-------下面是通过H求G的过程,假设D的第1,2列子矩阵的第一列为相关的-----------
    G=zeros(5402,6075);
    Gs_g=zeros(5400,675);
    Q_q=zeros(2,675);
    Dlose=D; Dlose(:,226)=[]; Dlose(:,1)=[];

    %--------求系统部分 Gs  利用Mi*uT+D*ziT=0 共求24个zi,得到Gs里面的非单位阵部分Gs_g-----

    Zi=zeros(24,675);
    Gs_gtemp=zeros(225,675);
    for tNum=1:24
        tNum
        MiuT=H(:,(tNum-1)*225+1);
        Zi1=solveAX(Dlose,MiuT);              %求解 AX=B的解向量
        Zi(tNum,[2:225 227:675])=Zi1(1:673);
        Gs_gtemp=cycleG(Zi(tNum,:));                  %由循环子向量的第一行得到对应的子循环矩阵
        Gs_g((tNum-1)*225+1:tNum*225,:)=Gs_gtemp;
    end


    %%---------下面是求解G矩阵中的Qs部分 利用D*g=0---------

    Q1_q=solveAX(Dlose,D(:,1));
    Q2_q=solveAX(Dlose,D(:,226));

    Q_q(1,[2:225 227:675])=Q1_q(1:673);
    Q_q(1,1)=1;
    Q_q(2,[2:225 227:675])=Q2_q(1:673);
    Q_q(2,226)=1;

    G(1:5400,1:5400)=eye(5400);
    G(1:5400,5401:6075)=Gs_g;
    G(5401:5402,5401:6075)=Q_q;

    textHG=mod(H*G',2);

    3.仿真结论:

    C-58

    展开全文
  • 数据标准化/归一化normalization

    万次阅读 多人点赞 2016-08-19 09:42:40
    这里主要讲连续型特征归一化的常用方法。 连续型特征还有一种处理方式是,先分桶/分箱(如等频/等距的分)[待写]进行离散化后再使用离散数据的处理方法。 离散数据处理参考[数据预处理:独热编码(One-Hot ...

    http://blog.csdn.net/pipisorry/article/details/52247379

    这里主要讲连续型特征归一化的常用方法。

    连续型特征还有一种处理方式是,先分桶/分箱(如等频/等距的分)[待写]进行离散化后再使用离散数据的处理方法。

    离散数据处理参考[数据预处理:独热编码(One-Hot Encoding)]。

    基础知识参考:

    [均值、方差与协方差矩阵]

    [矩阵论:向量范数和矩阵范数]

    数据的标准化(normalization)和归一化

        数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

        目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。

    其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

    归一化的目标

    1 把数变为(0,1)之间的小数
            主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。
    2 把有量纲表达式变为无量纲表达式
            归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。
    另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

    归一化后有两个好处

    1. 提升模型的收敛速度

    如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)


    2.提升模型的精度

    归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

        在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。

        在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

    从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

    3. 深度学习中数据归一化可以防止模型梯度爆炸。

    数据需要归一化的机器学习算法

    需要归一化的模型:

            有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM(距离分界面远的也拉近了,支持向量变多?)。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。
            有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression(因为θ的大小本来就自学习出不同的feature的重要性吧?)。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛(模型结果不精确)。所以对于具有伸缩不变性的模型,最好也进行数据标准化。

            有些模型/优化方法的效果会强烈地依赖于特征是否归一化,如LogisticReg,SVM,NeuralNetwork,SGD,PCA降维[PCA将原来高维的数据投影到某个低维的空间上并使得其方差尽量大。如果数据其中某一特征数值特别大,那么它在整个误差计算的比重上就很大,那么可以想象在投影到低维空间之后,为了使低秩分解逼近原数据,整个投影会去努力逼近最大的那一个特征,而忽略数值比较小的特征,这很可能导致了大量的信息缺失。此外,从计算的角度讲,因为PCA通常是数值近似分解,而非求特征值、奇异值得到解析解,所以当我们使用梯度下降等算法进行PCA的时候,归一化有利于梯度下降收敛]等。

    不需要归一化的模型:

        (0/1取值的特征通常不需要归一化,归一化会破坏它的稀疏性。)

        有些模型则不受归一化影响,如DecisionTree。

        ICA好像不需要归一化(因为独立成分如果归一化了就不独立了?)。

        基于平方损失的最小二乘法OLS不需要归一化。

    [线性回归与特征归一化(feature scaling)]

    皮皮blog

     

     

    常见的数据归一化方法

    最常用的是 min-max标准化 和 z-score 标准化。

    min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)/线性函数归一化/离差标准化

    是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

    其中max为样本数据的最大值,min为样本数据的最小值。

    def Normalization(x):
        return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

    如果想要将数据映射到[-1,1],则将公式换成:

    x* = x* * 2 -1

    或者进行一个近似

    x* = (x - x_mean)/(x_max - x_min), x_mean表示数据的均值。

    def Normalization2(x):
        return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

    这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

    ps: 将数据归一化到[a,b]区间范围的方法:

    (1)首先找到原本样本数据X的最小值Min及最大值Max
    (2)计算系数:k=(b-a)/(Max-Min)
    (3)得到归一化到[a,b]区间的数据:Y=a+k(X-Min)  或者 Y=b+k(X-Max)

    即一个线性变换,在坐标上就是求直线方程,先求出系数,代入一个点对应的值(x的最大/最小就对应y的最大/最小)就ok了。

    z-score 标准化(zero-mean normalization)

    最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法,spss默认的标准化方法就是z-score标准化。

    也叫标准差标准化,这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

    经过处理的数据符合标准正态分布,即均值为0,标准差为1,注意,一般来说z-score不是归一化,而是标准化,归一化只是标准化的一种[lz]。

    其转化函数为:

    x* = (x - μ ) / σ

    其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

    z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种标准化方式要求原始数据的分布可以近似为高斯分布,否则效果会变得很糟糕。

    标准化的公式很简单,步骤如下

      1.求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;
      2.进行标准化处理:
      zij=(xij-xi)/si
      其中:zij为标准化后的变量值;xij为实际变量值。
      3.将逆指标前的正负号对调。
      标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

    def z_score(x, axis):
        x = np.array(x).astype(float)
        xr = np.rollaxis(x, axis=axis)
        xr -= np.mean(x, axis=axis)
        xr /= np.std(x, axis=axis)
        # print(x)
        return x

    为什么z-score 标准化后的数据标准差为1?

    x-μ只改变均值,标准差不变,所以均值变为0

    (x-μ)/σ只会使标准差除以σ倍,所以标准差变为1

    这两种最常用方法使用场景:

    1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

    2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
    原因是使用第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。而在第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。
    [再谈机器学习中的归一化方法(Normalization Method) ]

    皮皮blog

    log函数转换

    通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

    看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

    atan函数转换

    用反正切函数也可以实现数据的归一化。

    使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,而并非所有数据标准化的结果都映射到[0,1]区间上。

    Decimal scaling小数定标标准化

    这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。

    将属性A的原始值x使用decimal scaling标准化到x'的计算方法是:
    x'=x/(10^j)
    其中,j是满足条件的最小整数。
    例如 假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用每个值除以1000(即,j=3),这样,-986被规范化为-0.986。
    注意,标准化会对原始数据做出改变,因此需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化。

    Logistic/Softmax变换

    [Sigmod/Softmax变换 ]

    模糊量化模式

    新数据=1/2+1/2sin[派3.1415/(极大值-极小值)*(X-(极大值-极小值)/2) ] X为原数据

    皮皮blog

     

    数据标准化/归一化的编程实现

    1 python库实现和调用

    [Scikit-learn:数据预处理Preprocessing data ]

    2 pandas dataframe实现标准化

    [pandas小记:pandas数据规整化-正则化、分组合并及重塑]

    两者的区别在于:df_norm = (df - df.mean()) / (df.std())会保留nan值,而preprocessing.scale(X)会直接报错:ValueError: Input contains NaN, infinity or a value too large for dtype('float64')。

    对于dense数据,建议先填充再标准化,否则需要标准化后再通过最小值来填充。

    from: http://blog.csdn.net/pipisorry/article/details/52247379

    ref:

     

    展开全文
  • 归一化数据可以使各个特征维度对...该方法实现对原始数据的等比例缩放,其中Xnorm为归一化后的数据,X为原始数据,Xmax、Xmin分别为原始数据集的最大值最小值。 缺点是抗干扰能力弱,受离群值影响比较大,中间容...

    归一化数据可以使各个特征维度对目标函数的影响权重一致,提高迭代的求解的收敛速度。

    1、线性函数归一化(Min-Max scaling)

    线性函数将原始数据线性化的方法转换到[0 1]的范围,归一化公式如下:

    该方法实现对原始数据的等比例缩放,其中Xnorm为归一化后的数据,X为原始数据,Xmax、Xmin分别为原始数据集的最大值和最小值。

    缺点是抗干扰能力弱,受离群值影响比较大,中间容易没有数据。最大最小值归一化后的数据落在[0,1]之间。假设某个特征下有一组数据:1,2,3,4,5,100那么对数据使用最大最小值归一化后的值为:0,2/99,3/99,4/99,1。中间没有数据,受离群值100的影响大。

     

    2、0均值标准化(Z-score standardization)

    0均值归一化方法将原始数据集归一化为均值为0、方差1的数据集,归一化公式如下:

    其中,μ、σ分别为原始数据集的均值和方法。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

    方差归一化抗干扰能力强,和所有数据有关,求标准差需要所有的值介入,若有离群值,会被抑制下来。但是归一化后的数据最终的结果不一定落在0到1之间。

    注意:理论上一个模型算法如果拿到训练集所有的特征一起训练模型就要归一化数据。决策树算法可以不归一化数据。

    1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

    2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

    展开全文
  • PyTorch 数据归一化与反归一化

    万次阅读 多人点赞 2019-04-11 11:12:47
    文章目录数据归一化除最大值法MinMaxScaler均值标准差反归一化 数据归一化 除最大值法 def read_and_normalize_train_data(): train_data, train_label = load_train() print('Convert to numpy...') train_...
  • 【STM32平衡小车】电磁巡线归一化算法(二)

    万次阅读 多人点赞 2018-12-08 17:08:45
    因此为了给算法制定统一的标准给数据处理带来方便须对 A/D传感器采集来的信号做归一化处理。此设计中的具体方法是通过公式将各传感器电压值都处理成相对该传感器最大电压和最小电压使得传感器输出电压值都保持在 0到...
  • 数据归一化和两种常用的归一化方法

    万次阅读 多人点赞 2018-07-22 18:40:03
    数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的...
  • edgeR提供的TMM归一化算法详解

    千次阅读 2018-09-27 19:17:00
    欢迎关注”生信修炼手册”!我们都知道raw count的定量方式,是无法直接在样本间进行比较的。所以差异分析时,都会对原始的表达量数据进行归一化。在之前的文章中,我们介绍了DESeq2提...
  • 最近哈工大的研究团队于2020年在国际著名的人工智能杂志《神经网络》上发表了《利用深度CNN进行批量重正的图像去噪》。 作者信息 在论文中,作者提出了一种新的图像去噪网络,称为批重归一化去噪网络...
  • 数据标准能将原来的数据进行重新调整(一般也称为 z-score 规范方法),以便他们具有标准正态分布的属性,即 μ=0 σ=1。其中,μ 表示平均值,σ 表示标准方差。数据标准之后的形式可以按照如下公式进行...
  • 赫金的《自适应滤波器原理》第四版第五、六章:最小均方自适应滤波器(LMS,Least Mean Square)以及归一化最小均方自适应滤波器(NLMS,Normalized Least Mean Square)。全文包括:  1)LMS与维纳滤波器(Wiener...
  • 归一化与反归一化

    千次阅读 2020-08-31 17:14:58
    归一化就是把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。 归一化的目的:归一化是为了后面数据处理的方便,其次是提升模型的收敛速度提升模型的精度。一般可分为以下两种情况 (1)归一...
  • 为什么要数据归一化和归一化方法

    千次阅读 2018-12-17 13:55:34
    转 为什么要数据归一化和归一化方法 2017年09月22日 08:59:58 wuxiaosi808 阅读数:11657 &lt;span class="tags-box artic-tag-box"&...
  • 4.归一化和标准化的区别 5.什么时候用归一化?什么时候用标准化? 6. 哪些模型必须归一化/标准化? 7、逻辑回归必须要进行标准化吗? 8. 为什么需要批归一化(BN)? 9. BN的好处 10、BN的原理 11、BN到底解决...
  • CFR-虚拟遗憾最小化算法入门(一)

    千次阅读 2020-06-06 00:49:13
    目录CFR-虚拟遗憾最小化算法入门基本原理实现部分游戏说明CFR实现训练部分参考代码举例说明初始情况(概率相等)一般情况(概率不等)决策部分参考代码举例说明 CFR-虚拟遗憾最小化算法入门 CFR, Counterfactual ...
  • 归一化

    千次阅读 2018-01-02 21:23:04
    1、归一化为什么能提高梯度下降法求解最优解的速度? 函数z=f(x,y)在点p(x,y)的梯度的方向与过点p的等高线f(x,y)=c在这点的法线一个方向相同。梯度的方向与等高线切线方向垂直。 梯度是函数值变化最快的方向。梯度...
  • 在原论文中提出了归一化(初始化)输入参数,再进行八点法能够得到较好的匹配效果,算出修正的F矩阵。但是原文没有给出代码以及实现方法,这里本博客特地讨论一下这个问题。 本文主要解决的问题是图像坐标系的选择对...
  • 数据归一化

    千次阅读 2016-05-11 17:21:22
    - 达到更好的模型训练效果(如BP算法中加速收敛)方法线性函数归一化如使用原始数据的最小、最大值将原始数据变换到[0,1]范围内 0均值标准化(Z-scorestandardization)将原始数据转化为均值为0,方差为1的数据集...
  • 标准化和归一化

    千次阅读 2017-04-20 09:51:37
    *****************************归一化******************************* 1)把数据变成(0,1)...归一化算法有: 1.线性转换  y=(x-MinValue)/(MaxValue-MinValue 2.对数函数转换:  y=log10(x) 3.反余切函
  • 数据归一化和标准化的区别

    千次阅读 2018-11-26 15:54:53
    声明:内容来源于... ... 这里主要讲连续型特征归一化的常用方法。离散参考[数据预处理:独热编码(One-Hot Encoding)]。 基础知识参考: [均值、方差与协方差矩阵...
  • 数据归一化和相似性

    千次阅读 2015-11-16 00:34:58
    数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的...
  • 一句话介绍就是: L1 norm就是绝对值相加,又称曼哈顿距离; L2 norm就是欧几里德距离之L2范数: 在向量范数范围内: L1范数就是等于各个值的绝对值...在正则中二者的区别: 同时注意由于L1是绝对值之
  • 机器学习特征工程--标准化和归一化

    千次阅读 2019-03-02 19:32:14
    关于归一化和标准化 1.标准化使用条件 (1)不需要对特征进行归一化:基于树模型的方法 举例: 随机森林/bagging/boosting/xgboost 需要标准化的(基于距离的模型):回归分析(逻辑回归)/神经网络 / svm 2....
  • 数据预处理-数据归一化和数据规范化 1. 数据归一化1.1. 作用 把数据映射到[0,1]的区间中 把有量纲形式变成无量纲形式 1.2. 算法1.2.1. 最小-最大归一化Y=X−XminXmax−XminY = \frac{X - Xmin}{Xmax - Xmin} 把X的...
  • 机器学习——标准化/归一化的目的、作用场景 (一)归一化的作用 在机器学习领域中,不同评价指标(即特征向量中的不同特征就是所述的不同评价指标)往往具有不同的量纲量纲单位,这样的情况会影响到数据...
  • 正则化和归一化

    千次阅读 2018-09-25 22:12:35
    正则化,归一化(标准化正规化):对数据进行预处理的两种方式,目的是让数据更便于计算获得更加泛化的结果,但并不改变问题的本质。   正则化:要求一个逻辑回归问题,假设一个函数,覆盖所有可能:y=wx,...
  • 数据标准化和归一化

    千次阅读 2016-12-09 22:27:55
    1、综述 1.1原理介绍 归一化方法: 1、把数变为(0,1)之间的小数 主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。 2、把有量纲表达式变为无量纲表达式 归一化是一种简化计算的方式...
  • 标准化、归一化、中心化

    千次阅读 多人点赞 2018-10-01 23:22:52
    数据分析及挖掘中常提到的几个概念(数据的 标准化、归一化、中心化),虽然经常在用,但可能还是有一些比较生僻的知识容易搞混淆,所以在十月国庆大家都出门上高速堵车的时候抽了点时间对这些概念以我的能力理解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,628
精华内容 13,451
关键字:

归一化最小和算法