• 实现最小二乘的问题——求矩阵的逆


    我们可以使用最小二乘法求解线性回归:

    β即是我们模型训练获得的系数。但是这里有个问题即是涉及到了矩阵求逆,这就要求XTX可逆,在实际的应用中,很多情况下,矩阵是不可逆的,如何处理呢?我们可以求矩阵的伪逆,函数原型:numpy.linalg.pinv(a,rcond=1e-15)
    计算一个矩阵的伪逆(Moore-Penrose)。

    • a:(m,n)要求逆的矩阵
    • rcond:删除在最小二乘解中“很小的”奇异值。奇异值小于rcond*largest_singular_value将被置为0
      如果SVD计算不收敛,该函数将会抛出LinAlgError异常
      矩阵A的伪逆,记为:A+,被定义为:最小二乘问题Ax=b中的“算子”。比如,如果x为最小二乘问题中的解,那么A+应满足:x=A+b
      如果:是A的奇异值分解,其中Q1,2是正交矩阵,是由A的奇异值组成的对角阵,而是A的奇异值的倒数组成的对角阵(用0填充)。

    G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, pp. 139-142.

    使用样例:在最小二乘实现线性回归中:

        def olsr(dataMatrix,classLabels):
            dataMatrix=np.mat(dataMatrix)
            classLabels=np.mat(classLabels)
            pinv_X=np.linalg.pinv(dataMatrix,0.01)#过滤掉小于(rcond=0.01*最大奇异值)的“小奇异值”
            ws=pinv_X*classLabels.T#classLabels.T:保证classLabels.T为列向量
            return ws#返回训练模型获得的系数
    

    补充:

    1. 正交矩阵:
      如果A是n阶矩阵,满足AAT=ATA=E,则A是正交矩阵。
      如果A是正交矩阵<->AT=A-1<->A的行列向量组是正交规范化向量组。且|A|=1或者-1
      2.解决线性回归相关的函数还有numpy.linalg.lstsq.参见:numpy.linalg.lstsq。该函数返回一个线性矩阵方程的最小二乘解。函数原型:
      numpy.linalg.lstsq(a,b,rcond=-1).其中:
    • a相当于x-y坐标系中的x

    • b相当于x-y坐标系中的y。可以对b传入矩阵,那么返回的也将是一个矩阵。

    • rcond与pinv()中的参数值相同,目的在于减少小奇异值的影响。

        >>>x=np.array([0,1,2,3])
        >>>y=np.array([-1,0.2,0.9,2.1])
        >>>A=np.vstack([x,np.ones(len(x))]).T#添加全为1的偏置单位,并转置
      
        >>> A
        array([[ 0.,  1.],
            [ 1.,  1.],
            [ 2.,  1.],
            [ 3.,  1.]])
      
        >>>m,c=np.linalg.lstsq(A,y)[0]#m,c即为该线性函数的系数
  • 相关阅读:
    用sed删除文件中指定行
    传输文件到docker容器
    RAID技术全解图解-RAID0、RAID1、RAID5、RAID100
    Best PDF Document Viewers for Linux Systems
    nvidia docker install
    cuda apt install
    Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法
    Linux Shell sort排序常用命令
    linux cut用法
    DispatcherServlet的作用
  • 原文地址:https://www.cnblogs.com/mengnan/p/9307636.html
Copyright © 2020-2023  润新知