在学习机器学习之前,应该具有坚实的计算机基础。

深入学习了数据结构与数据结构的算法、计算机组织和系统架构,也具有编写一个完整项目的能力。

我的 AI 专题,主要是以 高中数学 为基础的,所以您应该看看 计算数学 专题。

 

                                                                                      《目录》

数学符号

  • 求和符号
  • 求积符号
  • 对数
  • 绝对值
  • 距离
  • 概率
  • 微分表示
  • 梯度表示
  • 最大化参数 
  • 损失函数

函数极值

  • 极值
  • 求导
  • 点到直线的距离公式
  • 似然估计
  • 最小二乘法

统计与概率论

  • 几个概念 
  • 贝叶斯概率
  • 几个分布
  • 模型评估
  • 线性代数
  • 微积分

 

传统算法多基于数据结构,掌握传统算法的从业者多是软件工程师;

机器学习的算法偏向概率、统计及优化,从业者多是算法研究员。

俩者之间并没有歧视,各有千秋。

 

机器学习涉及数学范围广,不过只是一部分,大致有:

              微积分、概率论、信息论、线性代数、图论。 

 

从数学符号起,突然想起来,您可能一看到数学符号就想睡。

您想,这是什么原因 ?

是因为 不熟 ,那您得多多推导符号,自然就记住了。

所以,下面符号认真的抄一遍

 

数学符号

 

求和符号:

机器学习数学方面的介绍[计算机数学专题(9)]_方差

机器学习数学方面的介绍[计算机数学专题(9)]_方差_02

求积符号:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_03

机器学习数学方面的介绍[计算机数学专题(9)]_极值_04

 

对数:

   

机器学习数学方面的介绍[计算机数学专题(9)]_极值_05

机器学习数学方面的介绍[计算机数学专题(9)]_极值_06

     运用 "勾股定理",具体的动图演示在 《计算几何》 的 "点" 目录中。

     

机器学习数学方面的介绍[计算机数学专题(9)]_极值_07

 

          

          因为距离有时也叫 "相似度",依据 "相似度" 可以判断事物的相似性。

          余弦距离:多用于计算机新闻分类,具体参见《三角函数》的 "计算机新闻分类"。

         

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_08

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_09

 

概率:

   

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_10


机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_11

 

机器学习数学方面的介绍[计算机数学专题(9)]_极值_12

 

机器学习数学方面的介绍[计算机数学专题(9)]_极值_13


机器学习数学方面的介绍[计算机数学专题(9)]_极值_14

        如果一个函数在一点的一个邻域内处处都有确定值,而以该点处的值最大(小),这函数这该点处的值就是一个极大(小)值。

        如果 ta 比邻域内其他各点处的函数值都大(小),ta 就是一个严格的极大(小)。

        该点就相应的称为一个极值点或严格极值点。

 

         求导:

                 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_15

机器学习数学方面的介绍[计算机数学专题(9)]_方差_16

请看函数图像:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_17

p.s. (-1, 3) 等 ,都是开区间。是不包含 括号 里的俩个数字的。

从 (-∞, -1) 的 f(x) 图像是上升的,到 (3, +∞) 的 f(x) 图像也是上升的,如图。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_18

 

也可以编程把函数图像画出来,因为可视化是很重要的。

from sympy.parsing.sympy_parser import parse_expr
from sympy import plot_implicit
from sympy import plot_implicit, cos, sin, symbols, Eq, And

x, y = symbols('x y')
p2 = plot_implicit(Eq(x**3 -3*x**2 -9*x +5, y), (x, -3, 5), (y, -30, 30))

 

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_19

 

机器学习在学习参数的过程中并没有刚才举的例子有什么差别,只是最优化问题仅比这个问题前进了一步。

  1. 多一些约束条件
  2. 求导更复杂
  3. 变量会更多一点

因此,高中数学也是可以做机器学习,只不过稍稍会复杂一点。

 

点到直线的距离公式

   

机器学习数学方面的介绍[计算机数学专题(9)]_极值_20

机器学习数学方面的介绍[计算机数学专题(9)]_极值_21

      比较流行的是 向量法 证明。

      向量是即有大小又有方向的量。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_22

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_23

机器学习数学方面的介绍[计算机数学专题(9)]_极值_24

向量法 证明 点到直线的距离,见下图。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_25

看不懂也没关系,看我的《计算几何》直线篇证明。如果觉得写的不过详细,发评论证明过程我会写的很细(加图示)。

 

似然估计

   

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_26

机器学习数学方面的介绍[计算机数学专题(9)]_方差_27

机器学习数学方面的介绍[计算机数学专题(9)]_方差_28

            

最小二乘法

           1809年,高斯使用的最小二乘法的方法发表于《天体运动论》中。而在几年前,法国科学家勒让德独立发明了 "最小二乘法",但因不为世人所知而默默无闻。

            后来,俩人也因此发生争执。

            1829年,高斯提供了最小二乘法的优化效果强于其他方法的证明,因此被称为 "高斯-马尔可夫定理"。

            最小二乘法可以说是,拟合的过程,如拟合直线。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_29

             

         图上的这些点中,可以拟合出一条线,并不需要此线都经过这些点,只需要一个整体的趋势拟合出来即可。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_30

         又如下图,曲线会让整体趋势更明显。

         假定 x, y 有如下数值:

y

1.00

0.90

0.90

0.81

0.60

0.56

0.35

x

3.60

3.70

3.80

3.90

4.00

4.10

4.20

 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_31

       

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_32


     

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_33

        代码实现:

import numpy as np
import matplotlib.pyplot as plt

def lsm(x,y):
    N = len(x)
    sum_x = sum(x)
    sum_y = sum(y)
    sum_x2 = sum(x ** 2)
    sum_xy = sum(x * y)
    A = np.mat([[N, sum_x],[sum_x, sum_x2]])
    b = np.array([sum_y, sum_xy])
    return np.linalg.solve(A,b)    # 线代

X = np.arange(0, 10, 0.1)
Z = [8 + 7 * x for x in X]
Y = [np.random.normal(z,4) for z in Z]
plt.plot(X, Y, 'k.')
plt.show()

       

机器学习数学方面的介绍[计算机数学专题(9)]_方差_34

 

 

 

a0, a1 = lsm(X, Y)
_X = [0, 10]
_Y = [a0 + a1 * x for x in _X]

plt.plot(X, Y, 'k.', _X, _Y, 'b', linewidth = 2)
plt.title('y = {} + {}x'.format(a0, a1))
plt.show()

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_35

 

机器学习数学方面的介绍[计算机数学专题(9)]_极值_36

                     平均值:简称为 "均值",所有数相加再除以总数的个数。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_37

                 

 

                     中位数:一组数以升序排列,位于中间的数是中位数。如果这组数是偶数,中位数取中间俩数的平均值。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_38

 

 

                     众数:一组数中出现频数最大的数,众数可以多个。

                     适合平均值和中位数不适合的场合,多运用于让少数服从多数、分组。

                     还有一些特殊情况,平均值、中位数、众数都一样时,运用哪个比较都会失效。

                    

小红

7

9

9

10

10

10

10

11

11

13

 

小白

2

4

6

7

7

10

10

10

11

13

30

                 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_39

                   举个例子,看图。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_40

           

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_41

           

 

     

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_42


机器学习数学方面的介绍[计算机数学专题(9)]_方差_43

       

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_44

 

贝叶斯概率

             

机器学习数学方面的介绍[计算机数学专题(9)]_极值_45

机器学习数学方面的介绍[计算机数学专题(9)]_极值_46

              那么,看了这个故事后您觉得该怎么分 ?

机器学习数学方面的介绍[计算机数学专题(9)]_方差_47

             

机器学习数学方面的介绍[计算机数学专题(9)]_方差_48

 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_49

             

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_50

           

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_51

机器学习数学方面的介绍[计算机数学专题(9)]_方差_52

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_53

    推荐资料:《10分钟用睡觉这件事玩转贝叶斯推断》(英文)

                阅读前,我补充一下贝叶斯的推理过程。

                贝叶斯说,你对某个假设的相信程度,应该用一个概率来表示 ——

  •   P(假设)。

                 P = 1 就是绝对相信,P = 0 就是绝对不信,P = 15% 就是有一点信。咱们先把信仰给量化。

                 有了新的证据我们要更新这个概率,变成 ——

  •   P(假设|证据)

                 这个叫条件概率。

                 一般来说,P(A|B) 的意思是 “在 B 事件是真的条件下,A 事件的概率”。

                 咱们举个例子,A 表示下雨,B 表示带伞。一般来说这个地方不常下雨,所以 P(A) = 0.1。

                 但是今天你注意到爱看天气预报的老张上班带了伞,那你就可以推断,今天下雨的概率应该增加 —— 在“老张带伞”这个条件下的下雨概率,就是 P(A|B)。

                 注意如果我们画个因果关系,缘故 → 结果,在这里就是 “下雨 → 带伞” ,A → B,和 “老王是凶手 → 在老王家里找到凶器”,它们都相当于 “假设 → 证据”。

                 现在我们想算的是 P(假设|证据),是从结果倒推缘故,这叫“逆概率”,这个不好算。

                 一般都是从缘故推结果容易算。比如说你看见一个小孩向窗户扔球,你可以估计窗户被打碎的概率有多大,这是“正向概率”;但如果你看到窗户碎了,想要推测窗户是怎么碎的,那就非常困难了。

                 所以咱们要算的是一个逆概率,这要怎么算呢?这就是贝叶斯的方法。

 

贝叶斯公式

                 为了计算 P(A|B),我们考虑这么一个问题:A 和 B 都发生的概率有多大 ?

                 这道题有两个算法。

                 一个办法是先算出 B 发生的概率有多大,是 P(B);再算 B 发生的情况下,A 也发生的概率有多大,是 P(A|B),那么 A、B 都发生的概率,就是把这两个数相乘,结果是 P(A|B)×P(B)。

                 同理,先考虑 A 发生再考虑 A 发生的条件下 B 也发生,结果是 P(B|A)×P(A)。

                 这两个算法的结果一定相等,P(A|B)×P(B) = P(B|A)×P(A),于是

机器学习数学方面的介绍[计算机数学专题(9)]_极值_54

                 这就是贝叶斯公式。之所以要这么算,就是因为常常是 P(A),P(B) 和 P(B|A) 都容易知道,而这个逆概率 P(A|B) 只能用这个公式间接知道。
 

               贝叶斯法则和其他统计概念很难通过只用到字母的抽象公式、或者一些虚构的情景来理解。在作者William Koehrsen上过的许多课程中,通常会用一些并不是非常有用的例子来展示贝叶斯法则,例如抛硬币或者从缸里抽彩球,但是直到这一个项目才让作者最终理解了如何应用贝叶斯推断。

               

               本文中作者展示了贝叶斯推断通过考虑新的证据来修正我们的信念,从而能更好地模拟真实世界。随着我们收集到更多的证据,我们需要持续调整我们的预测,而贝叶斯公式正好为我们提供了合适的框架。

 

               贝叶斯推断的基本思想是通过更多数据,从而"犯少一点错误"。推断过程很直接:我们首先有一个初始信念,被称为先验,当我们获得额外的信息后可以对这个信念进行修正更新。虽然我们并不知道这个过程就是贝叶斯推断,但是我们一直都在使用这个技巧。

               

               举个例子,我们可能一开始认为我们有百分之五十的可能性会在本季度末升职。如果我们从经理那得到正面的反馈,那么我们就向上调整升职可能性,而相反地,如果我们把咖啡机弄得一团糟,那么我们可能就得降低一下概率了。随着我们不断地获得更多的信息,我们可以不断地修正我们的估计以逼近“正确”的答案。以上我们直觉的行为可以用以下简单却强大的公式来形式化描述,该公式被称为贝叶斯法则(http://www.eecs.qmul.ac.uk/~norman/BBNs/Bayes_rule.htm):

机器学习数学方面的介绍[计算机数学专题(9)]_方差_55

          

 

               等号左边那项被称为后验,我们读作给定事件B发生后事件A发生的条件概率。在等号右边,P(A)被称为先验,或者被叫作我们对事件A发生的概率的初始信念,P(B|A)被称为似然(也是一个条件概率),这一项是可从数据中得到的,P(B)则是一个归一化常数使得概率分布之和为1。用统计的语言来描述贝叶斯法则的一般形式是后验概率等于似然乘以先验除以归一化常数。这个简短的等式引出了贝叶斯推断的整个领域,也给人们带来了对世界进行推理的有效方法。

 

                虽然等式中的A和B是非常好的占位符,但是它们并不能很好地帮助我们了解如何使用这个概念。为了达到这个目的,可以应用贝叶斯法则去解决一个真实世界的问题。

 

                在我自己的生活中,我一直在研究的一个问题就是睡眠模式。我从自己携带的Garmin Vivosmart智能手表中收集了超过两个月的数据,这些数据显示了我何时入睡和起床。在上一篇文章中,我用马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)方法计算出了在给定的时间我睡着了的概率。最终模型显示,睡眠的最有可能的分布是一个关于时间的函数(MCMC是一种近似方法),如下图所示。

 

               

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_56

 

               这是只考虑时间因素的情况下我睡着了的概率。要是我们知道时间的同时还知道其他的证据又会怎样?如果知道我的卧室灯亮着,这会如何改变我睡着了的概率?这就是我们可以利用贝叶斯法则来更新我们的估计的地方了。对于特定时间,如果我们知道我的卧室灯的信息,那么我们可以利用上面的概率分布作为我们的先验,然后应用贝叶斯公式:

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_57


机器学习数学方面的介绍[计算机数学专题(9)]_方差_58

机器学习数学方面的介绍[计算机数学专题(9)]_极值_59

这些代码。

Jupyter Notebook:https://github.com/WillKoehrsen/ai-projects/blob/master/bayesian_inference/bayes_rule_applied.ipynb

             代码输出了以下答案:

<p ><span class="" >Time</span>: 09<span class="" >:45:00</span> <span class="" >PM</span>     <span class="" >Light</span> <span class="" >is</span> <span class="" >OFF</span>.<br   /><span class="" >The</span> <span class="" >prior</span> <span class="" >probability</span> <span class="" >of</span> <span class="" >sleep</span>:    12<span class="" >.06</span>%<br   /><span class="" >The</span> <span class="" >updated</span> <span class="" >probability</span> <span class="" >of</span> <span class="" >sleep</span>:  40<span class="" >.44</span>%<br   /></p>

               我们再一次发现额外信息改变了我们的估计。现在,如果我的妹妹打算在晚上9:45打电话给我,而且她以某种方法知道我的卧室灯亮着,那么她就可以参照这条等式来判断我是否会接电话了(假设我醒着的时候我总会接电话)!谁说你不能在日常生活中使用统计学的?

看到数值结果很有帮助,但是数据可视化可以更加清晰地说明问题。在与别人交流想法时,要是他们不能直接通过方程来理解,那么我总是试着引入图像来进行解释。下面,我们可以利用额外的数据来对我睡着了的先验和条件概率分布进行可视化。

 

                          

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_60

 

                            当我的卧室灯亮着时,曲线向右进行了移动,意味着在某一特定的时间点我睡着的概率很低。相似地,如果我的灯灭了,曲线向左进行了移动。想从概念上理解一个统计学概念很困难,但是这个插图正好说明了我们为什么要使用贝叶斯法则。如果我们想在这个世界犯少一点错误,那么额外的信息应该改变我们的信念,而贝叶斯推断正是利用一个系统的方法来更新我们的估计。

 

 

                              为什么要在我的卧室灯这里就止步不前呢?我们可以在模型中使用尽可能多的信息,这个模型也会继续变得更加的精确(只要数据告诉我们相关情况的有用信息)。举个例子,如果我知道在我睡着的情况下,我的手机在充电的似然是95%,那么我们就可以把这个知识加入到我们的模型中。

 

                              在这里,我们假设,在给定我是否睡着的信息的情况下,我的手机正在充电的概率条件独立(https://en.wikipedia.org/wiki/Conditional_independence)于我的卧室灯亮着的概率(独立性是一个稍微高级点的概念,但是它可以让我们简化许多问题)。利用额外信息的贝叶斯公式如下表示:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_61

 

                                这看上去可能有点吓人,但是利用一点Python代码,我们可以写一个函数来为我们做这些计算。我们输入任意时间,以及灯的开关状态和手机状态这两种状态信息的任意组合,然后这个函数就可以返回更新过的我睡着的概率。

 

                                 我将跳过数学(我让我的电脑帮我计算)并展示结果:

<p >Time <span class="" >is</span> <span class="" >11</span>:<span class="" >00</span>:<span class="" >00</span> PM     Light <span class="" >is</span> ON     Phone IS NOT charging.<br /><br />The prior probability <span class="" >of</span> sleep:    <span class="" >95.52</span>%<br />The updated probability <span class="" >of</span> sleep:  <span class="" >1.74</span>%<br /></p>

 

                                 在晚上11点,没有额外信息的情况下,我们几乎可以肯定我睡着了。然而,一旦我们有了额外信息:我的灯亮着,手机没有在充电,我们就可以判断我睡着的可能性很低。下面是另一组输入得到的输出结果:

<p >Time <span class="" >is</span> <span class="" >10</span>:<span class="" >15</span>:<span class="" >00</span> PM     Light <span class="" >is</span> OFF    Phone IS charging.<br   /><br   />The prior probability <span class="" >of</span> sleep:    <span class="" >50.79</span>%<br   />The updated probability <span class="" >of</span> sleep:  <span class="" >95.10</span>%<br   /></p>

 

                                 根据具体的情况,概率会变高或变低。为了证明这一点,我们可以观察灯和手机状态的四种不同组合,以及这些组合是如何改变概率分布的:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_62

 

                                  这幅图包含了许多信息,但是关键点是概率曲线随着证据的不同而发生改变。我们获得更多数据的同时,也可以更好的修正我们的估计。

 

                                  贝叶斯法则和其他统计概念很难通过只用到字母的抽象公式、或者一些虚构的情景来理解。如果你理解一个概念有困难,那么去找出一个你可以应用它的场景,或者看看别人成功应用它的例子!

 

                                  当我们把概念转化到具体问题时,我们才真正的学到东西。我们不仅可以通过这种方式学到新技能,而且我们还能做一些很酷的项目!成功掌握数据科学需要持续的学习,不断为你的技能添加新技术,并且为不同任务找到最佳的解决方案。

        记录贝叶斯的方法有很多,需要您会喜欢这一种。

         贝叶斯决策理论:

  1.    已知类条件概率的先验概率;
  2.    利用贝叶斯公式转换为后验概率;
  3.    根据后验概率大小进行决策分类。

 


 

   几个分布

          分布其实是一种统计出来的频数,e.g.

          一组数:

1

2

2

3

3

3

4

4

5

          看这组数的分布,建议画直方图?。

  •           1,出现 1 次。
  •           2,出现 2 次。
  •           3,出现 3 次。
  •           4,出现 2 次。
  •           5,出现 1 次。

            手画出来大概是这样,

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_63

              推荐您用 Python 实现可视化,推荐网站:https://plot.ly/python/

机器学习数学方面的介绍[计算机数学专题(9)]_极值_64

 

             离散分布:有限个->分布离散

             连续分布:无限个->连在一起

 如图,

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_65

            柱子是离散分布,ta 是离散的且有限,蓝线是连续分布,ta 是连续的且无限。

 

            直方图纵坐标归一化后就成了概率,归一化是这样。

            先统计各个数字出现的次数(上面就是这样做的),再除以总次数即可得到概率。

            常见的分布: 

                    均匀分布,每一个项目出现的概率是一样。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_66

                    几何分布,举个问题。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_67

  • , 代表第一次命中?的概率。
  •                       ......

机器学习数学方面的介绍[计算机数学专题(9)]_方差_68

 

                            几何分布的一般公式,见图。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_69

                   

                          二项分布,举个问题。[想轻松的学习可以看《数学女孩4随机算法》的第 5 章]

                             

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_70

                            概率分布图示,

机器学习数学方面的介绍[计算机数学专题(9)]_方差_71

二项分布应用场景,

  • 多次实验是独立的
  • 每次实验概率相同
  • 试验结果为俩分类

  

                           泊松分布,举个问题。

                                 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_72

泊松分布,应用场景

  • 独立事件
  • 同时间内概率分布相同
  • 关注某个时间段内的发生次数的概率分布

 

                          Beta 分布

                          

机器学习数学方面的介绍[计算机数学专题(9)]_方差_73

                           

                          正态分布,也叫高斯分布。


模型评估

          稍稍介绍,为看懂下文做准备。

          机器学习里常用的是 ROC曲线 & AUC,先从ta的源点说起 --- 混淆矩阵。

          混淆矩阵在二分类问题中,会有 4 种情况,一般我们只讨论二分类问题,多分类情况另外说。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_74

       

机器学习数学方面的介绍[计算机数学专题(9)]_方差_75

        评估预测模型的统计度量方法有很多,很多度量指标之间是相关的,相同的模型可能在一个度量中表现很好,却在另一个度量中表现很差。所以在实际应用中,我们应根据模型的类型以及模型以后的应用场景,来决定采用哪种度量方式。下面就4种常用的评估方法及其适合的应用场景做一些介绍

  • 混淆矩阵(Confusion Matrix)
  • ROC曲线 & AUC
  • K-S指标
  • 分数排名评估(Decile Analysis) & 提升度图

 

混淆矩阵(Confusion Matrix)

机器学习数学方面的介绍[计算机数学专题(9)]_极值_76

    对于一个分类模型,因变量(即常说的Y值)输入模型时必须是取值为0或1的二值型数据,比如对流失预测模型来说,0表示没有流失,1表示流失。很多统计软件在建模后,都会自动给出一个混淆矩阵及其衍生评估指标,很多统计课本在讲到分类模型评估时也喜欢推荐这种方法。

 

     我们不能单独地去用某一个指标来评估分类器的好坏,并不是说某一个指标越好模型就越好。因为有些指标是相互影响的,比如Precision和Recall,一般情况下,Precision过高,Recall就会低;Recall过高,Precision就会低。

 

      所以我们如果用这种方法来评估的话,最好综合考察几个指标,比如在自然语言处理(NLP)中的信息检索(IR)等领域,经常用Precision,Recall,和F1-score来同时评估检索和分类信息好坏。另外不同的应用场景及业务要求可能会侧重不同的指标,比如在营销活动中,对(a+c)个客户进行了营销活动,只有a个客户响应了活动,业务人员会看重Precision(营销上俗称命中率);在疾病诊断中,假阴性(有疾病但是却认为正常的)造成的后果要严重于假阳性的结果,所以会看重Sensitivity和Specificity之间的平衡。

 

     但是混淆矩阵这类评估方法有时会对一些刚接触数据分析的人产生误导,以为分类模型比如逻辑回归(Logistic Regression)、决策树(Decision Tree)等得出来的结果Y值就是0或1,混淆矩阵中的指标都是固定的。其实分类模型(比如Logistic回归),是对一个样本Y取值为1的概率p进行测算,然后根据测算的概率预测它的取值是0还是1。这就关系到一个阈值的选取,不同的阈值就会算出不同的混淆矩阵及相应评估指标值。如下图,

机器学习数学方面的介绍[计算机数学专题(9)]_极值_77

 

    一般的统计软件默认按照0.5的阈值进行划分:p<0.5,则Y为0;p≥0.5,则Y为1。当训练模型用的是一个均衡的数据集(即Y为1的样本占总体的50%),那么0.5也许是一个合适的阈值;但是如果训练模型用的不是一个均衡的数据集,那么0.5就不是一个最佳的阈值;有些书上会推荐用KS值对应的阈值来划分,再计算混淆矩阵。当然也可以结合实际应用场景和侧重指标,比如风控会从风险和收益之间做一个权衡,从业务上给出最优阈值。

 

    写到这,也许有人会说了,这样看来同一个模型,混淆矩阵算出来的指标是相对的,会变的,而且在某些实际场景中,比如某个客户未来的流失行为简单的划为Y=1(流失)或Y=0(保留),缺少一个中间的过渡状态,并不太适合后期的运营。如果用流失的可能性,这样一个连续渐进的过程来描述更利于后期的应用。那么有没有其他的方法,能有固定的指标去比较不同的模型吗?当然有,我们来看剩下的三种方法吧。

 

ROC曲线 & AUC

        ROCReceiver Operating Characteristics的缩写。ROC曲线实际上是从混淆矩阵衍生出来的图形。通过前面混淆矩阵的介绍,我们知道不同的阈值会算出不同的Sensitivity(也就是Recall)和Specificity,这两个指标的方向是刚好相反的,当阈值减少时,更多的样本被归为1,sensitivity增加,而specificity相应减少(1-specificity相应增加)。为了更清楚地描述它们的对应关系,我们把基于不同的阈值而产生的一系列sensitivity和1-specificity画在同一个图上,连成一条曲线,这条曲线就是ROC曲线。如下图,

机器学习数学方面的介绍[计算机数学专题(9)]_极值_78

    横轴是1-Specificity (FPR),纵轴是sensitivity (TPR),整条ROC曲线呈现递增的趋势。这条曲线跟评判模型的好坏有什么关系呢?这里要引入“两点一线”。首先来看图中的对角线(45度线),这是一条baseline。这条线表示如果不使用该模型,随机地把客户归为某个类别,那么你得到的TP和FP之比,应该等于实际positive(样本中实际为1的个数)与实际negative(样本中实际为0的个数)之比,也就是说等于样本中实际1和0的分布。

 

机器学习数学方面的介绍[计算机数学专题(9)]_方差_79

 

    这样sensitivity/(1-specificity)始终等于1,这就是45度线。一个模型要有所提升,首先ROC曲线就要偏离45度线,那么它往上偏离还是往下偏离好呢?

 

     这时我们来看图中的两个点,左上方的(0,1)和右下角的(1,0)。我们期望最理想的情况(即把样本中的1和0都正确地分出来)下,sensitivity为1,同时specificity也为1(1-specificity为0),这就是左上方的完美点(0,1);我们再来看右下角的(1,0),即sensitivity为0,specificity也为0,这意味着这个模型是一个最糟糕的分类器,避开了所有正确答案。因此当ROC曲线越往左上方靠拢的话,sensitivity和specificity就越大,模型的效果就越好。

 

     ROC曲线非常直观,但是不足以定量。如果将两个模型的ROC曲线放在一起比较,如何知道哪个更优呢?这时我们需要借助AUC这个定量指标,AUC是Area Under the ROC Curve的简称,翻译过来就是在ROC曲线下的面积。从ROC曲线中我们可以看到45度线下的面积是0.5,ROC曲线与它偏离越大,ROC曲线越往左上方靠拢,它下面的面积即AUC值就越大,比如上图中的AUC值为0.826。AUC值介于0.5到1之间,它可以定性地评价分类器的好坏,理论上值越大越好。

 

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_80

 

    一般来说,如果AUC > 0.7,这个模型就有应用的价值。

    由于一个给定模型的ROC曲线和AUC值都是一样的,方便于多个模型的比较,所以这种评估方法适用的场景比较广,建议做完一个分类模型后,看一下ROC的结果。

 

K-S指标

在介绍K-S指标前,我们先介绍一下K-S图的画法,从某种角度上来说,K-S图与ROC曲线其实是一回事。K-S图是将按从小到大不同阈值切分计算的TPR和FPR作为纵坐标,从小到大的阈值作为横坐标,拆开画图,这样图中就有对应有两条曲线,这就是KS图。见下图,

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_81

 

      K-S值就是K-S图中两条曲线之间的最大间隔距离,图中呈现的蓝色直线就是最大距离。K-S指标就是衡量模型将两类样本(即Y实际为1或0的两类样本)区分开的能力,它能找出模型中差异最大的一个分段,适合用于做cut-off 分界点。K-S值也是风控评分模型中最受欢迎的指标之一,K-S值越大,表明这个模型能将两类样本区分开来的程度越大。一般来说,K-S值大于0.2,这个模型就勉强可以接受了,0.3到0.5之间模型具有区分能力,K-S大于0.5以上的模型区分能力就很好了。另外K-S值与AUC值是同方向的,AUC高的话,K-S也会高。

 

Decile Analysis & 提升度图

 

      分数排名评估(Decile Analysis)这种方法是营销响应模型和风险评分模型中经常用到的评估方法,列表展示不同区段模型的性能。我们以营销响应模型为例,说一下大致的做法。

 

假如有某产品A,我们把客户是否购买产品作为目标变量定义为Y,购买产品为1(即对产品做出响应),没有购买为0(即对产品不响应)。总客户人数为6000,其中未来只有1000人会买产品A,即基准响应率为16.67%(1000/6000)。市场人员开展营销活动时,由于经费原因不可能对所有客户做营销,只能抽取部分客户(比如2000人)做营销,那么这时就希望抽取的样本里尽可能抽中那些未来会买产品的人(即Y实际为1的人)。如果我们不用模型,随机抽2000个客户,那么其中只有16.67%人会作出响应。

 

 

  1. 当我们构建好一个响应模型后,利用已建好的模型,对这些客户未来购买某种产品的可能性或者说概率进行测算。这样每一个客户都将得到一个购买可能性的概率值;
  2. 对客户按照上面计算好的概率从高到低进行排序;
  3. 通常将排好序的客户等分成十段。分位数10表示第一个十等分段,即购买可能性最高的10%的个体,分位数20表示第二十等分段,即下一个10%的群体,以此类推。
  4. 对分好段的数据,每段可以依次统计以下指标(见下表)

机器学习数学方面的介绍[计算机数学专题(9)]_方差_82

 

以下是上表各指标的说明:

  •  客户数:每段的样本数,由于是等分成10段,所以客户数在每段中都是一样的,都是整体样本数的10%;
  •  
  •  累计客户数:按段的顺序累加客户数。比如前两个十等分段内共有1200人(600+600);
  •  
  •  响应客户数:每段内购买产品A的人数。比如在分位数10内,购买产品的人数为281;
  •  
  •  累计响应客户数:按组的顺序累加响应客户数。比如前两个十等分段内共有453(281+172)人购买产品;
  •  
  •  命中率:响应客户数/客户数。比如在分位数10内,命中率由281/600得来;
  •  
  •  累计命中率:累计响应客户数/累计客户数。比如前两个十等分段,也就是整体样本的20%,累计命中率= 453/1200;
  •  
  •  提升度:反映的是与随机选择相比,利用该模型选取一个等分段(子集)能够改进多少,计算上就用每一等份段计算出来的命中率除以无模型时的基准响应率。比如在分位数10内,提升度=46.89%/16.67%=2.81。理论上第一个十等分段提升度是最高的,最后一个十等分段是最低的,整体呈下降趋势。
  •  
  •  累计提升度:累计命中率/基准响应率。比如前两个等分段,累计提升度=37.35%/16.67%=2.26。提升度开始很高,随着等分段的累加,最后降到1。我们把这十等分段的累计提升度的变化情况画在一张图上,这就是Lift Chart提升度,见下图。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_83

 

  • 覆盖度:表示在每个等分段内内购买产品的客户占所有购买客户的比率。比如第一等分位段的覆盖度为281/1000=28.1%。
  •  
  • 累计覆盖度:表示累计响应客户数/所有的响应客户数。比如前两个十等分段,也就是整体样本的20%,累计覆盖度= 453/1000=45.3%。

 

Decile Analysis实质上也是基于不同阈值下混淆矩阵指标的计算,只是阈值按十等份来切。同时配合做提升度图,比较在不同深度(depth,也就是Decile)下,模型区分两类客户的能力,lift越大,说明这一部分人对营销活动反应更为活跃。一个好的分类模型,在lift图上,表现为在Decile为100之前,lift一直保持陡峭的下降趋势(lift >1)。

 

这种评估方法也与模型后期的应用密切相关:

  • 比如对营销来说, 需要一批对营销活动最为活跃的客户名单,这时可以通过Decile Analysis结合提升度图分析,找到活动成本与利润达到最大的平衡切分点;
  • 比如在信用评分领域,会将概率值转换成相应分数(score),用这种方法去分析不同段区分好坏客户的能力
  • 另外这种评估方法也可以用于后期的人群细分,比如流失预测,可以对流失人群进行细分,划分出高流失客群、忠诚客群以及中间过渡状态的客群。基于人群风险等级划分,后期可以对不同人群采取深耕经营。

 

[小结]

   有时一个性能上的最优模型(各评估指标表现优异),未必是一个业务应用上的最佳模型。因为不同的业务场景对分类模型的要求也不同:

  • 有些业务场景需要直接可辨识的结果或是明确分类(比如欺诈识别,图像识别,信息标注等),为了达到更高的预测精度,可以接受没法业务解释的“黑箱”模型,那么在模型评估上,自然要选择在各项评估指标比较上最优的“冠军模型”。
  • 但是有些业务场景(比如营销,流失预测,申请评分等),研究人员更希望有一个容易理解的模型,因为少量简单规则组成的模型,更容易与业务思想契合,方便指导后期的商业应用,这时评估分类模型,就不能只从性能(评估指标)上去比较,还应该考虑选择一个可解释性更好的模型。

 

线性代数

          推荐书籍:《见博客末尾》。


          线性代数的概念对于理解机器学习背后的原理非常重要,尤其是在深度学习领域中。它可以帮助我们更好地理解算法内部到底是怎么运行的,借此,我们就能够更好的做出决策。所以,如果你真的希望了解机器学习具体算法,就不可避免需要精通这些线性代数的概念。这篇文章中,我们将向你介绍一些机器学习中涉及的关键线性代数知识。

         

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_84

 

线性代数是一种连续形式的数学,被广泛应用于理工类学科中;因为它可以帮助我们对自然现象建模,然后进行高效的计算。但是,由于线性代数是一种连续而非离散的数学,因此,很多计算机科学家都不太了解它。另外,线性代数还在几乎所有的数学学科中都拥有着核心地位:例如几何学和泛函分析。

 

线性代数中的概念是理解机器学习理论所必需的基础知识,尤其是对那些处理深度学习算法的人而言。在刚接触机器学习时,你可以不需要掌握线性代数。但到了一定程度后,当你希望更好地理解不同机器学习算法运作原理时,线性代数就很有用了,它可以帮助你在开发机器学习系统时更好地做决策。

 

在线性代数中,我们使用线性方程来表示数据,并把它们写成矩阵或向量的形式。因此,基本上你都是在与矩阵和向量打交道,而不是标量(我们会在文章的稍后部分介绍这些概念)。如果你能够想到使用一个合适的库,比如 NumPy,你就可以通过简短的几行代码,轻松实现复杂的矩阵乘法。请注意,这篇文章忽略了那些对机器学习并不重要的线性代数概念。

                                                                                           数学对象

机器学习数学方面的介绍[计算机数学专题(9)]_极值_85

                                                                                                     标量

 

标量就是一个简单的数,比如 24。

                                                                                                     向量

机器学习数学方面的介绍[计算机数学专题(9)]_极值_86

向量是一个有序数组,能够写成一行或者一列的形式。向量只包含一个索引,用来表示向量中的某个特定元素。比如 V_2 表示向量中的第二个元素,在上面淡黄色的图中是-8。

 

                                                                                                             矩阵

矩阵是一个有序的二维数组,有两个索引。第一个索引表示行,第二个索引表示列。例如,M_23 表示的是第二行、第三列的元素,在上面淡黄色的图中是 8。矩阵可以有多个行或者列,注意一个向量也是一个矩阵,但仅有一行或者一列。

淡黄色图中有一个矩阵的例子:一个 2×3 的矩阵 (行数×列数)。下图中是另一个矩阵和对应的表示形式。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_87

 

                                                                                                       张量

三维张量是按照一定规律排列在方格中的数组,其中一个变量数字表示轴。张量有三个索引,其中第一个索引表示行,第二个索引表示列,第三个索引表示轴。例如,V_232 指向第二行、第三列、第二轴的元素,在下图右边的张量中表示 5。

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_88

 

张量是上面谈到的概念中最常用的一个,因为张量是一个多维数组,同时可以是一个向量或者一个矩阵,具体取决于它的索引数量。例如,一阶张量可以表示向量(1 个索引),二阶张量可以表示矩阵(2 个索引),三阶就是张量(3 个索引),更高阶的称为高阶张量(超过 3 个索引)。

 

矩阵和标量的计算

如果你在一个矩阵上加、减、乘、除一个标量,你所做的就是直接对矩阵的每个元素进行这些数学运算。下图给出了矩阵数乘的一个很好的例子。

机器学习数学方面的介绍[计算机数学专题(9)]_方差_89

矩阵和向量的运算

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_90

 

对一个矩阵乘以一个向量,可以理解为对矩阵的每一行乘以向量的每一列,运算结果会是一个向量,它的行数和矩阵的行数一样。下图展示了这是如何计算的。

 

为了更好地理解这个概念,我们详细讲解一下第二张图中的计算步骤。为了得到结果向量中的第一个元素 16,选择拿来和矩阵相乘的向量中的元素 1 和 5,把它们与矩阵第一行中的元素 1 和 3 相乘,像这样:1*1 + 3*5 = 16。对矩阵第二行的元素进行相同的计算:4*1 + 0*5 = 4。同样,再计算矩阵第三行的元素:2*1 + 1*5 = 7。

 

这里还有另一个例子:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_91

 

在这里,我们给出一个备忘录:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_92

 

矩阵间的加减法

矩阵间的加减法非常简单直接。这里要求,两个矩阵需要维度相同,运算结果也会是一个相同维度的矩阵。你只需要将第一个矩阵中的每一个元素和第二个矩阵中对应位置的元素相加或者相减就可以了。如下图所示:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_93

 

矩阵间的乘法

如果你知道如何计算矩阵和向量间的乘法,矩阵间的乘法就也简单了。注意,只有当第一个矩阵的列数和第二个矩阵的行数相等时,才能把它们两个乘起来。运算结果会是一个矩阵,行数和第一个矩阵的行数相等,列数和第二个矩阵的列数相等。计算方法如下:

你只需要将第二个矩阵分成列向量,然后分别将第一个矩阵和每个列向量相乘。然后,将运算结果拼接成一个新的矩阵(不要把它们加起来!)。下图逐步展示了计算过程:

机器学习数学方面的介绍[计算机数学专题(9)]_极值_94

 

同样,我们也给出一个备忘录:

机器学习数学方面的介绍[计算机数学专题(9)]_机器学习_95

 

矩阵的乘法性质

矩阵乘法拥有一些性质,根据这些性质,我们可以将大量计算整合成一个矩阵乘法。在下面我们会依次讨论这些性质。为了便于理解,我们会先用标量来解释这些性质,然后再使用矩阵形式。

 

交换律

数乘满足交换律,但矩阵乘法并不满足。这意味着,当我们在将两个标量乘在一起的时候:7×3 和 3×7 的结果是一样的,但当我们将两个矩阵相乘起来的时候:A×B 并不等于 B×A。

 

结合律

数乘和矩阵乘法都满足结合律。这意味着,数乘 3×(5×3)等于(3×5)×3,同时矩阵乘法 A×(B×C)等于(A×B)×C。

 

分配律

数乘和矩阵乘法都满足分配律。这表示,数乘 3×(5+3)等于 3×5+3×3,而矩阵乘法 A×(B+C)等于 A×B +A×C。

 

单位矩阵

单位矩阵是一种特殊的矩阵,不过首先,我们需要定义什么是「单位」。数字 1 是一个「单位」,因为任何数乘以 1 都等于它自身。因此,任何矩阵乘以一个单位矩阵都应该等于它自己。例如,矩阵 A 乘以单位矩阵还等于矩阵 A。

单位矩阵的主对角线元素都是 1,其余元素都是 0,你可以根据这个性质得到一个单位矩阵。同时它也是一个「方阵」,这表示它的行数和列数是相等的。

机器学习数学方面的介绍[计算机数学专题(9)]_极值_96

 

我们之前说,矩阵乘法不满足交换律,但这里有一个例外:将一个矩阵和一个单位矩阵相乘。因此,下式是成立的:A × I = I×A = A。

 

矩阵的逆和转置

矩阵的逆和矩阵的转置是两种矩阵特有的性质。同样的,我们首先在实数上讨论这些性质,然后再使用在矩阵中。

 

        逆运算

    首先,什么是逆(倒数)? 一个数乘以它的逆(倒数)等于 1。注意,任何非零的数都有倒数。如果将矩阵和它的逆矩阵相乘,结果就应该是单位矩阵。下面的例子展示了标量的逆(倒数):

机器学习数学方面的介绍[计算机数学专题(9)]_方差_97

 

不过,并不是每个矩阵都有逆矩阵。如果一个矩阵是方阵,而且它可逆,就可以求出它的逆矩阵。很遗憾,讨论什么矩阵可逆超出了这篇文章的范围。

我们为什么需要逆矩阵呢?这是因为我们不能计算用矩阵相除,并没有「除以矩阵」的定义,但我们可以用一个矩阵乘以一个逆矩阵,来达到相同的目的。

下图展示了一个矩阵乘以它的逆矩阵,计算结果是一个 2×2 的单位矩阵。

机器学习数学方面的介绍[计算机数学专题(9)]_方差_98

 

可以利用 NumPy 轻松计算出一个矩阵的逆矩阵(如果它可逆的话)。

 

       转置

    最后,我们讨论矩阵转置的性质。这基本上就是将一个矩阵沿着 45 度轴线镜像翻转。计算矩阵的转置非常简单,原始矩阵的第一列就是转置后矩阵的第一行,第二列则变成了转置后矩阵的第二行。一个 m×n 的矩阵仅仅是转成了 n×m 的矩阵。同时,矩阵 A 的元素 A_ij 等于转置后矩阵的元素 A_ji。下图展示了矩阵的转置:

机器学习数学方面的介绍[计算机数学专题(9)]_方差_99

 

[小结]

    在这篇文章中,你接触到了一些机器学习中使用到的线性代数概念。你学会如何对这些对象进行加、减、乘、「除」。另外,你还掌握了矩阵最重要的性质,以及它们为什么可以帮我们得到更有效的计算。在这些知识的基础上,你还学习了逆矩阵和转置矩阵的概念,以及可以如何使用它们。虽然机器学习中还有很多线性代数知识,但这篇文章提供了关于最核心的概念的一些适当介绍。

 

微积分

     Sigmod函数求导:

                 函数:

机器学习数学方面的介绍[计算机数学专题(9)]_极值_100

也叫 "S型曲线"

 

 


数学网站:

 

 

 

更新ing...


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 机器学习