00:00
接下来要介绍具体的机器学习模型了,这一部分就真正的,呃,算法就真正的要上了啊好,首先我们看一眼主要内容,主要内容其实就就是两大类,我们讲监督学习和无监督对不对?那监督这一部分的话已经说了,回归和分类,我们这里边回归重点给大家介绍线性回归,而且这一部分确实是代码实现也会多一点,然后我们给大家分类模型里边讲三个。呃,三个分类模型就最经典的KNN,然后加上呃,逻辑思回归和决策数,那KNN我们可能用一个简单的程序去实现一下,给大家看一看效果,剩下两个我们就是把这个理论过一遍,因为实现起来会比较复杂,大家感兴趣的话也可以去就是网上找一些程序,呃,大家应该在大家也上github是吧,Github上其实这些现成的程序都是很多的,如果感兴趣的话,大家自己都可以去找资源,无监督这一部分的话,大家会看到我们给他的分类,一个是聚类,经典的这个聚类对不对,就是没有那个标签,没有这个分类信息的拿过来就是原始的数据都是X,直接把它做一个分类,这就是聚类。那这一部分我们讲一个K均值,也是最经典的kin,另外还有一部分是降维,降维呢在这一部分里边,我们就只是提一句,那在后边,也就是明天要给大家讲到的推荐系统算法里边。
01:30
其实我们会用到降维的一些算法,所以到那个时候再给大家去做一些详细的讲解好了,那接下来我们首先就看回归,回归前面我们已经说过有两种划分方式对不对?一种是根据是一元的还是多元的,另外一种是不是就是根据它线性还是非线性对不对?哎,我们这里呢,主要的划分是按线性还是非线性来划分的,而且我们主要要讲的是不是就是线性回归模型啊呃,其实大家可以想到回归我们已经讲了,它其实就是要你和一个Y等于FX的一个函数关系嘛,最后是不是就是要你和一条直线,呃,一条一条函数曲线啊,那么这条曲线如果是直线是不是就是线性,如果是,哎,别的形状不是直线,是不是就是非线性啊,所以直观的理解的话就是这样,然后后面我们会给大家重点讲一下最小二乘,当然后面还有梯度下降对不对。
02:30
这些都是包含在里面求解算法,接下来给大家说一下线性回归的概念,线性回归叫什么呢?它是一个线性模型,它是表达了一个什么样的函数关系呢?我们都知道回归就是要你和一个X和Y的函数,函数关系对吧?那么线性回归拟合的就是X和Y存在线性关系,对吧?那什么叫线性关系呢?我们看一下下面的表达。
03:01
存在的关系,如果是Y等于AX加B,大家想这如果画出函数图像的话,是不是就是一条直线啊,哎,所以就这样的函数关系,我们就把它叫做线性关系,所以这样的一个用这样的一个模型去做回归分析,这是不是就是线性回归啊,这其实很好理解,我们其实要给大家讲的是什么呢?是大家看下面这个表达式,FX等于W1X1 W2x2一直加,加到WDXD加上一个B,这是不是线性模型呢?哎,大家会看到这是不是只是它的维度变多了呀,是不是X的数量变多了呀,上面我们只有一个X,现在是不是121直到D有有D个X啊。那大家会想到它的系数。每一个X都对应一个系数,然后每一个X是不是只有。只有一次项啊,大家看看是不是只有一次项,如果说上面我们这个X,它有二次项的话,它是不是就不是线性了,二次项大家会想到就变成抛物线了,对吧?所以我们看它是否线性的时候,其实是看的每一个自变量它的这个次幂对不对,它的这个函数表达式到底是什么样的,如果只有这个一次项的话,它就是线性的对不对?所以如果我们要把这个函数图像画出来的话。
04:28
大家会想象一下它是一个什么样的图像呢?这也是我们上节课就留下了一个问题,对不对?假如说我们现在啊后这是有很多个X,假如说我们只有两个X的话,X1X2画出来的图像,Y跟它的关系是不是就应该是一个三维空间里面的图像啊,大家想象一下,假如就是W1X1加W2X2画出来这个图像应该是什么样的三维空间?大家觉得是一个一个平面是吧,其实不是,大家如果要是,呃,就是这一部分忘记,或者说是就是之前学的这个印象不深的话,可以回过头去再再想一想,如果要是平面的话,那是不是得要求比方说我们之前什么样的是平面。
05:23
X等于X0,这是不是一个平面啊,或者如果我们直接等于,就是这个Y等于X1,这是不是一个平面,就是如果只有一个变量的时候,这是一个平面对不对?如果它两个变量都合在一起的话,它其实最后合起来还是一条直线,是三维空间里的一条直线,对不对?大家想一下啊啊,当然这个如果大家忘记的话,就就再回过头去,再再去找一找这方面的内容,这个可能之前因为讲这个高维空间多维度多多元函数,可能就是一般都是提一句就过去了,就是不会去详细展开,大家印象不深也是挺正常的啊,这个就是,所以大家会看到啊,就是二维如果是一个自变量的话,其实就是二维平面上的一条直线,那两个自变量的话,其实是三维空间里的一条直线,那如果要是三个自变量呢,四维对,就是变成四维空间里面的一条直线。
06:23
啊,当然了,我们画不出来对吧?大家可以去想象啊,这个就比较复杂了,好,那接下来我们还是来想象一下这个线性回归,它应该怎么去求解,那还是之前我们讲过的线性方程,Y等于AX加B,这是一个线性方程对不对?我们要求解这个线性方程,是不是其实就是要求系数A和B啊,那之前我们这个例子是不是已经有过一个这这个例子啊,我们怎么求这个直线的方程呢?是不是两点确定一条直线啊,如果我们能够知道这两组数据两个点的话,其实就可以把它带到方程里面,解出系数A和B。
07:02
这是不是就是我们的一个求解方法,哎,这就是一个简单的一种求解方式,那这里边我们就又会有一个问题啊,实际我们的这个,呃,在做这回归模型建立的时候,我们用到的数据可不仅仅是两个点啊,我们是海量数据对不对,那这你两个点就确定一条直线,我我们海量数据的话,那就不是确定一条直线了,对不对不对,你如果硬要用一条直线来表达的话,言下之意是不是就不可能所有点都在这条直线上啊。那大家想一想,我们最后可能要的就是一个什么东西呢?我们最后是不是要的就应该是一个尽可能接近,能够把它拟合这些点分布状态的一条直线啊,那什么叫尽可能接近去拟合呢?条等啊,诶大家会想到是不是所有的这些点尽可能应该在这条直线上,那如果不能在这条直线上的话,距离是不是应该最小啊?哎,所以大家现在就已经想到了一个,这是不是就是我们所说的损失函数,诶,我们的损失函数就应该是这每个点到这条直线的距离加起来,如果能最小,是不是我们的损失就最小啊?哎,这就是我们已经想到线性回归损失函数的一个概念,好,那接下来我们还是先把这个,呃,就是准确的定义给大家标准化定义一下啊,什么叫线性回归模型呢?这个看起来有点枯燥,大家直接看公式就好了,这就是前面我们给出来的那一个多元的,呃,这个拟合直线的这样一个。
08:45
公式对不对?所以大家会看到啊,就是这里我们的自变量就是X1X2,一直到XD,那么如果说是它的一个线性组合的话,线性组合是不是表示每一项它的次幂都是一次啊,然后后面可能还有一个常数项对不对啊,常数项这个没关系,所以如果是这样的一个组合的话,我们就把它叫做线性回归的一个模型,这样的一个方程就叫多元的线性方程,对不对?它还可以有别的表达形式,大家看一下数学上的表达啊,可以把它写成一个向量形式WTX加B,这是一个什么什么意思啊。
09:27
对,这个W是不是就变成就是我们这里边所有W构成的一个向量啊,大家会想到W1W2一直写下去,这是不是一个向量啊,那默认大家会想到啊,呃,这里边我们是把它横着过来写了,其实默认。我们平常写向量的时候,是不是默认它应该是一个列向量啊啊,所以这里面其实应该是把它竖着写啊,所以WT做转制是不是应该转置成一个横横向量啊一行对不对,那后边这个X大家看其实是一个粗体的X。
10:01
这个X是不是也是一个向量啊,它是一个什么向量呢?对,X1X21直到XD对不对?那现在那默认的这个X是不是也应该是一个列向量啊?如果我们不加特殊说明的话,其实每一个向量默认都是一个列向量,现在这个WT乘以X是不是就变成了一行乘一列对不对?行向量乘以列向量怎么乘?还列就是还是最后乘出来是什么乘就是一个,是不是最后乘出来是一个数啊对,大家想啊,一行乘一列,一乘N乘以N乘一,是不是最后N和N都抵消了对不对?最后乘出来是一个数,这个数应该怎么算呢?是不是就是对应位置的元素相乘,最后加在一起就完事啊?那大家想它写出来是不是就是X1W1X1加W2X2,是不是就上面这个表达式啊,啊,所以大家熟悉一下这种表达啊,就是矩。
11:02
或者说向量的这种表达,经常在数学里边会有这样的简写,对不对?好,那么呃,这里大家注意一下,就是假如特征和结果都满足线性关系的话,那就是都不大于一次方,或者说在这里就都应该是一次方,对不对?我们得到这样的一个线性的模型,那我们的目标是干什么呢?我们已经有这个模型了,我们现在希望是不是要求解这个模型,要训练这个模型啊,那我们训练这个模型是要想求什么呀?想求X和Y吗?不是,X和Y是不是应该是我们的训练数据啊,应该是已知的,对不对?那我们要求什么?对,要求的是模型里面的系数是不是就是W和B,所以大家注意啊,W跟B如果要能算出来,如果要能学学习得到的话,是不是我们的模型就确定了啊,这就是我们训练模型,学习模型的一个过程啊,当然了,就是如果说。
12:05
我们还想这个东西觉得太简单,它就一条直线,这个觉得说明不了什么事情,那是不是可以在这个基础上加上二次项,加上三次项,甚至可以加奇奇怪怪的函数形式,是不是就可以把它改造成一个非线性的模型啊?呃,所以非线性的回归模型其实就是在这个基础上做一些变化就可以了,如果说变化成的是二次项,三次项加上加上的是一个多项式的话,这是不是就变成了一个呃高次的多项式回归模型啊,对吧?多项式模回归,那如果说要有一些其其他的一些形式的话,那就变成了其他的一些非线性模型了。好,那在这里边接下来就给大家讲一下,我们已经说了,模型已经定义好了,数学表达式也已经有了,前面我们是不是提到。我们是不是可以用每个点到这条直线上的距离去表示它的损失函数啊,表示它的一个误差对不对,那所以这种误差方式它是什么呢?那这个损失函数我们一般怎么去选取呢?
13:12
一般选取的就是大家会看到是不是就是平方损失函数啊,这个平方损失函数在在我们实际应用当中,一般应用的就是军方误差,那大家会想到军方误差是不是就是我们之前提到的这个,呃,就是平均平均的,呃,这个经验风险啊,是不是就是平方损失函数,如果带进去的话,就是我们所说的那个经验风险对不对?好,所以大家会看到这里我们就拿着军方误差最小化来作为我们模型评估的一个策略。那怎么样去求这样的一个模型呢?这个方法就是前面已经提到的最小二乘法,最小二乘法本身的这个概念大家比较听的比较多,但是本身这个概念其实有一点有一点奇怪的,就是二乘,他他非得叫成二乘,对吧?什么叫二乘呢?
14:13
其实大家看这个英文名字可能会更更明确一点,它的英文名字是什么?List的最小对吧?Square square是什么?对平方,它是最小平方法,所以它其实不是最小二乘法,它是最小平方法对不对?所以大家就会想到它是不是就是要求一个对平误差的平方,然后我们这里边的算法是不是要给它做一个呃平均对不对?呃,平方求和,然后再平均,这是不是就是均方误差啊,好啊,当然了,就是主要的思想,其实就是说让我们的理论值是不是应该在这条直线上这个黄色的点啊。和我们的观观测值实际点是不是蓝色的点,它们之间的距离,这是不是就是他们的误差啊,对,这个误差平方和最小就是我们的最后这个模型就会最优,我们的应用就是最小二乘法对不对?好,大家来看一下这个最小二乘法到底怎么求,大家想象一下这个怎么求。
15:17
好好,那首先我们要求这个模型,我们是不是首先应该把损失函数或者说目标函数先定义出来啊,那目标函数应该是什么呢?我们先看一眼啊,先假设,假如说输入的属性或者说特征只有一个,就一个X,那这个时候表达式就很简单对不对?呃,我们先用一元的这种线性回归来给大家做一个例子,就是FX等于WX加B,这就是我们的函数模型,线性模型,对吧?这里边的这个I表示什么呢?I表示DX点,大家会想到我们里边是不是有海量数据,大量样本点对不对?那就每一个Xi是不是应该对应到一个Yi啊啊,所以我们的想法是不是想要让FXY和Y尽量相等对不对?那最后的模拟是这样的,那最后我们算误差是不是就要,是不是就要这两个减啊它。
16:17
俩一减是不是就是对应的误差,那最后我们是不是要把每一个点的误差都加起来啊啊,而且我们是要误差求平方,然后加起来对不对,这就是我们的目标,好,那么大家看一眼,我们最后的这个目标函数是什么?大家看啊前面前面这些大家先不看啊,我们直接看后面这部分,后面这个公式怎么写的呢?是不是就是fxi减去Y这是什么?对,这是不是就是第二个点它的这个误差啊,误差在平方再求和,这是不是就是我们整个的误差啊,整个函数的误差,当然我们如果要是求这个均方误差的话,是不是前面再求一个平均数啊,这里面如果函数这个点个数已经确定的话,就是M个的话,那那是不是除以M不除M,这个求最小是不是没区别啊啊,所以这个我们就简写了啊,当然大家可以前面再加个M分之一,这就是均方误差。那前面这。
17:17
阿,命是什么意思呢?命是最小值对不对?我们要求的是不是后边这个函数应该求得最小值。时候的参数啊,那我们的参数是什么呢?诶,是不是W跟B啊,诶所以大家看这个阿命的意思就是说后边这个函数求得最小值时候的参数什么参数呢?W跟B,所以我们最后的这个W心B心是不是就是最后求出来最优化的W跟B啊,诶这就是我们列好的这个公式,所以我们把这个fxi是不是用上面的公式可以带进来,所以就是Yi减w Xi减B,然后再平方对不对?大家看这个公式里边是不是Xi和Yi,是不是全已知啊,我们是不是就把所有样本样本数据点的XY带进去就可以了,那最后求和之后这个这个公式里边未知数是是什么?是不是就剩W跟B啊?所以我们现在的目标是不是就是让。
18:24
后面这个函数求最小。让W跟B变化,然后取到它变化过程当中能使后边这个值取得最小的时候的W跟W跟B对不对?大家想一下这个怎么算。好,我们看一下,看一下这个这个最小二乘法,它的这个求就是到底是怎么样去求解这个参数啊,其实我们直观的一个想法,你要求最小值怎么求?哎,之前大家其实已经想到过,如果要是只有一个未知数的话,求最小值怎么求函数,是不是直接求导啊,直接求导得到的是什么呢?得到求导得到的导函数是代表它变化率的一个函数,对不对?如果它是一个下图函数的话,那变化率在什么地方就应该得到最小值呢?对,是不是应该函数导函数等于零的那个地方,求导之后等于零的地方是不是就是它变化为变化率为零是不是就是不变的那个地方啊,不变的地方是不是就是?诶原来下。
19:45
到下降,一直下降到不下降,然后就上升了,那这个点是不是就是最小值啊啊,当然这前提它是一个下图函数,如果是上图函数的话,求出来有可能是最大值对不对?我们这个问题里边大家看它是一个平方,这是不是一个抛物线啊,而且平方向前面是正的,是不是一定是向上的一个抛物线,所以我们是不是直接可以求导,求到它导数为零的那个点,是不是就应该是它最小值的那个点啊?诶,这就是直观的一个想法,那大家就又会想到了,这里边你不光一个未知数啊,两个未知数呢呀,W跟B这怎么求啊?哦,那大家就会想到了二元函数,多元函数,那也简单呀,我们是还是不是还有一招可以求偏导啊,我是不是可以分别对W跟B都求一下偏导,那大家会想到假如说求偏导啊,对W求偏导是不是就相当于固定B之后W的那个变化过程啊,这个W。
20:45
变化的过程当中,如果我们让它等于零,是不是就得到了,诶,W在固定B的时候,W。不变的是不是那个最小值啊,然后大家会想到我是不是还可以对B求偏导,这就是固定W让求到了B的最小值啊,大家会想到这两个它可能要求是不一样的啊,最后如果我能够求得一个W跟B,一组W跟B让这两个同时都为零的话。
21:17
大家想它就会出现一个什么情况,哎,是不是W最小的同时B也最小,这是不是就就应该是我们整体的那个最小值啊啊稍微有点绕啊,但是大家应该还是能理解的,对不对?哎,所以大家看这里我们的做法就是分别求导,对W1求导,求导出来是什么呢?啊,大家看一下这个函数求导怎么求。这是二次项对不对?大家回忆一下求导的法则啊,二次项是不是二就要提到前面来啊,对,后边这个项数要减一对不对,减一就一次项了,那就不用管了对不对?所以是二倍的后边一堆对吧?后边一堆还还没完是不是还得对对里边的这一个值再去求一个导啊,里边这一项整整体再求一个导,整整体这一项求导求出来是什么呢?大家看一眼。
22:19
呃,有点看不懂了是吧?啊,大家想二提出来了,里边是不是这一项先保留啊,先保留后边再乘以一个,对它里边整体求导的一个系数对不对?对里边求导,我们现在对W求导,对W求导是什么?Yi是不是就是一求导就没了对不对,这是常数对吧?对W的话,B是不是也没了?对W求导是不是求出来就是负Xi啊啊对吧,系数就是负Xi,所以大家看里边是不是相当于剩下是这一部分再乘以一个负Xi啊,所以大家看我最后的这个表达式是不是把负X乘进去了。
23:02
对不对?乘进去之后是不是Xi的这个项是不是就有一个这里是负的w Xi外面还有一个负Xi,是不是乘起来就是一个W倍的Xi平方,而且是不是还要求和啊,所以我就把这一项全提出来了,对不对?后面减掉是不是这一部分Yi减B后面还要乘以一个Xi,对不对啊,大家看这是这一项,大家看一眼这个求导是怎么求的啊?啊,当然下面这个对B求导是不是也是一样,那大家要注意这个求导就是里边这一部分,是不是前边这些就都没了,对B求导是不是求出来只有一个负一啊,啊,所以大家看到里边形式就会简单一些,求出求出来是这个样子,那接下来我们是不是令这两个全等于零,全等于零之后,大家会看到这变成一个什么问题了。这是不是W跟B是未知数对不对,两个未知数,两个方程,而且是不是里边它的这个项次数都是一次啊,二元一次方程组对不对?好,所以我们联立这个二元一次方程组,是不是可以把W跟B全求出来啊,得到的结果就是这样。
24:19
W就是这样一个表达式,B是这样一个表达式啊,所以大家呃,我这里不详细去推导,大家可以把这个方程组列出来,自己推一推,看看是不是这这样一个结果,那这个结果给大家来来描述一下啊,或者说分析一下,这里面包括什么呢?看起来好复杂对吧。这里面包括里边最重要的,大家会看到其实就是一个上面一个分子,下面一个分母对不对?分子是什么呢?分子是一个求和,每个点去求和对不对?这个I我们是表示第二个点对吧?一共是M个点对不对?我们是把这M个点要去求和,那每一项求和的每一项怎么算呢?是本身这个点对应的那个YI是不是它本身的那个目标值Y值对不对?实际的Y值乘以里边是Xi自己的那个坐标值减去X bar,这个一般上面加一横叫X bar对吧?X bar是什么东西呢?对,这是所有点的X的平均值,所以下面我把这个均值专门写出来了,对不对?所以这个均值我就直接放在这里。
25:31
好,所以上面其实就是这一部分内容,那下边分母又是什么呢?分母是两项的求,求差,做减法,前边这一项简单,是不是每一个Xi平方和啊,这是一个对吧,每一个Xi的平方和,后边这一部分大家看这是个什么东西呢?这是个每一个X求和,然后平方不是平方和,它是和的平方对不对?然后再求平均数。
26:00
哎,所以这一项如果看着有点奇怪的话,还有一种表达式怎么表达呢?大家会想一想,这个求和跟跟这个X bar有没有关系啊,因为X bar是不是就是求和之后再除以个数啊,那所以这个求和是不是其实就是M倍的X8,哎,所以大家会看到啊,里边这一项M倍的X8在平方的话,是不是就是M平方X8平方啊,所以大家可以看到里边这一项是不是可以替换成M就消掉一个对吧?里边就变成了一个M乘以X8平方对吧?好,所以等一下我们代码实现的时候,可能是用就是直接用把这个X8求出来,是不是到处就都可以用了,这里我们用M倍的X8平方就可以了。好,那后面这个B是怎么算的吗?呃,怎么算的呢?B就比较简单了,是一个大家看这是一个平均数对不对啊里后面是求和,然后最后除以一个M。
27:00
那就可以这个求和怎么求呢?这是不是就是相当于每一个点的那个误差啊,对吧?这是不是就是那个误差,所以就是每一个Yi减去W倍的Xi,所以这里有一个问题是W是不是应该先求出来啊,我们得把所有点带进去,先把W求出来才能求B啊,你不能直接把B求出来,这就是我们最小二乘法求解线性回归的过程,所以大家看这是不是相当于是有公式的呀,直接按照公式带进去就完事。好,那么理论这一部分我们就都已经大家会看到,就是这些,就把这个公式推出来,这就已经结束了,我们最后做是不是照着这个去算就可以了呀,好,那接下来我们就要做一个代码的实现。
我来说两句