机器学习所需的线性代数基础知识

  • 线性关系:自变量和因变量都是一次方关系
    • $y=2x_1+3x_2-5x_3+6$
    • 因变量是自变量的线性组合
      • 线性组合:每个变量乘上一个系数,然后再加起来
  • 代数:用公式和变量来表达数学概念
  • 核心概念:
    • 向量:

      • 有大小,有方向的一个量
      • 开始的表达:有向线段(初中物理,几何表达法)
      • 现在的做法:建立直角坐标系,把每个向量转换为一个坐标(代数表达法)
      • $\alpha: (x_1, x_2)$     $\beta: (x_3, x_4)$
      • 向量的模:就是长度,大小,二范数
      • 向量的模:$|\alpha|=\sqrt{x_1^2+x_2^2}$
      • 点乘积:$\alpha \cdot \beta=x_1x_3+x_2x_4$        $\alpha\beta=|\alpha||\beta|cos(\theta)$
      • 余弦相似度:
      • $cos(\theta)=\frac{\alpha\beta}{|\alpha||\beta|}=\frac{x_1x_3+x_2x_4}{\sqrt{x_1^2+x_2^2}\sqrt{x_3^2+x_4^2}}$
      • NumPy:
        • ndarray:
          • 标量:scalar 0维数组
          • 矢量:vector 1维数组
          • 矩阵:matrix 2维数组
          • 张量:tensor 3维及三维以上
        • 数学科学的容器:
          • 按维度定义数据,按维度来处理数据
          • 按维度办事儿
        • 原来所有的二维适应的规则,同时适应三维及其以上
        • 求模的几种方式:
        • import numpy as np
          
          a = [1, 2]
          a1 = np.array(a)
          type(a1)
          print(np.linalg.norm(a1))
          print(np.sqrt((a1 ** 2).sum()))
        • import torch
          
          a2 = torch.tensor(a, dtype=torch.float32)
          type(a2)
          print(torch.linalg.norm(a2))
        • 点乘和余弦相似度的表示:
        • import numpy as np
          
          a = np.array([1, 2])
          b = np.array([3, 4])
          a_dot_b = (a * b).sum()
          a_dot_b
          a @ b
          a.dot(b)
          a_b_sim = a @ b / np.linalg.norm(a) / np.linalg.norm(b)
          a_b_sim
    • 矩阵:

      • matrix
      • 矩阵相乘
        • 法则:
          • A:[m, k]
          • B:[k, n]
          • C:[m, n]
          • AB=C
        • 代码实现:
        • import numpy as np
          
          def matrix_multiply(A, B):
              
              A = np.array(A)
              B = np.array(B)
              if A.ndim != 2 or B.ndim !=2 or A.shape[1] != B.shape[0]:
                  raise ValueError("A和B不能相乘。。。")
              m = A.shape[0]
              n = B.shape[1]
              C = np.empty(shape=(m, n))
              for row in range(m):
                  for column in range(n):
                      C[row, column] = A[row, :] @ B[:, column]
              return C
          
          A = np.random.randn(3, 4)
          B = np.random.randn(4, 5)
          
          matrix_multiply(A, B)
      • 矩阵分解
        • 目的:抽取信息
        • 矩阵特征向量和特征值
        • $Ax=\lambda x$
        • 特征分解:
          • 必须是方阵
        • 奇异值分解
          • 本质上还是特征分解
          • 但是,可以用于任何的矩阵
          • 奇异值是正数
          • SVD
          • 代码举例:
          • import numpy as np
            from matplotlib import pyplot as plt
            
            img = plt.imread(fname="beauty.jpeg")
            img.shape
            plt.imshow(X=img)
            H, W, C = img.shape
            plt.imshow(X=img[:H//2, :, :])
            r = img[:, :, 2]
            plt.imshow(X=r, cmap="gray")
            
            U, S, Vh = np.linalg.svd(a=r, full_matrices=False)
            
            np.allclose(r, U @ np.diag(v=S) @ Vh)
            

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值