00:00
接下来我们定义一个核心算法拟合函数,呃,这一步里边在定义这一个之前,大家看一下我们拟合的过程,是不是其实就是用公式去算W跟B的过程啊,然后我们输入什么呢?其实就是把所有的point输进去,然后把这个W跟跟B算出X的平均数对不对?所以我们在这里先定义求。均值的函数average,大家会想到这个肯定我们把一组data最后要返回它的一个平均数,对不对?那这个过程其实很简单了,那我们啊,这是不是跟上面很类似啊,跟我们上面做这个损失函数是不是很类似啊?Number一开始应该就是这个data的长度,对不对?For I in range,这个是number对吧?
01:07
啊,接下来怎么做,是不是萨我们要加一遍啊,每一个data是不是都要加一遍,好,那么得到最后我们的这一个和最后除以number返回是不是就完事了,哎,这就是我们的这个求平均数的这个函数,好接下来。呃,这个就是我们这里就不要说核心了啊,算法你和你和函数这里边我们再说定义核心。拟合函数拟合嘛,那我们就叫做fit吧,很多这个官方的包实现里边这个拟合的函数也都是叫FF啊,那我们要传入的是不是就是所有的点,把所有的点传进来,是不是就我们这里边的Xi Yi全有了呀?那我们最后带进去大家看还还需要别的东西吗?还有一个MM是不是我们直接根据也是POS的长度可以算出来啊,对吧?那是不是只要有points就可以了?哎,好,别的都没了,所以接下来首先我们是不是应该把M先拿出来ls points对吧?
02:28
接下来大家会想到我需要什么东西呢?哎,我是不是应该先把这个X bar算出来啊?呃,然后再带这个公式啊,我这个就叫X bar X bar等于什么呢?调自己写好的average函数对吧?里边传什么东西?里边是不是得传所有的X啊?对所有的X,呃,我们这里是相当于重复写了啊,前面这一部分只是画了个图,是不是其实就是这个啊,是不是points的D0列是不是就是X?所以我们是不是就把这个传进去就完事啊,好,Average points。
03:09
冒号零,这是不是代表所有点里边的第一列啊,当然大家也可以在在外面再定义出来X,或者说这里我们直接传XY,是不是这里就不用再做这个计算了呀?啊,我这里是直接把它点传进来了,大家可以自己去调整好,那接下来就到了我们核心的这个计算过程了,我们知道哎,这个W跟BB是依赖W的,所以我们要先算W对不对?那这个W怎么算呢?一个分子一个分母里边是不是都要有求和啊?那求和怎么算?哎,是不是循环肯定有一个for对不对?那这个for过程当中,我们是遍利某每一个点,那大家会看到这三个求和,我们需要三个for吗?显然不需要啊,大家会想到是不是一个for里边便利所有点,把每一个这个对对应的职权算出来是不是就完事啊?哎,这里边其实大家会看到啊,而且这一个其实都不用去算了,为什么呢?前面我们是不是说对用X bar可以可以给它做一个转换啊,转换出来之后M是不是?
04:20
消掉一个对吧?对,剩下M倍的X8平方,哎,这个大家回忆一下啊,所以我们现在要求和的其实就是这两个,好,那我们看一眼吧,既然要求和,我们是不是还是先定义一个sum,这个sum叫什么呢?分子上这个它是Y和X减之后的这个乘积,我们就叫sum姆YX吧。可以这样对吧,自己随便叫什么都可以,那下面这个是什么呢?这个是X平方,那我们就叫就叫X2吧,这个大家一看知道什么意思,对不对?上面是YX相乘的一个求和,下面是不是有一个X平方的一个求和啊好,接下来是不是一个for循环啊好,For什么呢?I in range多少是不是M里边啊,M里边去取,取出每一个M来之后,我们是不是要。
05:19
要拿到每一个点的X跟Y,那这个算法是不是跟上面这个这个完全一样啊,对吧,XY是不是也是用这种方法去去学points嘛,所以我们直接把它放在这里好,X跟Y拿到接下来是不是就是加了X some y X加等于它应该等于什么呢?分子。Sum,那是这个求和里边要加等于的,是不是每一个XY要带到这个表达式里边做一个计算啊,乘积对吧?Yi乘以Xi减去X8,好,那么啊,这个就不用加括号了,对吧?我们直接在这里算就可以,是不是前面是y Yi是不是就这里Y啊,乘以后边是不是Xi减X8 Xi就是X减去X8,大家看是不是就是这抄下来的呀,对吧?Sum X平方这个又等于什么呢?那这个简单了,是不是就是X的平方,这是不是就是X方啊?好,这两个算完之后,大家会想到这个for循环便利完了,这两个求和是不是全求出来了,我们是不是就可以根据公式去算W了啊,所以大家会看到啊,根据。
06:46
与公式计算W,我们先计算W,再计算B,那么计算W怎么算呢?大家看是不是就是这样一个除法啊,对吧?上面分子一项,下面分母两项相减,好,那我们最后得到的一个W定义出来等于什么呢?上面分子是不是sum y X,这是不是就是分子啊,下边两项相减相减啊,那前边是不是就是萨X平方,后边是什么?后边大家会想到是不是M倍的X8平方啊,所以我们M倍的对X8平方,平方是不是可以直接这个星星二,这就代表平方啊,好,所以大家会看到。
07:46
这其实就是我们整个的这个计算过程,W就这就算出来了,对不对?好,那接下来已经算完W的话,我们是不是再来一个for循环,可以把这个B算出来啊,那当然我们还可以in range m,当然这个很遗憾,就是这个计算的过程当中,我们还需要再去遍利一下所有的点XY是不是还一样求啊,然后接下来大家会想到这里边是不是也是一个求和啊,那我们还是定义一下这个求和是什么东西吧。
08:21
定义一个叫,这叫什么。哦,这有点像它的一个误差,一个一个差值对不对,我们就叫sum德尔塔吧,一个差值对不对,等于零,好,那所以这里边就是sum德尔塔加等于等于什么,是不是要去算这里的这个表达式的一个求和啊,对吧,每一项求和,所以里边其实也很简单,是不是就是一个Y,就是Y对不对,减去W乘以XW是不是已经算出来了,上面算出来了乘以X,这是不是就完了好。
09:02
那最后做完之后是不是B可以计算了,B等于什么呢?是不是就是这个和除以个数就完事了,平均数some得尔塔除以M,这是不是就完事了?最后我们这个核心拟合函数应该拟合完了,返回什么呢?是不是应该把求出来的这个参数返回去啊,这是我们最后求解的结果,对不对,Return w和B,好,这就完了,所以大家会想到,呃,在这个过程当中,其实我们就是照着公式,如果公式大家都已经推通,都已经理解的没有问题的话,代码是不是有对就是其实很简单对不对,无脑超就是对吧,看到西格玛,那就是一个for循环求和,然后呢,就是照着那个公式一个一个把它点带进去完事,好,那这一步核心的这一部分算法定义好的话,大家会想到接下来我们是不是可以去做一个测试啊。
10:05
那么测试的这一部分大家会想到这个就很简单了,我们是不是可以直接调这个把points掉进去,调fit方法就完事啊,这是不是就拿到了?好嗯,大家应该熟悉这样的一个一个赋值的模式,对不对?W跟B是不是可以直接这么赋值啊,SC里面也有对不对啊,对应的这样类似于解构赋值的一个一个方式啊好,那么接下来我们是不是应该输出一些东西,让我们来看一看啊,好,那么W是多少看一眼啊is对吧,我们放一个大print。B,我们把B也输出,另外大家还对什么感兴趣呢?这是我们的这个参数对吧?大家肯定还想画个图对不对?另外我们还对一个参数,一个指标感兴趣,大家能想到是什么吗?对,是不是当前你到底拟合出来之后损失了多少呢?哎,我们是不是计算一下损失函数啊,所以这里边我们定一个cost,等于这就掉了对吧?Compute cost里边是什么?对,WB传进去,另外还有points对不对?好,把这个做出来之后,我们print一下这cost的意思,我就简单写啊,大家想写别的也是可以的,好,大家看一眼现在的状态,直接运行已经算出来了,算出来的W,这是我们的那个系数斜率对不对,多少呢?
11:49
1.3324 B是多少呢?7.99啊,大概八的一个样子,B是相当于我们那个Y轴上的截距对不对啊,那个加起来的那个截截距啊,那么cost最后算出来110.257几这样的一个指标。
12:07
好,那么这么光这么看的话,其实我们也不知道它到底怎么回事,对吧?所以呢,最后我们还是再加一步吧,还是得画个图对不对,没有图看着不爽,画出拟合曲线,对,大家会想到这肯定就又要用到PRT了,对不对?好,那我们PRT还是啊,我们先把这个图里边,还是先把散点图先画出来XY对不对?然后大家注意这里面要画这个曲线的时候怎么画呢?它可以调PRT的plot方法,这个plot方法我们同样还是要传一个X,传一个YX直接用之前的这个可以,Y用什么呢?Y要用一个,是不是要用一个预测值啊,大家想一下是不是要用这个,我们根据这个拟合出来的曲线去算Y值啊,哎,这才是我们的这个,呃,真正的这个曲线啊,呃,针对。
13:07
每一个X计算出预测的Y值,好,那么我们就把这个叫做predict y吧,Y等于,它应该等于什么啊?它是不是就应该是W乘以X,再加上B啊,当然大家注意这里的X是不是一个向量一个矩阵啊,诶,Python好就好在这你如果用了number派的话,它是这里面的一个矩阵,你可以直接一个数据跟它乘,就代表是不是每个元素据都去乘一遍啊,然后再加上BB是一个数,是不是每个元素都去加啊,哎,所以这就是简单的一个写法,大家看是不是非常直观,哎,这得到的Y是不是也是一个一个矩阵,或者说一个向量对不对,也是一组值?好,那么我们画图的时候怎么画呢?这就不是scatter了,Scatter是散点对不对?我们用plot点图,这个点图画出来是一条直线,那X还是XY是什么?是不是得是predict y啊啊,另外我们再给给个参数,大家能知道这个C代表什么吗?
14:20
C代表color,代表颜色,我们换个颜色好看一点对不对?比方说这里给R,大家知道是什么意思吧,对,这就是red那么瘦对不对?看一眼,诶,再看这就是我们拟合出来的这条曲线,所以大家看看起来好像还是这么回事,对不对?呃,就是拟合出来之后确实有一些点偏差还是比较大的,因为大家能想到并不是说你呃一定的下的功夫越多就一定学习效果越好,但是呢,大体还是差不多,然后有一部分在它上面,有一部分在它下边,所以综合起来误差应该还是一个可接受的范围内,对不对?但大家会看到这个cos的这个误差110点几,是不是还是挺大的呀?呃,所以这个问题大家会看到,就是用线性拟合,呃,还是有有效果的,能说明一些问题的,但是可能没有那么的准确,就有一些点离它距离还是有一点远的啊,这就是我们这个最小二乘法得到的一个结论。
15:21
好。
我来说两句