注:本文的代码是使用Python 3写的。

  • 机器学习中的基本数学知识

    • 线性代数(linear algebra)

      • 第一公式
      • 矩阵的操作
        • 换位(transpose)
        • 矩阵乘法
        • 矩阵的各种乘积
        • 内积
        • 外积
        • 元素积(element-wise product/point-wise product/Hadamard product
    • 低等数学
    • 几何
      • 范数(norm)
      • 拉格朗日乘子法和KKT条件
    • 微分(differential)
      • 表示形式
      • 法则
      • 常见导数公式
    • 统计学/概率论
    • 信息论
      • 香农熵(Shannon Entropy)
    • 博弈论
    • 不知道放到哪儿
    • 机器学习
      • 激活函数
      • 损失函数
    • 附录
      • 希腊字母的含义和发音
      • 数学符号的含义和发音
    • 参照

线性代数(linear algebra)

第一公式

f(x)=xwT+b

这是在机器学习中,最常见的公式。我把这个称为机器学习的第一公式,实际上就是线性分类函数(linear classifier)。
训练分类器的目标就是求出(w,b)。
其中:
x 是一个一行矩阵 [[x1,x2,...,xn]]。
w 是一个一行矩阵 [[w1,w2,...,wn]]。
x 和 w 的维度相同。
b 是一个数。
xwT=∑ni=1xiwi

,称为点积(dot product)。

有时,我们也会见到这个公式表示为类似下面的样子,它们的基本含义都是一样的。
f(x)=wx+b

f(x)=wTx+b
f(x)=w⃗ ⋅x⃗ +b

注:这里w

表示为一个一维数组(或者向量、矢量(vector)) [x1,x2,...,xn]。
注:一维数组:在数学上,可以理解为向量,表示多维空间上的一个点。
注:由于在线性代数中,矩阵乘法ab≠ba,所以对于表达式wTx,严格地说,要把矢量(向量)看做一列的矩阵(而不是一行的矩阵),才符合数学上的定义。
注:表达式w⃗ ⋅x⃗ 和wx是正确的,因为w和x

是矢量,这个符合矢量计算的定义。

矩阵的操作

由于,这篇文章是从数学的角度写的,所以我们先关注矩阵的操作。

换位(transpose)

矩阵的换位操作:将矩阵中的数按照对角线交换。
数学公式:wT

代码示例:

# Matrix Transpose
m = numpy.mat([[1, 2], [3, 4]])
print("Matrix.Transpose:")
print(m.T)
''' Output:
Matrix.Transpose:
[[1 3][2 4]]
'''

矩阵乘法

  • 矩阵相乘的含义
    如果一斤苹果10元,5斤苹果多少元?答案是:10∗5=50

如果一斤苹果10元,一斤梨20元,5斤苹果2斤梨一共多少元?
答案是:

[1020][52]=10×5+20×2=90

  • 我们可以看出矩阵相乘的约束:乘数1的列数要和乘数2的行数相等

  • 矩阵乘法不满足交换律

    m1⋅m2≠m2⋅m1

  • 我们再看看交换乘数后,计算的结果:

    [1020][52]=[10×520×510×220×2]=[501002040]

    比如:数20

    • 的含义是2斤苹果多少钱。

    举例说明它们的不同之处:

    m1=[12]

    m2=[1020]

    m1⋅m2的计算方法是:

    m1⋅m2=[12][1020]1∗10+2∗20=[50]

    m2⋅m1

    的计算方法是:

    m2⋅m1=1020110∗120∗1210∗220∗2=[10202040]

    • 计算公式
      矩阵相乘是:用矩阵1的每一行和矩阵2的每一列的点积,得到一个矩阵。
      l∗m

    的矩阵乘以 m∗n 的矩阵,形成一个l∗n

    • 的矩阵。

    x⋅y=[x1⋯xn]⎡⎣⎢y1⋯yn⎤⎦⎥=[∑ni=1xiyi]x⋅y=⎡⎣⎢x1⋯xm⎤⎦⎥[y1⋯yn]=⎡⎣⎢x1y1⋯xmy1⋯⋯⋯x1yn⋯xmyn⎤⎦⎥x⋅y=⎡⎣⎢⎢⎢x11x21⋯xm1⋯⋯⋯⋯x1nx2n⋯xmn⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢⎢y11y21⋯yn1⋯⋯⋯⋯y1qy2q⋯ynq⎤⎦⎥⎥⎥⎥=⎡⎣⎢∑ni=1x1iyi1⋯∑ni=1xmiyi1⋯⋯⋯∑ni=1x1iyiq⋯∑ni=1xmiyiq⎤⎦⎥

    • 代码演示:
    # Matrix Multiplication
    print("Matrix Multiplication")
    a = numpy.mat([1, 2])
    b = numpy.mat([[10], [20]])
    print(a * b)
    print(a.T * b.T)a = numpy.mat([[1, 2], [3, 4]])
    b = numpy.mat([[10, 20], [30, 40]])
    print(a * b)''' Output:
    [[50]]
    [[10 20][20 40]]
    [[ 70 100][150 220]]
    '''

    矩阵的各种乘积

    操作 数学符号 Python Demo
    点积(dot product) ab
      a.dot(b)
    numpy.dot(a, b)

    AB=(1,2)(1020)=1∗10+2∗20=50

     
    内积(inner product) a⋅b

    〈a,b〉

      numpy.inner(a, b)

    a⋅b=abT

     
    外积(outer product) a⊗b
      numpy.outer(a, b)

    A⊗B=(12)(1020)=(1∗102∗101∗202∗20)=(10202040)

     
    元素积(element-wise product, point-wise product, Hadamard product ) a∘b

    a⊙b

      numpy.multiply(a, b)

    A⊙B=(1324)(1020)=(1∗103∗102∗204∗20)=(10304080)

     

    注:Python中,矩阵数据可以表示为matrix和ndarray两种类型。
    这两种类型的操作非常接近,但是有细微的不同。
    ndarray * operation :element-wise product.
    matrix * operation :dot product.
    numpy.multiply for ndarray :element-wise product. same.
    numpy.multiply for matrix :element-wise product. same.
    numpy.dot for ndarray : inner product. 1-d array.
    numpy.dot for matrix :dot product. shape determined by values.
    numpy.inner for ndarray :inner product. 1-d array.
    numpy.inner for matrix :inner product. shape determined by values.
    numpy.outer for ndarray :outer product. same.
    numpy.outer for matrix :outer product. same.

    内积

    英文: inner product, scalar product。
    矢量的降维运算,变成一个数。
    矩阵的内积是每行每列的内积的矩阵。

    xy=〈x,y〉=∑ni=1xiyi

    x = numpy.array([1, 2])
    y = numpy.array([10, 20])
    print("Array inner:")
    print(numpy.inner(x, y))
    ''' Output:
    Array inner:
    50
    '''x = numpy.mat([[1, 2], [3, 4]])
    y = numpy.mat([10, 20])
    print("Matrix inner:")
    print(numpy.inner(x, y))
    ''' Output:
    Matrix inner:
    [[ 50][110]]
    '''

    外积

    矢量的升维运算, m

    维矢量和n维矢量的外积是m∗n为矩阵。
    矩阵的并集运算, a1∗a2维矢量和b1∗b2维矩阵的外积是(a1∗a2)∗(b1∗b2)为矩阵。

    x⊗y=⎡⎣⎢⎢⎢x1x2⋯xm⋯⋯⋯⋯x1nx2n⋯xmn⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢⎢y1y2⋯yp⋯⋯⋯⋯y1qy2q⋯xpq⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢x1y1⋯x1ny1x2y1⋯xmny1⋯⋯⋯⋯⋯⋯x1y1q⋯x1ny1qx2y1q⋯xmny1qx1y2⋯x1ny2x2y2⋯xmny2⋯⋯⋯⋯⋯⋯x1ypq⋯x1nypqx2ypq⋯xmnypq⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥

    x = numpy.array([1, 3])
    y = numpy.array([10, 20])
    print("Array outer:")
    print(numpy.outer(x, y))
    ''' Output:
    Array outer:
    [[10 20][30 60]]
    '''x = numpy.mat([[1, 2], [3, 4]])
    y = numpy.mat([10, 20])
    print("Matrix outer:")
    print(numpy.outer(x, y))
    ''' Output:
    Matrix outer:
    [[10 20][20 40][30 60][40 80]]
    '''

    注:有没有发现matrix outer 是vector outer的并集。

    元素积(element-wise product/point-wise product/Hadamard product

    • 计算公式

    x⋅y=[x1⋯xn][y1⋯yn]=[x1y1⋯xnyn]x⋅y=[x1⋯xn]⎡⎣⎢y1⋯ym⎤⎦⎥=⎡⎣⎢x1y1⋯x1ym⋯⋯⋯xny1⋯xnym⎤⎦⎥x⋅y=⎡⎣⎢x11⋯xm1⋯⋯⋯x1n⋯xmn⎤⎦⎥⎡⎣⎢y11⋯ym1⋯⋯⋯y1n⋯xn⎤⎦⎥=⎡⎣⎢x11y11⋯xm1ym1⋯⋯⋯x1ny1n⋯xmnynn⎤⎦⎥

    x = numpy.array([1, 3])
    y = numpy.array([10, 20])
    print("Array element-wise product:")
    print(x * y)
    ''' Output:
    Array element-wise product:
    [10 60]
    '''

    x = numpy.mat([[1, 2], [3, 4]])
    y = numpy.mat([[10, 20],[30, 40]])
    print("Matrix Add :")
    print(x + y)
    ''' Output:
    Matrix Add :
    [[11 22][33 44]]
    '''

    低等数学

    • 求总和公式
      这个大家应该都知道。

      ∑i=1Nxi=x1+x2+⋯+xn

  • 求总积公式

    ∏i=1Nxi=x1×x2×⋯×xn

  • 对数
    • 对数的含义:

      1. 求数的长度。
      2. 将乘法转变成加法。
      3. 解决下溢出问题:由于太多很小的数相乘造成的问题。
    • 数学表达

      log(x)=log10xlog2xln(x)

    • 由于不同底的对数的结果是等比关系,所以,有时底数是谁,是无所谓的。

  • 等比
    a

  • 等比于b。可用于算法复杂度计算。

    a ba∝b

  • 下取整(floor)和上取整(ceil)

    floor: ⌊x⌋ceil: ⌈x⌉

几何

范数(norm)

  • L1范数
    ∥w∥1

: L1范数,也就是各项目绝对值的和。

∥w∥1=∑ni=1|wi|

  • L2范数
    ∥w∥ or ∥w∥2

  • : L2范数,也就是各项目平方和的平方根。

    ∥w∥=∑ni=1w2i−−−−−−−√

    拉格朗日乘子法和KKT条件

    如果方程式f(x)=wx+b

    有不等式约束条件,拉格朗日乘子法和KKT条件提供了一种方法,可以计算(w,b)

    L(w,b,α)

    关于拉格朗日乘子法和KKT条件,请看:
    深入理解拉格朗日乘子法(Lagrange Multiplier)和KKT条件

    微分(differential)

    表示形式

    f′(x)or partial differential in Leibniz notation:∂f(x)∂xdydxor:∇f(x)∇x : the gradient of f at x

    含义

    df(x)dx=limh→0f(x+h)−f(x)hwhereddx is an operation of f(x)

    数学含义是在x

    点上,f(x)的变化除以x

    的变化。
    数学上可以认为是:斜率
    机器学习中指的是:梯度。
    计算梯度后,乘以一个比值(步长),可以得到矫正值,用于反向传播(矫正)权值。
    partial differential:偏微分,表示函数在某个维度上的微分。这时,可将其它维度看做常量。

    法则

    法则 微分 偏微分
    和法则(sum rule) (f+g)′=f′+g′
     

    ∂(u+v)∂x=∂u∂x+∂v∂x

     
    积法则(product rule) (f⋅g)′=f′⋅g+f⋅g′
     

    ∂(u⋅v)∂x=u⋅∂v∂x+v⋅∂u∂x

     
    链式法则(chain rule of differentiation) (f(g(x)))′=f′(g(x))g′(x)
     

    ∂z∂x=∂z∂y⋅∂y∂x

     

    常见导数公式

    f(x) f'(x)
    ax
      a
     
    xn
      nxn−1
     
    x+c
      1
     
    ex
      ex
     
    ln(x)
      1x
     

    统计学/概率论

    • 贝叶斯公式(Bayes formula)

    p(A|B)=p(B|A)p(A)p(B)wherep(A) : the probability of observing event A.p(B) : the probability of observing event B.p(A|B) : the probability of observing event A given that B is true.p(B|A) : the probability of observing event B given that A is true.

    比如:在判断垃圾邮件的算法中:
    P(A) : 所有邮件中,垃圾邮件的概率。
    P(B) : 出现某个单词的概率。
    P(B|A) : 垃圾邮件中,出现某个单词的概率。
    P(A|B) : 出现某个单词的邮件,是垃圾邮件的概率。

    信息论

    香农熵(Shannon Entropy)

    • 熵的定义
      在信息论中,熵是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。
      熵定义为信息的期望值。
      熵实际是对随机变量的比特量和顺次发生概率相乘再总和的数学期望。
      熵的单位通常为比特, bit 或者sh(annon) (基于2),但也用nat(基于自然对数)、Hart(基于10)计量,取决于定义用到对数的底。
      熵的单位不重要。(因为是求对数,所以是等比的。不理解这句话也无所谓。)
      熵值是一个>=0的值。
      如果为0,则表明结果可以准确预测。从下面的公式可以看出,其概率为1.

    • 熵的特征
      • 发生概率越小的信息,熵值越大。
      • 常识的熵为0。
      • 从计算损失的角度来说:熵值越大,说明损失越大。
    • 期望值
      在概率论和统计学中,一个离散性随机变量的期望值(或数学期望、或均值,亦简称期望,物理学中称为期待值)是试验中每次可能结果的概率乘以其结果的总和。
      比如掷骰子, 其点数的期望值是3.5:
      E(x)=1∗1/6+1∗2/6+1∗3/6+1∗4/6+1∗5/6+1∗6/6=3.5

    • 通俗的理解
      信息熵是:

      • 各个 (值的概率 * 值的长度) 的总和。
    • 数据集的信息熵的计算公式

    H(X)=E[I(X)]=E[−lnP(X)]=∑i=1nP(xi)I(xi)=−∑i=1nP(xi)logP(xi)(1)(2)(3)(4)whereH(X):数据集合X的信息熵值。E():求期望值。I():求信息值(惊奇值)。X:数据集合X。xi:数据集合X的标签的一个枚举值。I(xi):xi的资讯量(informationself).I(xi)=−log(P(xi))P(xi) : 发生x_i的概率。x的机率质量函数(probability mass function)。P(xi)=count(xi)/len(X).

    • 熵的作用

      • 计算损失(Loss function)
        用于调整梯度递减的步长。(本次熵(损失)比上次熵(损失)大,说明步长太大了。)
      • 用于决策树
        熵越大,说明特征(feature)的划分数据能力越强。

    博弈论

    • 倾向关系(preference relation)
      描述了玩家的倾向,x⪰y
    • 意味着“x至少和y一样好”。

    不知道放到哪儿

    • 求最大化参数
      数学表示
      argmaxcP(c)
    • 解释
      可以用于返回一个可能性对大的分类。
      返回当P(c)为最大值时c的值。

    例如:

    c∈{1,2}P(1)=0.9P(2)=0.1∴argmaxcP(c)=1

    • 返回最大值
      数学表示
      maxa∈AP(a)

    解释
    在所有a∈A的计算中,返回最大值P(a)

  • 约束条件(Subject to)
    数学表示
    y=2x+1,s.t. x>0

  • 解释
    当约束条件x>0,成立时,有y=2x+1
  • 定义上相等
    数学表示
    A≐B

  • 解释
    A的定义为B。

  • 2补数(2's complement)
    一种使用2进制表示有符号数的方法。
    第一位为符号位,
    如果是0,则记做0;
    如果为1,则记做−2n−1, n is the size of the number


  • 例如: 0010为2; 1010为-6。

机器学习

激活函数

请看我的另外一个博文:
神经网络学习笔记 - 激活函数的作用、定义和微分证明

损失函数

请看我的另外一个博文:
神经网络学习笔记 - 损失函数的定义和微分证明

附录

希腊字母的含义和发音

  大写 小写 English 发音 中文 含义
1 Α α alpha a:lf 阿尔法  
2 Β β beta bet 贝塔  
3 Γ γ gamma ga:m 伽马  
4 Δ δ delta delt 德尔塔 δ: delta value,偏差值
5 Ε ε epsilon ep'silon 伊普西龙  
6 Ζ ζ zeta zat 截塔  
7 Η η eta eit 艾塔  
8 Θ θ thet θit 西塔  
9 Ι ι iot aiot 约塔  
10 Κ κ kappa kap 卡帕  
11 λ lambda lambd 兰布达  
12 Μ μ mu mju  
13 Ν ν nu nju  
14 Ξ ξ xi ksi 克西 ξ: slack variable,松弛变量
15 Ο ο omicron omik'ron 奥密克戎  
16 π pi pai π: 圆周率
17 Ρ ρ rho rou  
18 σ sigma 'sigma 西格马  
19 Τ τ tau tau  
20 Υ υ upsilon jup'silon 宇普西龙  
21 Φ φ phi fai 佛爱  
22 Χ χ chi phai  
23 Ψ ψ psi psai 普西  
24 Ω ω omega o'miga 欧米伽  

松弛变量(slack variable):在SVM中,为了处理异常点(跑到另一个分类中的点),设定的容忍值。

数学符号的含义和发音

  大写 小写 English 发音 中文 含义
1
    partial - 偏分 偏分
1
    infinity - 无穷 无穷

参照

  • Bayes' theorem
  • 希腊字母表(配读音)
  • cs231n.github.io
  • 矩阵乘法的本质是什么?

如有希望介绍的数学概念,请写到评论中,我有空会加上。

原文:https://www.cnblogs.com/steven-yang/p/6348112.html

机器学习中的基本数学知识相关推荐

  1. 总结:机器学习中的基本数学知识

    注:本文的代码是使用Python 3写的. 机器学习中的基本数学知识 线性代数(linear algebra) 第一公式 矩阵的操作 换位(transpose) 矩阵乘法 矩阵的各种乘积 内积 外积 ...

  2. 机器学习中的小数学知识

    1.如何通俗易懂地解释「协方差」与「相关系数」的概念:协方差能够表示变量相关性的原因,相关系数可以看成一种剔除了两个变量量纲影响.标准化后的特殊协方差. 2.置信区间理解:当计算出样本均值时如何基于样 ...

  3. 人工智能中的核心数学知识体系

    下面讨论重要的问题:AI用到了数学体系中的哪些核心知识? 当你成为一个AI领域的熟手之后,每当遇到难以解决的问题时,其实最常见的问题多半是找不到解决当前问题的思路,即没有好的算法解决当前遇到的问题.有 ...

  4. 干货丨一文介绍机器学习中基本的数学符号

    在机器学习中,你永远都绕不过数学符号. 通常,只要有一个代数项或一个方程符号看不懂,你就完全看不懂整个过程是怎么回事了.这种境况非常令人沮丧,尤其是对于那些正在成长中的机器学习初学者来说更是如此. 如 ...

  5. 入门 | 一文介绍机器学习中基本的数学符号

    本文介绍了机器学习中的基本数学符号.具体来说有算数符号,包括各种乘法.指数.平方根以及对数:数列和集合符号,包括索引.累加以及集合关系.此外,本文还给出了 5 个当你在理解数学符号遇到困难时可以应急的 ...

  6. Useful Things To Know About Machine Learning (机器学习中一些有用的知识)

    Useful Things To Know About Machine Learning 原文作者:Jason Brownlee 原文地址:https://machinelearningmastery ...

  7. 一文介绍机器学习中基本的数学符号

    本文介绍了机器学习中的基本数学符号.具体来说有算数符号,包括各种乘法.指数.平方根以及对数:数列和集合符号,包括索引.累加以及集合关系.此外,本文还给出了 5 个当你在理解数学符号遇到困难时可以应急的 ...

  8. 机器学习都需要有哪些数学知识?

    随着科技的快速发展,人工智能的重要性日渐显现. 机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正.可解释性.易用性.如同所有的学科一样,它的基本思想不是请求式的过程,而是需要耐心地用高级数学 ...

  9. 机器学习中的数学基础相关知识总结

    文章目录 目录: 前言: 1.导数(曲线变化的快慢).二阶导数(曲线斜率变化的快慢特别是反映曲线的凸凹性)的概念. 2.常用的导数公式: 3.微分和积分的数学含义: 4.泰勒公式及含义 5.梯度的概念 ...

最新文章

  1. SQLite的数据类型总结
  2. 水鱼 学习回顾 <1>
  3. 查看计算机或网络资源列表的命令,dos命令net view图文教程,显示网络计算机列表查看共享资源...
  4. bzoj 1597: [Usaco2008 Mar]土地购买【斜率优化】
  5. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·006【底部导航开发】
  6. 如何通过git客户端上传项目到github上
  7. windows卸载服务
  8. 【TypeScript】使用CRA创建支持TS的React项目(从踩坑到放弃)
  9. 如何用电脑破解WiFi
  10. Java web课程设计-购物系统
  11. 微信小程序点赞成功,取消点赞、评论。
  12. Gizmo for Linux 1.1.0.39
  13. 车载导航进阶「不输」手机,哪些供应商在领跑导航引擎赛道
  14. linux stat获取文件大小,Linux查看文件大小的几种方法示例 stat du ls awk (转)
  15. Windows10迈克菲McAfee添加文件白名单,排除隔离文件
  16. 最近写的一个开源软件——PocketSMS
  17. LoRaWAN协议-Class A类设备分析
  18. vs-code点击open with live server 浏览器没有反应
  19. 2019-05-23 聚生网管配置;聚生网管应用;
  20. 整点没用的——Knuth洗牌算法

热门文章

  1. Git子模块引用外部项目
  2. 【转载】ceph作为OpenStack的后端存储解决方案
  3. ENTER键指定事件
  4. MongoDB导出场景查询优化 #1
  5. [转]VC++中对文件的写入和读取
  6. Oracle10g中安装Perl环境所产生的冲突
  7. ruby的module与Java的interface以及C++的friend
  8. laravel nosql
  9. vi/vim命令怎么在Linux系统中使用
  10. 为什么越来越多的企业使用互联网电话(VoIP)?—Vecloud微云