zoukankan      html  css  js  c++  java
  • 机器学习角度重新认识矩阵

    我们一直对矩阵的认识都只是停留在书本上,从来没和实际结合起来,也没有从应用和实践的角度理解数学的本质,数学的本质就是解决问题,更简单直接的解决问题。

    上图为简单的矩阵计算的题,通过以下两种方式理解矩阵:

     通过行视图可以理解为凸优化问题中的超平面,这个问题在运筹学中比较常见,可以看做优化问题寻找交集。


    通过列视图我们可以联想到线性组合的知识,x,y分别为数值,不同向量的矢量合成计算。

    样本的子空间:

    包含所有列的线性组合的集合,上图中就是x1,x2取不同值的平面,必过原点。

     

     总结一下矩阵的相关内容以及在机器学习领域相关的知识。例如SVD算法

    由上图可知U的向量表示为[u1,u2,...,um]列向量形式是AT*A的特征向量,其中Σ为对角矩阵[σ1,σ2,...,σn]是AT*A的特征值按照从大到小的顺序排列的,,其中VT为[v1,v2,...,vn]行向量形式是A*AT特征向量形式,Am*n =U*Σ*VT=Σσi*ui*vi,根据σi的值可以知道排在前面的越重要,因此可以从前到后的选择特征,起到降维的作用。代码如下:

    import numpy as np
    from PIL import Image

    def SVD(sigma,u,v,K):
    m = len(u)
    n = len(v[0])
    a = np.zeros((m,n))

    for k in range(K+1):
    for i in range(m):
    a[i] += sigma[k]*u[i][k]*v[k]

    b = a.astype('uint8')
    Image.fromarray(b).save('svd_'+str(K)+'.png')

    代数余子式计算公式:

     这个公式多用于对矩阵A的求导时方便计算。

    这是一个算法题不同的矩阵相乘,相乘的顺序不同时间复杂度就不同Am*n,Bn*s  那么A*B的乘法次数为m*n*s。在图像处理等领域可以降低时间复杂度。给定n个矩阵的连乘积A1*A2*A3*...An,如何添加括号改变计算顺序,使得乘法的计算量最小。代码如下:

     

     矩阵秩和线性方程的关系:

     

     对称阵在机器学习中应用广泛矩阵的转置等于本身的就是对称阵,所以AT*A的转置=AT*A。

     通过上面的方法将向量转化成正交向量之后可以避免特征之间的相关性。代码如下:

     

     代码如下:

     LFM的代码如下:

     

    向量求导:

     

     

    标量对向量求导:

     

    标量对方阵的求导:

     

     

     

  • 相关阅读:
    .net core 3.1 过滤器(Filter) 和中间件和AOP面向切面拦截器
    socket通信框架——boost asio
    远程过程调用框架——gRPC
    数据序列化工具——flatbuffer
    springboot项目启动----8080端口被占用排雷经过
    如何配置HOSTS文件
    使用线程Callable实现分段获取一个url连接的资源数据
    Socket网络编程课件
    (6)优化TCP编写 服务器端同时支持多个客户端同时访问
    SpringBoot配置属性之Security
  • 原文地址:https://www.cnblogs.com/limingqi/p/12660855.html
Copyright © 2011-2022 走看看