00:00
前面我们这一部分是已经讲到了模型评估和模型选择,我们讲到了这个,呃,过拟核和嵌拟合对吧?训练误差,测试误差,然后我们提到要做的一个方法,为了避免过拟和,我们要在整个的这个损失函数,或者说这个经验风险上面要加一个正则画像,这是我们提出来的一个呃,整体的思想,那接下来我们已经有了这些整体思想之后,大家再来具体看一看我们实际在应用当中它是怎么去做的,那当然了,在这个之前我们还是先大概的介绍一下监督学习的分类对吧?监督学习里边主要分哪两类呢?前面已经提到分类和回归,大家再回忆一下对不对?那么分类和回归它的区别在哪里呢?对,其实就是你最后输出的那个结果,对不对,就是我们那个Y到底是离散还是连续,如果是离散的话,这是不是就是一个分类问题啊,你只能取。
01:00
有限的个数几个值,那这就是一个分类吧,如果要是连续的话,这就是回归,所以大家可以想象一下啊,回忆一下我们之前提到那个例子对不对,就是房屋的各种信息和它的价格,还有它能不能卖出去那个例子,我们如果那个问题里边是预测它能不能卖出去的话,这是不是就是一个分类啊,它结果是不是就是是或者否两个啊,那如果说最后我们预测的是它的那个目标的房价,那是不是就变成了一个回归啊,而且大家会注意啊,就即使是我们要预测同一个特征,或者说同一个目标,也有可能它的这一个问题也会转化,比方说什么呢?你要预测它能否卖出去,我们说它是一个分类问题,是或者否,但是大家想一想,你如果再再往深里边去划分的话,这个能不能卖出去,是不是并不见得是一个很确定的,能不能卖出去的一个问题啊。
02:00
嗯。那我们是不是如果再把它细里边,呃,往细去做划分,是不是应该去考虑你能卖出去的一个概率啊,如果你要是用这种方式去想的话,那这个概率应该是连续的还是离散的呢?哎,这个就变成连续的了,对吧?所以那这样我们把一个分类问题就变成了一个回归问题了,对吧?所以这其实它并不是说一成不变的,所以之后大家就会看到啊,就是我们也可以用分类的思路去解决回回归,也可以用回归的思路去解决分类,都是可以的。好,那么我们这里先给大家说一下,分类是一个大概是一个什么样的状态,那大家还记得我们当时说监督学习的时候那张图吗?这其实很类似对不对?我们这里也是有一个学习系统,最后要输出一个模型,我们想要找到X和Y的一个关系,对不对,那这里边它的关系是不是最后得到的这个Y就是有限个值啊,对吧,有限个取值。
03:00
所以我们最后得到的其实就变成了一个分类器,对吧?呃,大家看啊,就是得到这个分类模型,或者说分类决策函数,就叫做一个分类器,那用分类器对新输入的数据做预测,这个过程就叫分类,所以我们这里面输入一个X,输出的这个Y是不是就是有限的那个类别数啊,类别的那个取值对不对?好,这就是一个简单的分类过程,好那。具体的分类的一些模型,或者说一些学习方法有哪些呢?大家会看到啊,K精灵决策数感知机,逻辑斯D回归等等等等,包括SVM支撑向量机对吧?朴苏贝耶斯神经网络这些都可以用作分类。好,接下来我们再说一下分类问题一般用什么指标去评测呢?这是之前我们在讲推荐系统的时候就给大家提到过,对不对?我们说推荐系统如果说你推出来的是一个列表啊,就是你不考虑它具体那个评分到底是多少,只是考虑他该不该推荐的话,这是不是就有点像一个分类问题啊,而且是一个二元分类问题,对不对?好,我们对于这样的一个二元分类问题,大家会看到最重要的评测指标是什么,是不是就是所说的精确率和召回率啊,那一般的分类问题的话,还有一个指标叫准确率,对吧?啊,这个也是之前给大家提到的这三个概念不同,那我们现在再来简单回顾一下,当时是不是给大家列了一个一个表格,一个矩阵啊。
04:40
对吧?二乘二的一个矩阵,呃,有时候有一些文章或者说书里面会把它叫做混淆矩阵,因为一看这个名字是不是就很容易混淆啊,它其实看起来很容易混淆,但是大家只要是认真把它理解了的话,也不难,它是什么问题呢?它其实就是二类分类问题,那我们就把它是不是就是有两类啊,所以就把它分成关注的是叫做一个正类,不关注的叫一个负类,像我们推荐系统是不是关注的就是它应不应该被推荐出来,对吧?那么不关注的就是他他们,呃,你就不需要推荐的那一部分就是另外的负类,那最后呃,我们再去做推荐的时候,是不是相当于。
05:23
是我们人为的对它有一个分类啊,那分类最后到底正确没正确,这是不是就有不同的结果啊,所以它就会出现四种结果,哪四种结果呢?就是哎,就是本来应该推荐,我把它推荐出来了,这是不是一个正确分类的正类啊,这种我们叫TP对吧,出positive,然后还有一类叫什么呢?呃,叫叫做我们把它推荐出来了,但是其实它不该推荐对吧?就是推荐出来,推荐错了,我们把它分类分到了正类,但是分错了,所以这个叫false,呃,这个应该叫false positive应该叫FP,对不对,把负类预测为正类对不对?
06:11
那另外同样的还有一类,是不是就是本来就不应该推荐,我就没把它推出来,这是不是预测正确的负类啊,哎,这个叫做。TTN,对吧,True negative,这个叫做把负类预测为负类,这就是本来不该推荐,我也就没把它推出来对不对?最后还有一类,这个FN应该是什么呢?诶,那就是对,就是本来应该把它推荐出来,但是最后没把它推出来对不对,这是不是就是应该预测为正类的,结果我把它预测为负类了,没推出来是不是负类啊,所以就是false negative Fn,所以这四项大家大概的再回忆一下啊呃,那对应的这个准确率,精确率和召回率怎么样去定义呢?准确率比较简单,准确率是什么?就是所有的分类正确的,这个T打头的是不是TP加TN啊,这都是分类正确的对不对,然后除以所有的加起来,这是不是就是准确率啊啊,这是我们一般意义上的准确率,但大家会看到这个准确率对于我们推荐系统而言可能就不太不太关心,为什么呢?你这。
07:24
的准确率。它是把。该推荐推荐对的和不该推荐就没推荐的都算成预测正确了对不对?我们关心的是不是更关心该推荐的那一部分啊?所以我们一般用到的是精确率和召回率。精确率召回率是一个什么样的指标呢?这里把数学公式给大家写出来,精确率就是TP除以TP加FP,大家回忆一下TP是什么?TP是哦,该推荐的,我真正的就把它推出来的这一部分对不对,这是不是我正确分类的这一部分啊,TP加FPFP是什么呢?不该推荐的也推荐出来了对不对,那TP加FP是不是就是对所有推荐出来的出来的出来的那一部分数据对吧?所以我们的这个比例是不是就是所有推荐出来的列表里边。
08:22
真正应该推荐出来的那个比例对不对?这就是准确率,精确率,然后另外召回率是什么呢?召回率是TP除以TP加FNFN又是一个什么东西?FN是将正类预测为负类的数数目,对吧?那在我们推荐系统的这个例子里边,是不是就是我应该不,呃,大家想一下是什么?就是应该推出来但是没推出来的对不对?所以这两部分TP加FN这两项加起来是什么呢?是所有应该推出来的对不对?然后我们TP1除这个比例是什么?
09:11
是所有应该推出来的那些选项里边我真正推出来的比例对不对?所以大家区别一下这两个指标啊,就上边那个是所有我推出来的里边真正推正确的比例,下边这个召回率指的是所有应该推出来的里边,所有的这个选里边我真正推出来的比例,所以稍微有点绕对吧?呃,既然是有点绕,所以我们在前面讲推荐系统的时候讲一下,现在再复习一下,大家把这个概念,呃,就是理解的透彻一点,当然我们当时还提到就真正的推荐系统里边这两个指标可能是比较相对比较简单的,还有一些复杂指标,比方说F1指标,比方说呃,还有这个什么,呃,这个a uoc曲线啊,这loc曲线,所以这些东西,这些指标其实都是评价我们一个分类问题,或者说在推荐系统里边评价一个推荐列表它的性能到底好坏。
10:11
的这个效果到底怎么样的一个指标,那那些指标可以说都是以我们这里边的这四项,也就是说所谓的这个混淆矩阵里边的内容做基础的,大家感兴趣可以下去之后再好好的看一看啊,就是找一找这些评测指标,确实有可能面试的时候会遇到这样的问题。我们这里就不详细展开了,然后另外还有一类问题就是回归,对吧?前面我们提到了回归和离散区别就在于对连不连续,那回归既然是一个连续问题的话,那大家其实已经可以想到了,我们这里得到的这个Y等于FX,肯定就是一个标准的函数,对吧?你输入一个X,输出的这个Y是不是也是一个函数啊,呃,也也是一个连续的值啊,那大家会想到这样的话,X是一个连续的值,Y也是一个连续的值。
11:04
如果要把它的这个函数画出来的话,是不是就变成了一条曲线啊,哎,所以这里给大家提一句,就是回归相当于就是函数拟合对不对,相当于就是我们要选择一条函数曲线,把所有的已知的那个数据点,就是所有的X,如果我们都当成是那个数据点的坐标的话,大家会想到,诶,这是不是就是要用一条曲线把所有的点全全放在上面对不对,拟合在上边能够用一条曲线把所有点表达出来的话,这是不是就把我们的我们现在的这个回归模型就建立起来了啊,我们最后要找的就是这样的一个模型,好,那接下来再给大家简单说一下,回归问题还可以再分,怎么分呢?有两种标准,一种可以按照。输入变量的个数来分,输入变量是什么,一个未知数对对,就是我们说的未知未知数对不对啊,或者说这是我们的这个自变量对吧,也就是我们这里X的数量对不对,一般我们习惯的是不是一个X对应一个Y啊,但是实际问题里面是不是有可能是很多个X,很多个特征,很多个指标,然后对应有一个结果对不对?哎,所以这其实是很正常的一个状态,那根据X有多少个,我们是不是就可以区分这是一元回归还是多元回归对不对?哎,这里大家就会看到了,一元回归的话,我们是不是对应。
12:38
呃,对,一个变量,那大家能够想到啊,是线性吗?不一定一元,但是不一定线性,对不对,我们也可以你有一元,只有一个X,但是我最后拟合出来是一个二次曲线,是一个抛物线,对不对,也有可能拟合出来是一个特别复杂的绕好几次的那种曲线,对不对,它也只有一个X,那我们这里的一元和多元的区别是在哪里?对变量个数,那如果说要变成二元的话,它会变成什么呢?三是不是就变成三维的那个曲线了?对,大家想象一下啊,它区别在这里,如果要是一元的话,我们是不是就是平面一个X,一个Y,一个横坐标,一个纵坐标,就把这个函数曲线画出来了,如果多维的话,三维,呃,就是如果二元回归的话,那是不是有有两个三对,两个自变量,一个一个输出的这个Y,那是不是相当于是一个三维的曲线啊,哎,这个我们能画出来,那如果再高维可能。
13:39
画不出来了,但是大家应该也能够想象得到,对不对啊,它其实就是自变量增多而已,那另外还有一种分类方式是按照模型可以来分类,这是什么呢?诶,这就区分了是线性的还是非线性的。那大家可以想到这是不是一元也可以分线性和非线性啊,多元是不是也可以分线性和非线非非线性。
14:02
大家能想到多元的话怎么样,线性的是一个面吗?还是怎么样?自变量定义成常量,大家想象一下,假如说我们是两个自变量的话,X1X2,然后最后输出一个Y,这个画出来曲线是不是应该在三我们的三维空间坐标里面画啊,假如是线性的,它应该是什么样子?大家觉得有一个自变量为零是吗?好,那我们还是等到后面讲到线性回归的时候,再给大家先先留下一个疑问啊好呃,然后我们提一下这个回归模型它的损失函数怎么样去选择呢?一般情况最经典的就是选取平方损失函数,大家能够想到这个为什么用平方损失函数吗?啊,首先它没有负的对不对啊,那前面我们也已经说到了,那那你为什么不用绝对值呢?对吧?绝对值也没有负数啊。
15:06
或者说你为什么不用那个零一损失函数呢?那也不是负的呀,啊,大家可能想到零一不太准对吧,因为它就两个取值不太准,那为什么不用绝对值呢?这里就其实提到了之前我们想要求的是什么,我们是不是定义出损失函数来之后,我们是不是想要求它的最小值啊,大家想一下是不是想要求这个最小值,所以如果我们把这个损失函数定义成平方损失函数的话,大家想象一下。平方损失函数,它的曲线应该是一个什么样子的平方,哎,对,平方是不是应该是一个抛物线这个样子啊,如果是抛物线的话,它是不是就是我们前面提到的,对,这是一个凸函数,是不是应该有最小值啊?诶,所以如果是这样一个问题,我们求最小值是不是就顺理成章可以找到,诶,然后我们是不是就可以用我们之前那一套数学理论去解决它了,对不对?哎,所以这其实就是一个很典型的一个应用啊,把前面给大家讲到的东西,大家要串起来去看,所以最经典的方式就是选取平方损失函数,那么这个时候回归问题就变成了一个对,变成了一个数学问题,对不对?它的有一个解法非常的著名,叫做最小二乘法,好,那等一下我们讲到线性回归的时候,就要给大家详细的讲一讲,最最小二程对吧,然后我们还会去用一个程序代码去实现一下啊,这里再给大家讲一个别的其他的一些求解算法,除。
16:41
除了最小二乘法,它是针对平方损失函数的一种特殊的求解算法,对不对?那别的还有哪些算法呢?呃,这里提提两两种啊,或者说三种,一种非常有名叫梯度下降算法啊,另外还有一类叫牛顿法和拟牛顿法,那我们先看一下啊,这个看起来很高大上,梯度下降是一个什么算法呢?梯度下降其实是非常常见的一个一些优化方法啊,它可以说是求解这个所谓的无约束优化问题最经典的方法之一了,那么他的一个想法是什么呢?
17:19
其实就很简单,大家大家会想到我们当时讲过啊,梯度是什么,变化率对梯度是不是变化率最大的那个,变化最快的那个那个方向啊,而且它的那个值,它的模长是不是就是我们。本身变化最快的那个值,变化率的那个值啊呃,所以大家这里要注意啊,梯度方向本身就是函数变化最快的方向,那变化最快它是增增加最快还是减小最快呢?这里大家要注意一下啊,梯度本身应该是增加最快的方向对不对?因为我们当时说了,你如果想找那个减小最快的,是不是得找到那个负的最大啊啊,所以这里大家稍微要注意一下,我们本身如果找到的那个梯度方向应该是函数增加变化最快的那个方向,那这里大家就会想到我们的损失函数,我们的目标是不是想让损失函数求最小值啊,那最小值这个其实啊,我们就不是要找它增加最快的方向了,我们其实是想找什么?对,是不是想找减小最快的方向啊,那这个方向,我们一种方式是找到它所有值里边负的那个最大,负的那个绝对值最大的那个方向。
18:38
对不对?另外还有一种方式是什么?对,大家会想到我们现在不是梯度已经知道了吗?这是正的变化最快的方向吗?那这个方向直接举一个相反,是不是对应就应该是它减小最快的方向啊,因为我们整个函数都是连续的,对吧?你既然当时都求了极限,都是那个直接是那个趋近于零的那个状态对不对?所以你如果朝着某一个方向,它增加最快的话,反方向是不是就应该减小最快?诶,这就是梯度下降的一个基本思路,我们就可以怎么样呢?
19:14
让损失函数,我们随便找到一个点,然后就让它沿着负梯度方向去做一个变化,这是不是就是可以让损失函数最快,它的损失函数最快的下降啊?如果我们一步一步让,让它下降下去,最后是不是就会趋近于我们想要求的最小值?诶,这就是一个基本的思路。大家应该这个思路应该还是很好理解的,对不对啊好,那么我们这里边给大家还是看一张图,这个图我们其实前面讲到梯度的时候就画出来过,对不对,大家看到这里边的这个函数图像是不是很像一个一个山包啊,大家看到,所以这个问题其实我们是不是就可以认为它是我们假装自己是在一个山上,如果我们爬爬了一就是去爬山啊,爬了一个野山,我们并不熟悉不知道的一座山,这个时候我们想要去下山,那我们怎么下呢?对,一个很简单的方向是不是就是,呃,一个很很简单的思想,就是我们找一个最陡的方向去去往下走,对不对,每个地方都沿着最陡的方向往下走,那这个下下下降起来是不是就最快啊,当然大家想到你最快找一个悬崖跳下去最快,对不对,对啊,这个我们不予考虑啊,我们只考虑速度对不对,哎,我们现。
20:41
但让这个机器他去跳悬崖,这个没关系,呃,这这个不是说这个武侠小说跳下悬崖长能能捡到秘籍是不是,但但是至少我们能保证它是最快的,对吧?下降最快,那么大家看一下我们整体对于这个梯度下降算法而言,它的一个想法是什么?其实也是一样的,就是找到坡最陡的那个方向,这是不是就是我们所谓的负梯度方向啊,就是向下下降最快的方向对不对?找到这个方向我是不是应该一步一步朝下走啊?这里大家还要注意一下,我是沿着这个方向找到之后就一路走到底吗?
21:21
其实不是,我们是不是应该走一步看一步啊,因为我现在是在这一点这个方向它下降最快,那我沿着这个方向走几步之后,有可能这个地形是不是就发生变化了,那我是不是应该再走一步之后,再看一看,当前又是哪个方向下降最快,对不对?哎,那大家会想到这是不是一个典型的迭代法啊,哎,所以大家看一下我们迭代的公式是什么样的呢?诶,这里的西塔为为什么这里是西塔。不是角度,呃,大家看到有我们经翅把这个西塔当成角度对不对?这里面当然大家也可以认为是角度,但是我们这里的含义它是什么呢?损失函数J西塔,大家回忆一下损失函数是谁的函数来着,是谁的函数系系对模型的函数,是模型系数的函数对不对?哎,所以这里边其实我们是用西塔统一来表示模型的系数的,对不对,模型里边参数的,所以大家会看到我们的参数怎么去迭代呢?怎么去找最优的模型最优的参数呢?就是用这个公式去迭代西塔啊,这里其实应该是一个迭代,那应该是大家把这个等号就理解成负值了,对不对?西塔应该等于原先的西塔,对,是不是要我们梯度下降,是不是要减去一个值啊,减去一个,大家看后边这个是什么?对对西塔,求偏导。
22:56
嗯。大家想一想,梯度当时我们怎么算的,是不是每一个维度都对应去求偏导啊,所以大家会想到我们这里边每一个维度都求一个偏导,是不是合起来就相当于是做了一个梯度计算啊,每一个维度的这个求了偏导之后的这个值是不是就是一个梯度值啊?然后大家看到前面再乘以一个阿尔法,这是什么呀?哎,大家想到这是一个系数对不对?那这个系数是不是能够调节我这一次变化,一次迭代它变化多大对不对?那是不是相当于我们往下下山走的时候走的这个步长,这个幅度对不对?哎,这就是我们的这个想法,所以大家看啊,这就是梯度下降的基本的迭代公式,好,当然后面我们还有这个,呃,刚才我们讲到的这些内容,对不对?大家会想到我们不知道怎么下山的时候,就找着最陡峭的位置,一步一步朝下走,而且大家会发现我们是走一步看一步。
23:57
每一步都重新做计算啊,大家会看到这个过程当中有一个什么样的问题呢?
24:05
是不是就是梯度下降不一定找到的是全局最优啊,为什么?因为我们这里是不是沿着这一点直接往下走,走走走,有可能找到的是我们的山脚下,是不是也有可能,哎,有一个山谷它刚好凹进去,你是不是走着走着走着就走到这个山谷里面去了,有可能就没办法走到山脚了,对吧?所以大家会看到他找到的是一个什么值呢?局部最小值对吧?或者叫极小值,对不对?局部极小值,那么在什么情况下我们可以找到最小值呢?哦,大家就会想到,那如果我们这一个函数,我们这个山的形状,假如说它就是只有一个山谷,或者说只有一个谷底这样一个这个凹进去的形状的话,那是不是就能找到最小值啊,你从哪个点都能找到最小值,对不对,这其实是不是我们当讲。
25:05
的对下凸函数,如果说它是一个凸函数的话,我们是不是就一定能找到它的最小值啊啊,这就是给大家提到的这些概念都串起来啊,如果损失函数是凸函数的话,那么梯度下降就能得到最小值。好,那后面还有一个牛顿法和拟牛顿法,我们简单的说一句吧,因为这个东西会比较复杂一点,我们后面也不会用到,大家有一个概念就好,牛顿法是什么样的一个方法呢?它跟梯度下降其实很类似,大家会看它也是一个迭代法,对不对?它也有一个迭代公式,它的迭代公式怎么做呢?大家看啊,它是X,大家可以理解,这个X就是前面我们的西塔对不对,这是差不多的啊,它变成了之前的X,减掉一个HK,然后上面还有一个负一,这是个什么东西啊?这个H大家想到这是个求倒数对不对?求求倒数对吧?对,倒数分之一的那个倒数对吧?这里注意这个HK不是一个数,它是一个矩阵啊,等一下我们再看啊,然后后面还要乘,乘以一个JKJ是什么?J我们就知道了,这里说了啊,J就是FX梯度向量在XK处的值,那大家想到这是不是就是梯度啊,后面这个是梯度,那前面这个HK是什么东西呢?H本身是一个叫做海塞矩阵的东西,那海塞矩阵又是个什么玩意儿呢?大家看这个表达式啊,F是我们这个函数对不对?
26:42
带模型它要对干什么呀?对我们的这个X,这是我们的这个,呃,就是本身的这个系数对不对?求二阶偏导,大家看这是不是二阶偏导啊,上面有一个平方,下面是两次偏偏导对不对?所以大家可以认为之前我们的梯度是不是一阶偏导啊,现在相当于在它基础上再求一次,求出二阶偏导。
27:09
大家会想到。如果把这个都考虑进来的话,这个二阶偏导代表什么含义啊?梯度表示的是什么?一阶一阶偏导它表示的是什么?是不是我们变化最快的那个方向啊,大家想想二阶导数,二阶偏导又代表什么呢?维度增加,大家想象一下,之前我们其实之前应该大家学的这个微积分知识,或者说函数导数的知识里边讲过,二阶偏导对不对?一阶导数求出来之后,是不是那个变化本身的变化率,就是我们那个切线的斜率对不对?对,如果是二阶导数的话,是不是变化率的变化率啊,就是那个斜线的斜率,它又会怎么变对不对?你是越变越大还是越变越小,是不是就变成了这个二阶导数啊?
28:05
大家可以想到这里,它把这个二阶导数二阶偏导求出来,是不是也代表了一个。我们现在函数值的变化率的变化率啊,大家会想啊,我们把这个都考虑进来了,是不是这个函数下降,你要让它再下降的时候,是不是就下降的更快啊。你就能考虑到,我不光要考虑哪个方向最陡,我还要考虑当前这个变化率的变化率,它会朝着哪个方向去变化,对不对,我要朝着不光现在最陡,而且是它会越来越陡的那个方向去跳啊,那那当然就是悬崖了,对吧,这个下降肯定就特别的快,对不对?哎,所以大家会想到它的迭代就会比梯度下降更快一些,收敛更快一些。呃,当然这个过程当中大家就会想到这个计算是不是也会更复杂啊,我们之前只要有一个梯度就可以了,现在它还要有一个海塞矩阵求二阶偏导,二阶偏导还不算,它还要干什么呀?那这个负一就代表什么了,是不是还要求逆呀,矩阵求逆这个是不是更复杂?呃,所以这个就非常的非常非常麻烦,那当然它既然很麻烦,我们平常就不怎么用,那会有一个近似的一个呃,优化的一个方法吧,那这种方法就就叫做拟牛顿法,你拟牛顿法怎么做呢?其实就是用另外的一个矩阵,正定矩阵来近似海塞矩阵的逆矩阵,就这个H负一对吧,然后就可以简化整体的计算过程啊,那具体这个计算我们就不做讲解了。
我来说两句