00:00
好,前面我们已经讲完了最小二乘法去求解线性回归的过程,那么大家可以想象到一个一元函数的最小二乘线性回归对不对?似乎这个公式已经有点复杂了很多项很多内容,对不对?那大家想一下,如果要是多元呢,多元的函数。好,那接下来我们看一下啊,那遇到的问题就是多元线性回归,如果有两个或者两个以上的自变量的话,哎,我们就把它叫做多元线性回归,在实际问题当中,其实大家想一下是一元线性回归常见还是多元的常见啊,对,其实实际问题当中影响的因素肯定不止一个,所以实际应用往往是多元的更常见,那有哪些应用呢?比方说大家看这里边给了一个例子啊,第一个这个这个公式大家看啊,F好瓜X,这是什么意思哈,哎,所以这是不是就是在用西瓜的一些特征想要去挑瓜啊?呃,这个公式是从哪里摘的呢?是从一本书,很有名的一本书啊呃,周志华写的一本机器学习的书,呃,对,他有些同学可能听说过啊,这本书里边他的很多例子,讲解机器学习算法的时候,就是用了一个挑西瓜的例子,所以呃,有很多人把那本书就叫做西瓜书。
01:19
呃,所以大家如果感兴趣想扩展的话,可以去找一找,搜一搜,我我好像也有他的电子版啊,回头可以共享给大家,对,呃,就是周志华的西瓜书,大家可以去看一看,那么他这个例子是什么呢?就是你你想去挑一个好西瓜,你怎么挑呢?那我们是不是就得先收集数据啊,哎,你的数据有哪几个维度,要想判断一个好瓜,那你要挑的西瓜的数据可就不止一个维度了,对不对?你想要拿到的西瓜数据有哪些呢?比方说你可能要先看颜色对不对啊,你不要是那个,就是黄黄的,特特别黄的那种颜色看起来就不太好,对吧,特别白的不太好,肯定得比较绿一点,或者说要深一点,浅一点,然后是不是专业的挑西瓜,是不是还得看那个根蒂长得怎么样啊,对吧,是全区的还是直的?呃,再专业一点还得去拍一拍对不对?大家调西瓜可能也会去听听声音,所以至少这三个要素你都要去考虑,那是不是最后。
02:19
后的结果可能跟这三个要素都有关系啊,如果我们认为跟它的关系都是一个线性的拟合关系的话,那大家就会看到我们是不是可以在前面给每一个要素,每一个特征加一个系数,然后加在一起啊,这是不是就是一个多元的线性拟合啊?那大家会想到在这里边我们的X就有三个对吧?那最后是不是还是一个Y,最后应该得到的一个Y,那大家就会想到可能就是根据这个Y的大小来判断它到底是是不是好瓜,是有多好的一个瓜对不对?我们拟合出来如果是一个连续的值的话,那就是一个呃,它到底有多好这样一个评分,如果是分类的话,那就是一个离散的值,对不对?大一点的是好瓜,差一点小一点的是坏瓜,呃,这是西瓜的一个具体的例子,那我们如果把它一般的做一个抽象,其实就是之前给大家那个公。
03:19
式,其实这就是一个多元线性回归对不对,其实就是上面好刮这个形式的一个抽象,那如果再做一个抽象的话,大家会看到可以写成一个什么形式呢?大家看可以写成一个,我们前面不是说把那个西塔当成参数吗?写成西塔的参数,大家就会想到我这里的这个B是不是也可以认为是一个参数乘以1X的一个乘积啊,只不过这个乘积X0,大家会想到就取什么了,是不是就取一了呀?对,我如果特别的定义的话,它是不是都可以乘成一个西塔乘以一个X,然后加起来啊,这是不是就是两个向量的乘积?哎,所以我就可以认为H西塔X这是我的函数,是不是就是XT这个向量乘以西塔的一个形式啊?哎,所以大家不管怎么写,大家要知道这个,呃,它表达的是一个什么含义。好,那接下来大家会。
04:19
讲到这样的一个多元线性回归,怎么去求解呢?啊,当然大家也可以想到你尽管是多元,这跟这个我们这里边的这个二元,诶一元不也是一样的吗?一元的时候你只有一个X,那后面还有一个常量B,它是有有两个这个未知数对不对,你现在顶多就是多加了几个未知数吗?那我这里边是不是这是求了两次导,我后边是不是就你再多一个,我求三次导对吧,都是求偏导对不对,只不过就是前面我们这里可能就是就有多个W了,或者说在那个公式里面有多个西对不对,我可能对西塔一求个导,西塔二求个导,西塔这里你B的话,那我那里就当成西塔零对不对,西塔零也求个导,每一个都求一个导,求一个偏导是不是就可以了,最后我是不是让它全等于零,大家想一下。
05:13
是不是N个方程N个未知数,而且都是线性方程组,对不对?是不是也可以联立求解啊,哎,也可以得到一个结果啊,当然就是说如果要是运气好的话,应该是能求解得到一个固定的解的话,运气不好有可能,呃,就是出现那种不固定的解,多个解的情况,对不对,这都是有可能的。但是大家会想到前面我们只有一元函数的时候,这个求解这个公式都已经这么复杂了,你要是多元函数的话,呃,你就去想吧,那个算出来应该得复杂到什么程度啊,就就很应该会想到特别特别绕了,对吧?那里面的这个像数不知道有多少,所以我们就会想到,那我我能不能用更简单的方式,或许不那么精确,前面大家会看到这是一个精确求值对不对,直接把这个点全求带进去之后,直接一下就算出来了,W跟B精确的两个值算出来了,那我们如果要是不那么精确的话,能不能能用一种比较近似的更简单的方法去逼近它呢?哎,这就是我们提到的梯度下降,因为之前跟大家说梯度下降是不是一个迭代法,它是不是就是只要你给我一个初始点,然后我就算梯度,按照梯度方向,负梯度方向一步一步去逼近啊。
06:35
哎,最后这是不是就是相当于得到一个近似近似的最小值,这是不是很符合我们的要求啊,大家看一下梯度下降它又应该怎么算呢?它会不会比之前我们的最小二乘简单呢?我们看一眼吧,梯度下降该怎么算?呃,这里我为了给大家就是大家熟悉不同的公式的写法,我这里就不用W跟B了,我这里用西塔。
07:01
呃,大家可以理解,这里边的西塔是不是跟那里的WB是一样的啊,我这里边的H西塔是不是写成了上上一页里边的这个形式,它是不是等于一个西塔对应一个X乘起来相加啊,那大家想到西塔0X0 X0是相当于等于一了,对不对?那西塔零是不是就相当于我们刚才那个B啊,那西塔1X1如果只有一个X1的时候,西塔一是不是相当于是W啊,哎,这个大家理解就可以啊。所以这里我们是多元的,有有这么N个西塔,这里是N加一了,对吧,N加一个西塔,那大家想迭代公式怎么算呢?西塔应该一步一步去下降,去迭代,要减去。梯度乘以阿尔法一个不长对不对?里边的这个梯度是不是就是一个C塔要去梯度是一个向量啊,那我们是不是每一个C塔要去求偏导啊?所以大家会想到这里的西塔是不是本身也是一个向量,西塔零,西塔一,西塔二是不是也是一个向量,那么这个向量里边的每一个西塔是不是就是带到我们的那个梯度里边去求对应的那个偏导数,就可以带到这个公式里面去做减法了,做迭代了,得到最后更新之后的每一个西塔再合在一起,是不是就是更新之后的那个西塔整个所有的参数向量。
08:31
呃,大家看到其实就是按照这个公式来去做计算的,那本身的这个过程怎么去计算呢?还是求偏导对不对,求偏导的过程是不是跟之前应该一样啊。这个带进来公式跟前边这里大家看到。跟这里是不是一样的啊,只不过这里是对W跟B求偏导,我们这里是对西塔求偏导对不对啊,其实含义是一样的,但大家这里注意看,这里对西塔,西塔本身是一个向量,它是不是有很多个西塔啊,你这里对西塔求求导得到的其实它的梯度,那我们单独挨个去算梯度的时候,是不是要对每一个西塔分别求偏导才能算到梯度啊?那这里是不是就对里边的某一个西塔J去做一个求导了?
09:23
那大家看到还是带进来,公式都一样,我们把前面的这一个,这是不是平方啊,算这个误差的平方和再除以M除以M是不是就是。我们整个的军方误差啊,大家想想里边的这个J西塔是不是这就是我们的军方误差,跟前面定义是不是一样的啊?好,那接下来求偏导吗?是不是就带进去了,带进去这个J西塔,大家看到你这里的二是不是提到前面来,然后是不是里边这一部分保留,后边再对里边这一部分求一次导啊,跟前面还是一样的步骤,对吧?那前面这一部分我们保留,里边这一部分我们要展开得看一眼,对不对?里边这一部分是啥呀?是不是就是H西塔,是不是带进来,就是把这个H西塔KXK全展开啊,这个求和是不是要带进来,那么这个Xi是代表什么呢?
10:24
上面一个小I代表什么?代表第二个点对吧?这里跟之前稍微不一样一点,因为下边我们是不是这个下边是表示不同的这个参数取值了,所以我们不同的点的时候,样本点取值的时候,第二个点我们用上面的这个来表示,这是不是第二个点的X和第二个点的Y啊,所以大家看这个损失函数是不是所有的这个求求了它们的这个误差,最后求和均方误差,所以我们把它分开,是不是就是每一个Xi。它对应是不是还有还有不同的X啊。
11:03
这个大家是不是已经有点绕不过来了,为什么呢?就是对于某一个点,一个样本点Xi,它是不是这个对应的这个点它是有X1IX2IX3I,是不是它是一组X的横坐标值啊,大家想一想。每一个样本点是不是有一堆X?所以这一堆X我们是用下边来表示的,对不对,X0 x1 x2 X3,一直到XN对不对,然后每一个点我们是用上面的这个I来表示的,对不对?所以那么大家想到这个XKI表示什么呢?是不是第个点的DK的那个自变量啊,对吧,就相当于DDK个你就当成是我们西瓜里边的,你到底是那个响声,呃,或者下一个XK,你就认为是那一个根地对不对,是那个颜色,哎,这是不同的Xi,但是我们拿出来的一个样本点,是不是这几个X都有啊,哎,所以是这样的,我们是要把每一个X。
12:12
对应的西塔都乘起来,然后是不是要求和啊,对,这才是我们真正的这个Xi,这里的这个表达式,然后减去Y。那大家想他这个表达式要干什么?要去对西塔J求导。西塔J,那是不是Y直接就没了呀,大家想想是不是直接就没常量,是不是你对西塔J求偏导,是不是除了西塔J别的项全是常量,所以Y没了对不对?然后呢,X呢,这里边呢?哎,这里边是不是有有西塔J啊,那大家想一想里边这个展开是什么形式?展开是不是这个形式啊,每一项是不是都有一个西塔,都有一个X,那大家想西塔0X0,还有呢,这是不是也是常量?我对西塔J求导是不是西塔零就是常量啊?对西塔J求导是不是西塔一也是常量啊?最后有效的是不是就是西塔J那一项,那它对应的系数是什么?XJ?所以大家想求偏导完了之后剩下的是什么?
13:22
求偏导,那是不是就只剩下XJ了?对,只有系数对不对?求导之后西塔这就没有了,所以大家看最后拿出来是不是就是一个XJ啊,当然这是第个点的XJ对不对?前边还要乘以前面这一串,最后大家看到这都是第个点的坐标内容对不对?最后再求和,是不是总共的一个值啊?是的。求偏导之后的结果,那大家想到这个求偏导得到的这个是不是还是一个偏导函数?对不对,之前我们是直接让那个偏导数等于零了,对不对,现在我们直接让它等于零吗。
14:06
等于零,那你又是最小二乘法了,对不对,等于零,那就相当于又是要去求解一一堆等于零的那个方程组了,对吧?我们这里不是让它等于零,而是要干什么呢?得到这个公式之后,假如我们确定一个初始点,初始点代表什么?是不是我们的这个西塔就先确定了,那知道这个西塔之后,这里边公式里边是不是所有东西都知道了?大家想一下,XY所有的数据样本点是不是知道我们这里边本来未知的是不是就是西塔?模型参数对不对,本来未知的就是西塔,那如果我们已经知道一开始的初始的一个点的话,那是不是西塔也知道了呀?所以是不是能把当前的这个偏导数直接全求出来?所以是不是梯度就知道了,就是当前这一点的梯度对不对,那每一个梯度都知道之后,带到这个公式里边,你指定一个不长,是不是就能按照当前的这个值去做一个迭代计算啊。
15:15
那梯度是不是就变化了,然后再变化之后再带到这个公式里边算新的这个梯度算完了之后再去更新,是不是就又变化了,那这个过程是不是梯度就一下一下子按照这个过程一步一步在往下走了。所以大家想象一下,其实就是这样的一个过程。啊,大家觉得这个过程难吗?还是有点难,有点难理解对吧?但是计算是不是相对就简单一些,大家想到它最后计算是怎么算的,是不是就是每个点的那个梯度带到这个公式里面算一套啊。算完了之后再带到叠加这个迭代公式里边去更新就完了,是不是没有那么复杂的东西了,最多就是一一个求和一个号对不对,然后里边所有的这个点带进去就可以。
16:03
如果大家看这个公式太绕的话,我们把它简化一下,回退回到一元线性回归,大家再来看一下它到底是一个什么样子,那退回到一元现金回归,这是不是就变成了西塔1X加西零了,是不是X1就是就只剩下一个X了,对不对,X0是一对不对,那就没了,那所以大家想到带到我们这个公式里边。我是不是就要对西塔一和西塔零分别求偏导啊,得到的结果大家想到?这里如果要是西塔对西塔一求偏导是不是这里就是XG是是什么?XJ是不是就是X啊?大家想一下XJ是不是对应的西塔J对应的那个X,我们这里是不是就只剩下X了,所以是不是只有一个X就放在这里就可以了,大家想是不是就是要求这样的一个公式啊,最后再除以M乘以二对不对,是这样的一个公式,那对C的零求偏导呢?这里的X是不是变成一了呀?我们这里的那个X0变成一了,对吧?所以是不是就没没有后面这一项了,更简单,是不是直接带到这里边求求一个和,就是它的这个偏导数对不对?
17:19
那大家就会想到,接下来我们如果带到迭代公式里边,是不是西塔一减掉阿尔法乘以这一串,西塔一就更新了,对不对?西塔零再减去阿尔法乘以这一串,是不是西塔零也更新了?西塔零西塔一都更新了,那我们整个的模型是不是就更新了,相当于迭代算法向向下下降了一步。哎,这就是我们梯度下降的过程。好,那这里边大家要注意一点啊,这个阿尔法怎么去求解呢?呃,怎么去指定呢?阿尔法好像前面我们这里边所有的东西都已经有了,所有的这里边的都知道对不对,然后还有一个就是出始点,出始点我们可以去随便指定对不对,或者随机也可以,那这个阿尔法怎么指定的,你这不能给零对不对,给零就没意义了,或者说你随机那就那那也不行,那效果肯定不一样,阿尔法是不长对吧?或者有时候把它叫学习率,大家想为什么叫学习率呢?学习率是学习速率,是不是你步子越大学习的应该越快啊,是不是这样?哎,那所以有时候把它叫做学习速率,那大家想一下,这个是不是学习速率越快越好呢?步子越大越好呢?
18:34
呃,大家要注意啊,当然你如果要是这个太小的话,那当然肯定有问题,你是不是太慢了呀,学的太慢那可能半天都到不了最小时,对不对,这个是比较麻烦的,那大家要注意,我们也不能走的太快,就步子不能迈的太大啊,大家知道步子步子迈的太大就容易容易扯着,对吧?所以大家看一下这个这个地方它不是扯着,它是会有出现什么情况,对,如果这个步子迈的太大的话,我这个函数如果比较复杂,是不是一步就越过去了呀,或者这个函数是绕了好几下,大家可能看到会越到越到这里来,或者如果即使我们凸函数只有一个底的话,它是不是也有可能就跳来跳去啊,是不是就会出现这种情况,震荡的这种情况,所以大家要注意,阿尔法不长是需要注意的,不能太大,也不能太小啊,那当当然了,选取的过程当中,我们往往就是一个经验选择,对吧?呃,那如果说我们要去做校验的话,是不是就用。
19:34
碰到之前我们讲过的交叉验证啊,啊,你可能先去选取一下,然后再用一个测试集去测一测,看看效果好不好,对不对,如果效果不好的话,我们再去换,哎,所以这是这样的一个过程,那大家这里学了两种方法,就给大家对比一下了,梯度下降和最小二乘有什么相同,有什么不同?相同啊,那很简单,他们都是经典的学习算法对吧?啊,都是在已知的前提下去求导,然后算出一个模型,想要让损失函数最小对不对?都是想要取取损失函数的最小值,但是具体求最小值的过程就不太一样了,那首先本身损失函数其实他们选取也是可以不同的,为什么呢?因为最小二乘它的经典实现就是损失函数必须是平方损失函数对吧?而梯度下降大家看到它就是一个迭代对不对,是不是?我甚至都不要求你的这个损失函数是什么样的对不对?甚至连损失函数不是凸函数甚至都可以用,对不对,只不过是有可能得到的不是最小值了,对吧?那是不是得到就是局部极小值对吧?所以这是梯度下降的一个特点,那同样对应最小二乘,求出来是极小局部的极小值还是最小值呢?全局最小值就是。
20:57
直观的对不对,我们也知道为什么它一定要选取平方损失函数,就是要保证它是一个图函数对不对?哎,所以它求出来就是一个严格意义上的最小值,这是它的区别,那大家就会想到要这么看的话,最小二乘是不是精度就会高一些,梯度下降可能迭代法嘛,一步一步去做计算,最小二乘是一步公式全部精确的算出来了,看起来最小二乘似乎会更好一点,对不对,但是最小二乘是不是计算比较麻烦啊啊,所以我们实际在呃应用当中,其实是两种都有都有应用的,而且往往梯度下降用的地方还会多一点,所以大家要把梯度和梯度下降法好好的理解理解,梳理梳理,那图梯度下降是不是没有问题啊,梯度下降比较简单,是不是就非常好了呢?啊,当然它有问题,一个就是说精度有可能有问题,对不对,得到的有可能是局部最小值,另外还有一一个就是什么呢,它对。
21:57
步长和初始点是不是对它都有可能有影响啊对大家会想到步长,首先啊,你太大了不好,太小了也不好,那你如果选的比较合适,一开始下降的还比较快,最后下降到。
22:12
最小值附近的时候,大家注意是不是就有可能收敛速度就变慢了呀,因为函数变化本身就偏慢了,对不对,你往前走一步,有可能它下降不了多少,所以这是一个梯度下降的一个问题,所以基于基本的梯度下降就还有一些改进方法,比方说哎,我们的。下降的步长是不是可以调整呢?是不是可以一开始大一点,呃,后边然后再慢慢的变小呢?对吧?或者说我根据它当前收敛的状态调整它到底是收敛步步子大一点还是小一点,呃,这是一些改进的算法,大家都可以,就是去看一些扩展的文章,另外就是初始点,初始点它有一个什么问题,就是大家会想到你如果他这个不是只有一个底的话,那你出始点选在哪个山包上,是不是这个下降就有。
23:02
就有关系了呀,你如果选初始点选在这里,它下来下来就是这里,如果选在这里的话,是不是下下来就到了这边这个极小值啊,哎,所以大家会看到它是有这样的一些问题,好,这就是我们梯度下降和这个最小二乘求解线性回归的一些一些过程和这个原理啊,还有一些代码实现。
我来说两句