七月在线公开课笔记-五-

七月在线公开课笔记(五)

【七月在线】机器学习就业训练营16期 - P1:在线视频:1-线性回归、logistic回归、梯度下降_ev - IT自学网100 - BV1Z9T5ewEKL

好没问题好,那我嗯好,我重新说一下啊,然后欢迎大家来到我们机器学习的这个课程,然后今天是我们正式给大家讲,机器学习算法的第一课,所以在今天这节课当中,我们会给大家介绍到回归类的算法啊。

这个回归类算法是一个所谓这个所谓的回归类,算法,是一个广义的回归算法,就是啊一一会儿我们会给大家介绍到这个啊,机器学习的这个不同类型啊,就是做做一个分类包,涵盖的这样的不同类型的板块。

然后大家会看到这样一个概念叫做回归,那在那个概念当中呢,我们的回归指的是你的输出结果是一个连续值,那我们这个地方指的回归类算法是一大类,所以今天的课程主要会给大家讲的是,一个是线性回归啊。

叫linear regression,然后这是一个很常见到的一个啊回归模型,还有一个叫logistic regression啊,叫逻辑逻辑回归或者逻辑思D回归,这是一个用于分类的一个问题。

然后这两个啊这个这个模型,同时你在周志华老师的西瓜书机器学习当中,它叫做对数几率回归,就是有不同的这个叫法啊,啊不好意思,这个地方的手写板可能有一点点怪啊,大家就是勉强看一下啊,叫对数几率回归好。

我们今天主要重点是介绍到这样两个算法,那在介绍这两个算法之前呢,我会先给大家梳理一点小小的machine learning的概念啊,大家在之后会学到很多的算法,但是希望大家不要对。

大家对这些算法的认识不是孤立的,一个小的算法呃,希望大家能建立起来一个地图,一个大的框架,然后你把这些算法逐一的放到这个框架当中啊,同时也能了解到算法和算法之间的一个模型,和模型之间的一些联系。

和他的一些啊优缺点啊,他们的一些对比,那这样的话会有一个更完善的了解啊,所以今天的课程呢,我们会先交代机器学习的一些基本的概念和基,本的板块,让大家有一对这个内容有一个基本的认识。

然后我们会给大家讲到回归大类的算法,包括linear regression和logistic regression,然后今天给大家讲到的这个logistic regression。

这个算法叫做逻辑斯蒂回归,或者是对数几率回归,也是你在工业界会看到很重要的一个baseline model,一个机械模型就是你会看到各种各样的应用呢,呃他都会先用它去试一下啊。

有一句在工业界有一句话叫做一招LR打天下,所以你看到的除掉嗯,没像BATTMDJ这样的公司以外,其他的大部分公司啊在广泛的使用这个base model,对啊好的,所以就是今天的一个大体的说明。

关于今天的课程,然后大家现在看到这个页面,我们给大家画的这样一幅图,实际上是告诉了大家整个机器学习解决,从解决问题的角度上,我们对它的一个分类,首先整个机器学习啊。

大家如果听到这个名词叫machine learning,这个笔好像不太好用啊,那大家要知道它可以分成啊,叫做监督学习和无监督学习啊,所以我给大家写一下可以分成啊,Superez learing。

监督学习和无监督学习,你看到的算法的,都大部分都是可以归到这个板块的,这两个板块的啊,但又会有一些特殊的一些一些这个呃板块啊,所以监督学习做的事情和无监督学习做的事情,我说明一下,监督学习呢。

类似于大家之前在上学的时候学习的这个过程,所以老师会给你一些题目,然后在这些题目的基础上,老师会给你一些参考答案,比如说你买的参考资料,它会有参考答案,或者老师会给你批改作业。

他会告诉你说这个东西做得对和不对,也就是说你做每一道题,你都有一个参照指导的一个参考答案,去验证自己做的对与不对,你是在有有题有参考答案的这个条件下去学习,如果如何更好的去做这些题。

所以你会总结出来一系列的做题的方法和思路,那这个时候你不仅有数据,你不仅有提,你还有标签,你还有标准答案,所以这个我们把它叫做监督学习啊,你看到了很多工业界的很多很多算法,都是这样一类模型。

而我们今天一会儿给大家讲到的,线性回归和逻辑回归都属于监督学习,无监督学习呢,它就像是没有标签的,这些数据给到你手里,你去总结它里面的一些规律,举个例子来说,在电商。

比如说淘宝或者京东里会有大批的用户数据,这些用户每天都会在这个app上发生,各种各样的啊动作,会有各种各样的行为啊,会浏览会有评论,会有加车,会有点击,会有购买,那你手上拿到的是一堆的这个数据。

没有任何人告诉你,说你的屏幕的背后是一个什么样的人,他不会给他刻意的去打一个标签,但是你有了这么多数据之后,你可以在这些数据上去挖掘出来一些信息,举个例子来说,你可以找到一波群体。

这波群体他是他的行为是比较类似的,你发现这群小姐姐都还很爱去逛口红品类,这群小哥哥都非常喜欢各种各样的电子产品,所以你会在无监督的场景下会拿到一堆的数据,这一堆数据是没有标签的。

你要在它的基础上去学习出来,一些模式和规律啊,那这个叫做无监督的学习是没有标签,没有答案,你只有这些数据啊,你需要去根据他的统计,根据它的分布去总结出来一些规律,一些模式。

比如说刚才我说的是典型的机器学习当中的,一个聚类这样的一个问题,比如说另外一些场景下呃,大家也会知道会有一个很典型的一个啊,一个问题叫做啤酒与尿布的这样的一个故事啊,说的是在大型的超市连锁超市当中。

也会有大量的用户的这个购物的流水,那这个东西呢是没有标签的,上面不会告诉你说这是一个什么样的用户,以及它的一些呃详细的情况,你唯一看到的就是这样,有这样的一堆的用户购购物之后的流水,那根据这个东西呢。

你可以发现哪些东西和哪些东西,可能是会被一起购买的,那你在做这个商场的这个这些货架栏,它的摆放的时候,你就可以去做一些调整啊,方便他们去购买,Ok,所以你需要树立的第一个概念是整个机器学习,通常情况下。

大家在互联网公司当中用到最多的两类,叫做监督学习和无监督学习,然后还有第三类叫做强化学习,叫做reinforcement learning啊,强化学习是另外一个分支啊,就是可能在咱们这个课程当中。

不会特别去讲这样一类学习呃,他有一点点像监监督学习,但是它的不同在于它的结果Y,这个东西是一个有有延迟的反馈,就是举个例子来说,你下围棋,你下围棋的每一步落子,都有可能会影响你最后的输赢。

但是他不会在当时这个时刻显现,你若下错了一颗子,可能会在10分钟或者15分钟之后,引起这盘棋的结局是输的,或者说他是赢的啊,这取决于你这一步下的好还是不好,所以你会拿到一个结果,你会拿到一个反馈。

但这个东西是有延迟的一个反馈,再给大家举个例子,你们知道有一家有一个公司叫做滴滴,然后滴滴很重要的一个场景,是去做一个啊运输力的一个调度,但是你他想做一些事情,比如说滴滴。

也许他关注去把每一个司机一天的收益最大化,但是你想一想,这在这个场景当中,我的每一次派单,我把滴滴这辆车派到另外一个地方,它的终点给到了A这个地方,和给派到了B这个地方,这个是会影响司机的下一次阶段的。

我把他派到了A这个地方,他下一次接单只能在A附近去接吗,我把他派到了B这个地方,他下一次接单只能在B这个地方去接,所以你的每一次你的每一个动作,你的每一次决策都会影响他,从下一个时间点开始之后。

所有的动作,而这些这些结果它最终会有一个反馈回来,你今天一天结束之后,你去看一看今天所有成交的这个单,所以我接了班加在一起,你才知道我今天的收益有多大,所以强化学习它有一点点像监督学习,但是他的这个Y。

通常情况下是一个有延迟的反馈,他不会在当时那个时刻就发生,它的结果不会在当时那个时,结果在当时那个时间点就反馈给你,所以这类算法很特殊啊,大家我在我们这个课程当中,不会特别去给大家讲这一类算法。

我们关心的点是上面的监督学习和无监督学习,这也是大家在互联网,至少在互联网公司会更频繁用到的两类算法,而其中的监督学习,如果大家再对它细分一下,会细分成这个地方啊,sorry我箭头画错了。

这个地方的分类和回归,那这个是如何区分的呢,这个场景区分的方式是根据输出的结果Y,在有些场景底下我们做的事情是选择题啊,一会儿下一页你会看到在有些场景底下,我们需要去解决的是一个问答题。

你需要给我一个明确的一个连续值的结果,或者多个连续值的结果,OK那无监督学习呢,它也有很多算法,很典型的AA算法叫做聚类好,所以大家先竖立起来一个大的框架,这个大的框架就是在机器学习的场景下。

我们在这门课当中,我们关注的算法是supervise,当你监督学习和unspots learning无监督学习,而其中的监督学习又可以像下一页一样,去分成分类和回归两个问题。

那所谓的分类问题是什么问题呢,在很多很多的场景底下,我们需要解决的问题是去做一个选择题,所以你在一个很典型的垃圾邮件识别的,这个场景下,你最后的结果就是一个选择题,有两个选项给你。

你要判断你现在给到你的,这个有一堆的文本或者图像的这个这封邮件,它到底是一个垃圾邮件,还是一个不是一个垃圾邮件,所以你的选项就是两个选项,A和BA是B不是,比如说你去做一个文本情感分析。

今天你打开了淘宝,你打开了京东,你看到了评论,你看到了买家秀,你要去判断你现在这个地方的用户,到底这段评论是一个啊,对这个商品是一个称赞还是一个这个批评,那你你在这个情况下给到你的就是文本。

你需要去判定的结果,就是这个结果是一个positive还是一个negative,OK所以这个时候你做的是一个选择题,你的选择题有两个选项,一个选项是这是正面的情感分正面的一个呃。

一个褒义或者说一个鼓励的这个评论啊,另外的选项是这是一个批评或者贬义的,这样的一个评论,OK然后第三个安利是啊,我们知道现在深度学习非常热对吧,所以大家会看到一些所谓的deep learning。

或者neural network啊,从某种角度上来说,它实际上也是一一种机器学习啊,只不过他这个时候的形态用的是神经网络,那在这样的模型当中,你解决的问题也会有很多很多的问题,比如说一个典型的问题。

是关于图像内容识别的问题啊,你们千万不要以为这个地方的图像内容识别,他做的事情是他做的事情,是真的让这个模型去看到世界上的万事万物,去告诉你说他是什么,大家想一想,你平时你你在你的世界当中,你放眼望去。

你看看你周边的这些东西,你能够给给出来一个能够报出来他的名字,或者说给出来一个解释,根本原因在于你从小到大的成长环境当中,你知道有这么一些东西,所以计算机去完成图像的内容识别。

实际上也是有一个大的知识库,大家知道有这么一些东西,比如说我现在在这个地方列了四个选项,叫做喵星人,汪星人,人类和草泥马,当然它会有第五个选项,发现不在这四类当中,所以第五个是都不是。

那这就是一个选择题,他完成的是一个五分类的选择题,我会给你五个选项,你从里头选一个,OK总之大家想了想,发现这个地方分类问题,说的事情是我去做选择题,那不屑于我上面给大家列到这些例子,举个例子来说。

在电商当中场景当中,我们很关心一些东西,比如我们很关心在淘宝这个这个商品下,你会不会发生购买这样一个行为啊,所以最后你也是完成一个选择题,你的最终结果无非是两种,我买了它,我没有买它。

所以我会去构建一个模型去区分一下,说哪个商品你更有可能会购买,那我就把它放在前面了,所以这就是一个很典型的分类问题,OK那下面的回归问题,对比上面的选择题呢,对他做的是一个问答题。

所以呃你不需要告诉我说,刘德华和吴彦祖都很帅,请告诉我他的具体颜值的得分谁更帅一点,到底是吴彦祖是9。4,刘德华是9。2,还是刘德华是9。8,吴彦祖是9。6,所以你不需要告诉我,Yes or no。

你不需要告诉我啊,它它是某一类,我需要你告诉我一个具体的值,举个例子来说,头号玩家的票房值有多高啊,某一个电影的票房值有多高,魔都的房价具体是什么样的一个值,那你思考一下,它显然不是一个选择题。

因为具体的这个值它有无穷种取法啊,你只需要你的票房多一块钱,少一块钱都不一样,房价也一样啊,颜值的得分多0。1分多,00:05分都不一样对吧,所以这个地方的分类问题和回归问题呢,其实啊都是监督学习。

我都有X都有Y,仅仅区别在于,我这个地方的Y到底做的是一个选择题,还是一个填空题,OK所以大家有一个基本的概念,OK好的,那下面这一页呢讲到的是聚类问题啊,这是我刚才给大家说的,在淘宝和京东的场景下呢。

你可能会有很多很多的用户行为,那这个时候你不可能呃,找一个人去把所有这些记录全看一遍,是看不完的啊,就是在阿里的场景下,尤其在京东的场景下,他会有有非常非常多的用户,非常非常多的数据啊。

就是数据量级可能在几10亿,几百亿这样的量级啊,在一段时间内就会有这样的量级,然后数据的维度可能也会高达几亿几10亿啊,这个时候你是看不过来的,所以你想去挖掘一些信息出来,你想对这些用户去看一看。

这些用户群体有什么样的差异,他们都有什么样的贡献,你就可以基于你的数据X,去用一些无监督学习去挖掘一下,比如说最典型的无监督学习叫做聚类,你可以让用户和用户之间去抱抱团,基于他们的用户行为去抱怨抱团。

所以你就会发现,那些爱买口红和连衣裙的小姐姐们,你也会发现那些爱买电子产品的小哥哥们好,所以大家在这个地方有一个先有一个认识,我们将来看到的几乎这门课当中,所有的模型都可以被分到这个地方的监督学习。

更具体一点,分类和回归的监督学习以及无监督学习,比如说聚类或者是其他类型的啊,降维数据,降维等等这样的一些无监督学习当中啊,相信大家也有一个基本的认识,他们区别在于说到底是给题给标准答案。

这样学习的方式,还是说是只给数据去挖掘这样的信息,这样的这个方式,同时呢你也知道做选择题和填空题的差别好,只是一点小小的概念,然后来到下面这一页,这个地方呢我们找了一个周志华老师的机器。

机器学习西瓜书里面的一个案例对吧,所以呢我想给大家建立一点小小的概念,就是你需要知道呃,我们会有一些称呼,我们会有一些术语,你需要知道这些称呼和术语到底说的是什么,所以刚才我已经给大家介绍过了。

无监督学习和监督学习,那在这本书的这个例子当中,显然这是一个监督学习呃,我需要根据这个地方的三个信息,颜色,西瓜的色泽和西瓜的耕地和西瓜的悄声,去判断它到底是一个好瓜还是西瓜,更具体一点说。

这是一个做选择题的一个问题,我最后的结果就是两种情况,我要么判断它是一个好习惯,要么判断它是一个坏的西瓜,而我的依据是前面的这样的三列,我们通常会把数据组织成这样的一个形态,大家如果有兴趣。

将来去参加数据科学的比赛,你会发现所有数据科学比赛的数据啊,他都很习惯,会用这样很很规范的,行行列列的数据给到你手里,那在这个数据当中,大家来看一看这个方阵的数据,行行行行列列的方阵数据。

在这个数据当中,你的每一行是什么,每一行是一个西瓜,每一行是一个西瓜,所以每一行是一个什么,是一个事例,是一个样本,是一个样例,Ok,所以在这个数据当中的,每一行都会是一个他找过来的西瓜。

用于学习的西瓜,在你初高中的学习过程当中,这里的每一行都会是你找过来的一道练习题,要带着答案的练习题,所以这个地方的西瓜是一个,他会找过来一个西瓜,他会告诉你,它到底最后这个选择题的结果是一个好习惯。

还是一个坏习惯,同时它会给到你前面这样一些,用于最终西瓜是好西瓜,还是坏西瓜的这样的一些判断啊,你会拿到手里题目的参考答案,选择题的参考答案,你也会拿到选择题的题干或者是他输入的信息。

所以这个行行列列数据当中的每一行,大家对它的理解就是一个样本,在这里就是一个西瓜,所以大家记住他的称呼,可以叫做示例,可以叫做样例,可以叫做样本,他们说的是一回事,那每一列是什么呢。

你去推断这个西瓜到底是一个好的西瓜,还是一个坏的西瓜,你总有一些你需要去判断的依据,那这些依据可能会有很多很多不同维度的信息,所以每一个维度的信息,我们把它叫做一个属性,叫做一个特征。

所以大家在这里看到的每一列,包括西瓜的颜色,包括西瓜的敲的声响,包括它的根地,这个东西都是属性,都是特征,所以在将来的大家学习机器学习的过程当中,你会更多的看到这样的一些概念,当提到这个概念的时候。

你要在脑子中浮现这样的一幅图,你告诉自己说,实际上他说的就是行和列,当他提到一个样本的时候,它指的是一行,指的是一个西瓜,指的是一道题,当他提到一列的时候,它指的是我的一个。

用于完成这道选择题的一个属性,或者是一个特征,而最后的这一列显然是label,是我们最后选择题的答案,也就是我们的标记空间和输出空间,好OK所以这是一些基本的概念,大家了解一下。

那整个机器学习做的事情是什么呢,所有的事情在于我准备好了这么多题,我准备好,我在夏天准备好了这么多西瓜,我送到你手里的时候,你能通过我们在这个课程当中学到的,一系列的模型。

从前面的这个选择题当中去学习出来,一个X到Y的一个映射,注意哦,这是有监督的学习,所以我学习出来的东西是这个地方的一个映射,而种种模型只是这个地方的映射不一样,这就像大家解题的时候。

你有不同的解法是一样的,你去解决这一道数学题,如果它是一道选择题的话,它的标准答案一定是固定的,但如果它是一道解答题的话,你可以有不同的方式去解决这个问题,而这个地方的机器学习。

实际上对应的是这个地方的解法,这个地方的F比如说同样是这个地方的色泽,耕地和敲声,我要根据这三个维度去推断,一个西瓜到底是好瓜还是坏瓜,我有很多推断的方式,比如说今天大家看到了逻辑回归。

一会你看到逻辑回归或是一种计算的模型,去拿到一个概率值,比如说大家在民间课程里学到的决策树,它会是一种规则,所以我的种种方法体现最终的差异,在这个F上我会用一个不同的表示啊,实际上它也有它的称呼啊。

你可以叫做表示,可以叫做表达,你也可以叫做假设函数,它会通过一个这样的东西,这个东西最终的目的就是我每送进来一个X,我每给你一道题的时候,你可以基于这个方法去达到一个答案。

而这个东西就是你通过不断的学习,去不断的这个学习的过程,去不断的完善和积累出来的,这样的一个模式或者规律,所以你做的事情是我数据已经准备好了,而且我知道这个地方的数据有行有列,我知道有样本。

我知道有属性,我知道有标签,在这个的基础上,我把它送到各式各样的model当中,我把它送到各式各样的模型当中,我试图去学习出来一个学习出来一个模式,学习出来一个规律,而这个东西最终目的在于。

在将来某一天你去参加高考的时候,没有标准答案摆在你面前的时候,你拿着这些题你也能积极,你也能根据我之前总结到的规律,总结到的做题的方法方式去完成这个题目,就给出来一个答案。

而且我会希望你给出来的答案越来越正确越好,所以这个地方会有一些其他的概念,比如说给到大家的那些叫做训练集,给到大家的那些题呢,是你平时去做练习的训练集,OK那还有另外一个问题,那叫做测试集。

那个东西你是提前看不到的,高考之前高考题虽然出好了,一定是密封的,一定是在高考当天你才可以看到这份题,而且你只有一次机会,当你做完了这些题,当你去评估它的结果之后,你不可能再跟他说。

老师我再高考一次一模一样的题,No,这个地方不可能,所以你要从你的训练集上,你要从你的训练数据上学习出来做题的规律,学习出来这个模式,而在高考的时候,面对新的样本,面对新的题的时候,用这个模式和规律。

用这个F去对这个地方的X做一个预估,拿到一个答案Y,我们会希望这个地方的F越通用越好,我会希望这些同学们在参加高考的时候,准备的越充分越好,学习到的知识越稳固越好,学习到的做题的方法通用性越好越棒。

所以这个地方大家看到其他的一些概念,说的是这个事情啊,右边这个东西刚才我已经解释过了,所谓的分类回归,所谓的二分类是啊做选择题的A和B啊,就是正面反面啊,抛一颗硬币的正面反面说的是一样的。

OK这个地方是一点小小的介绍,这一页当中有一些概念,大家将会在未来的机器学习的学习过程当中,会再次见到好,我先往后跳一跳,我们来到今天的第一个model叫做linear regression啊。

OK这我知道这个模型很简单,但请大家静下心来听一听,因为我想阐述的不仅仅是这个模型,而是让大家建立一点基本的概念,我们将将来所有的模型会丢到一个套路当中,你可以把它总结成以同样的一个套路。

但是它有不同的表达,会有不同的优化,所以导致了他最后的结果,或者它的形态,或者是他的方法是一种不同的表示,这个是一个确实,你在很久以前就学过的一个模型对吧,所以大家上初中没上高中的时候,就知道说。

我可以基于一堆东西的这个运算去做一个预估,老师会告诉你说你怎么去拟合一个二次函数,你怎么去拟合一条直线对,所以这个东西你和一条直线,这个东西叫做线性回归对吧,那我们用专业的术语来形容一下这个东西。

他说的事情是这样的,首先它是一个有监督的学习,大家要明确一下,linear regression是一个有监督的学习,他要学习到的,每每一个每一条记录,都可以记录成这样的一个样本。

都可以记录成这样的一个样本,这样的一个样本就是我刚才说的X和Y,只不过这个时候你为了去学习到这个规律,你需要很多的X和Y,你需要去做很多的题,你才能总结到规律对吧,为什么高三的时候。

老师会让大家反复的去做题,因为你只做一两道题,你是学不到通用的通用的规律的,所以我在这个地方会准备好一批所谓的一批,这个地方是N个样本,N个题,N道题,那这N道题每道题都会有它的输入,X会有它的输出。

Y这个地方的输出Y因为它是一个连续值,所以它是一个回归类的问题,我要学习到的东西是一个映射,F从X到Y之间的一个映射,对于输入的X可以输出连续值Y,我假定输入和输出之间对,是一个线性的相关关系。

OK所以我们建立了一个基本的认知,说线性回归这个东西,大概就是说你准备了一堆的XY,然后我会用一个线性的表示,去完成X到Y之间的一个映射,而我可能想去学习出来一个这样的映射,好啊,没关系。

这个model很简单,但是这个model啊,待会我们会用机器学习当中的这个套路和板块,就给大家重新的阐述一下啊,这个地方有一个小小的问题,让大家去思考一下,说如果你去让一个6年级的小学生。

在不问同学具体体重的情况下,把班上的同学按照体重从轻到重去排队,这个同学会怎么做呢,他可能会环顾一下他的周边的同学,然后他可能会通过观察大家的身高和体格,来完成这个排队。

这个事情是一个非常合理的事情对吗,因为根据我们的常识,好像一个人越高,他的体重应该是越重的,基本是这样的,然后一个人越壮,他应该可能是越重的,所以你从里头拆一个维度出来。

比如说这个地方我们采集了一些样本,我们找了一个班上的同学过来,我们把他的身高和体重啊,以横纵横横纵坐标的形式,标到这样一个二维的坐标系当中,所以大家在这里看到每一个蓝色的样本点。

实际上是我找过来的一个同学,然后我在这幅图上戳了一个点,而线性回归想做什么样的事情呢,线性回归扫了一眼这幅图,他告诉你说,哎我发现了这个上面,好像随着我的身高不断的变大,好像我的体重有一个递增的趋势。

那我能不能用一个简单的线性的表达形式,比如说这个地方是一个一条直线去拟合出来,这样一个变换呢,所以啊线性回归,最终的结果会是这样的一个形态啊,所谓的线性,就是因为它这个地方是一个在二维平面当中。

它是一条直线,这样那你要学习到的就是这条直线的斜率,和它的截距,OK好,这是一个简单的例子,另外一个啊就是有一定年代,有一定历史的例子,是这个皇家预估的例子,相信很多同学都见过这个例子了。

所以在这样一个例子当中呢,我们知道影响房价的面,房价的具体的价格有很多很多的因素啊,举个例子来说,和它的面积有关系,和它是几居有关系,和他的地理位置有关系,和他是否是学区房有关系,和他的楼层有关系。

和他的建筑年龄有关系,OK好,所以大家看到这个地方我们给到的这一页,实际上呢我们抽了一个最直接的一个影响因素,叫做面积,很显然在大家直观的理解当中啊,房子的面积越大,应该它的房价是越高的。

所以在这里面我们找到了一些房子过来,我们把这些房子的数据记录在这,我们说每套房子它到底是多大的面积,我记录在左边,它到底最后是什么样的一个价格,记录在右边,所以我积累了一些数据。

这个数据同时同样和我们前天给大家讲到的,数据形态是一模一样的,它是一个行行列列的数据,他的每一行会是一套房子,它的每一个列呢啊除掉最后的这个价格,这个标签列,它其他列都会是对应的X对应的输入的属性。

对应的输入的特征,OK好,所以啊对大家在这里看到的这份数据,就是最简单的一份数据啊,好所以这个地方呢同样有一幅图去拟合出来,这个地方的面积和这个地方的price啊,它之间的一个关系啊。

大家有问题可以先在我们的边框里头,而且可以在我们的这个呃讨论区去提问,那我会视情况会做一个回答,或者我会每一段时间之后,给大家做一个集中的回答,好吧,就是希望那个大家先跟着我的节奏去啊,往后走。

因为你们问到的有一些问题,实际上是一些和今天的模型本身,并没有太相关的一些问题啊,我们一会集中来给大家交流一下好不好,所以啊这个地方所谓的线性模型,对模型确实很简单,我理解。

所以它的横坐标呢就是它的面积,它的纵坐标就是它的price,你发现有这样一个正相关的关系啊,如果你这时候用简单的模型去做拟合,很有可能就是这样的一条直线好,那刚才我说了。

房价影响的因素远不可能是这一个因素,影响因素多的很,所以在这种情况下,你很有可能会有其他的一些因素,比如说它是几居,比如说我刚才说的一些房林呢,比如说它是否是学区房啊,比如说它的地理位置啊等等。

那所以当你把这些信息,以数字化的形式表示出来的,表示出来之后,你会发现这个时候的变量就变多了,那只不过这个线性模型由刚才大家在二维,在二维平面当中见到的一条直线,变成了在高维平面当中的一个平。

这个大家相信大家有一点小小的概念,就是我们可以把这个东西写成这样的一个形式,C打零加C打1X1加C的2X2啊,以及你在机器学习当中,你可能要习惯另外一种表示形式,是向量化的表示形式。

如果我把这个地方的seed写成一个列向量啊,一般情况下我们会习惯用列向量啊,就是C大于零啊,C打1C大二,那我这个时候的X呢,它是一个也是一个列向量啊,所以它是X1X2X三。

那这个时候很显然我对C打去做一个转置,它变成了一个什么向量,我对C打去做一个转置,它变成了什么向量,给它变成了一个行向量,那一个行向量和一个列向量去做啊,或者说你可以理解成,这两个列向量去做一个内积。

它的形式实际上和大家在这看到的是一样啊,当然这个地方那个所以X0X1X二对,然后X0呢它大家可以认为它等于一啊,对吧好,所以拿到结果会是一个数,对不对啊,好的啊,当然了,实际的情况就像我刚才说的。

你见到因影响这个房房价的因素多的很,所以你最后看到这个情况,它又会变成,刚才我们在西瓜那幅图当中看到的一样,有很多行,有很多列,那其中的每一行就是一套房子,其中的每一列它就是这套房子的决定。

最后价格的一个因素,一个属性,一个特征,嗯好的,那你要完成的东西就是在大量的样本,大量的训练集当中的题,大量的训练集当中的房子当中总结出来的规律,F去用在我现在的未知的这次高考。

或者这个新的房子的价格预估上去预估,拿到一个结果,抽象一下做的事情,实际上就像这一页给大家写到的一样,我需要去学习出来一个这个地方的training set,上面X到Y的映射F。

只不过这个F它的形态可以有各种各样的形态,那在linear regression当中,我们给了一个最简单的形态,是一个线性组合的形态,那在这样一个线性组合的形态里头,大家看到它可以写成。

它可以写成一个向量化的表示形式,刚才我已经给大家提过了,是像这个地方的最大的转置,乘以X这样的一个形态,那在这个表述里面,我们认为所有的C大和X它都是列向量啊,这是我们习惯的一个表述啊,叫做列向量好啊。

相信大家没有问题,那问题来了啊,师兄师姐告诉我说用这样的学习方法去学,所以我知道了,我固定住了一个这样的F对吗,我的F就是一组这一组输入的X,去做这样的运算,拿到一个结果,所以啊是考入考进清华。

北大的师兄师姐给了很多的方法,告诉你说你就这么学吧,你每天就先学呃,先做这个,早上起来先做英语去读一会儿英语做英语,然后做什么题,然后做什么题啊,所以那个道理大家懂很多,方法,大家懂很多。

但是并不一定并不一定每个人都能做好,对不对,那都是这样的一种形态,并不是每一个线性模型都能把这个问题预估好,同样是用这样的模型,大家都是用这样的模型去做项目去参加比赛,有些人能进前三。

有些人连前300都进不了,所以显然是有差别的,所以差别在哪,差别很显然,大家发现了,就在这个地方的C打上,所以我已经知道是这样的一个形态了,我已经知道师兄师姐告诉我,是这样的学习方法了,为什么会有差别。

大家学的不一样,大家的C打不一样,所以我怎么去找到最好的这样一组C打,可调的这样的一组theta,对于我的输入的X我能最好的去几何,我现在的每一个答案为这是我们关注的东西,那我想另外再说一点东西。

因为这个模型很简单,所以我知道有些同学会觉得说,唉我想学高逼格的模型,为什么老师要一开始给我讲这么简单的模型啊,这个模型本身不是,并不是我们想给大家重点去啊,就是说特别重点去给大家详述的。

这样的一部分内容,我想讲述的内容是,如果你看一看整个机器学习所有的模型,包括深度学习的模型,你会发现一个很有意思的事情,这个意意思有意思的事情是这样的,首先呃我这地方会给大家列一下公式啊。

比如说我们把所有数据机器学习当中,解决问题的方法叫做数据驱动的方法,叫做数据驱动的方法啊,这个名词啊,这个啊有些同学可能听过啊,叫beta jing数据驱动方法,那数据驱动方法关注两部分。

第一部分叫做数据,第二部分叫做算法或者模型,好没问题,那数据这个东西以后再跟大家说,它同样非常重要,就是它同样非常非常重要,你们看到那些大型互联网公司,B a t google,FACEBOOK啊。

TMDJ这些公司当中,它的能做好的,很大一部分原因是因为它的数据量够在小公司,中小型数据中小型公司当中,你要去用这些AI的算法,它的数据不一定足以支撑模型,学习到非常好的模式,这个东西我们之后再说。

我们会有专门的课告诉大家如何去做数据处理,如何去做数据上的信息抽取,好这个先放一放,我们看一看后面的模型的部分,也就是和更多同学关心的这些很fancy的model啊,大家都很想知道这些逼格很高的模型。

说老师我听说这种隐马尔可夫模型,条件随机场都是很高级的模型,能给我讲一讲吗,请不要把每个模型当做一个孤立的模型来看待,这些模型的产生是为了解决问题,所以每个模型它会有有不同的部分。

如果我们这个地方对模型去做一个拆解的话啊,这是我自己写的一个公式啊,它不一定啊,你不一定在某本书上可以查到它,或者是你可以看到一个呃,某一个学术巨作上会有这样的一个写法。

但是这个东西它当你看完这些模型的时候,你可以把它套到这个公式里,那每一个模型会是什么呢,它会有一个假设函数,或者说你叫做表达啊,假设函数,那这个假设函数呢它是一个F,这个F可能是可能是一种计算的模型。

可能是一个规则,可能是任何一个其他的东西,当你有这样的东西以后,就是师兄师姐告诉你一个学习方法,你能不能用好,取决于你要在这个大的架子下,你要再给给定你的这个学习方法的基础上,去完成什么。

后面的部分叫做优化,如何去让这个地方的C打一步步的去,朝着让这个模型变得更好,你和更准的方向走,这个部分叫做优化,所以等学完今天的课,学完明天的课学完再往后学完其他的课,你再来看一看这个公式。

你会发现无非是我换了一种表达,我在线性回归当中,我用一个这样的方式去完成预估,我在决策树当中,我用这个规则的方式去完成预估,我在后面其他的FM当中,我用另一种方式去完成预估,我在其他的模型。

而更多的模型当中我选择其他的方式,其他的形态的方式去完成预估,你选了某一个师兄师姐的方法,然后后面的优优化的部分,实际上在做的事情是,我如何让我现在学到的这个,找到的这套学习方法。

最好的去适合我现在的这个数据,去学习出来最有用的做题的方法,能让我在高考里取得最好的成绩好,所以刚才我们提到的这个部分,对有些同学在其它很简单,对它非常简单,它仅仅是用了告诉我们假设函数是什么。

所以当有XL我这么算,但是拜托你要算的话,你要知道这个C的,而且它会影响最后的结果,他怎么算呢,好请来到第二个部分叫做优化,所有的学习过程必须有一个方向吧,你在做题的时候。

你也得知道有同学会老师会告诉你一些事情,说你得你得加油学习啊,你得合理分配一下的时间呢,你得看一看你的错题在哪,请拿出你的本子,把你的错题记一记,多去看一看这些错题到底错在哪。

总结一下你做得不好的点在哪去优化一下,所以这个东西变到机器学习里面,它是什么样的一个过程,你方法已经给你了对吧,师兄师姐能凭借这套方法考进清华北大浙大,上海交大,复旦啊,这样很好的学校。

你用这套方法能不能学好呢,对你来看一看你该如何去学,所以在学学习的这个过程当中,你会再看到这样的一个概念啊,刚才我们讲到了一部分叫做优化对吧,好优化这个东东东西,我再给大家做一个公式的拆解。

通常情况下在监督学习当中啊,我们来那个做一个约束啊,在监督学习当中它会等于什么呢,它会等于你的一个评估,你每个部分做的好与不好的一个loss function啊,这个东西呢一会儿再说它是什么啊。

大家先听听一下,有这样一个东西,再加上一个什么对optimizing的一个呃,一个呃算法啊啊有点丑啊啊,那我就写写这个优化算法叫做中文好了对啊,有这个英文的字样啊,但是给大家说一下啊,这个叫损失函数。

这个叫做优化算法啊,我跟你说这个公式是通用的,这个公式是通用的,所以你今天学到的东西要机器学习对吧,等等你有时间了,往后看看深度学习,你看TENSORFLOW,你看PYTORCH啊,你觉得逼格很高对吧。

谷歌家的TENSORFLOW啊,FACEBOOK的PYTORCH,然后呃但是你去看一看,你会发现诶这里头有个东西叫optimizer,他做什么样的事情,对他就做优化所有的所有的模型,你往下拆。

它就是这样的公式好,所以这个东西是什么,它做什么用啊,没关系,我来给大家讲一讲,所以现在我们要提一提这个概念,叫做损失函数,叫做loss function啊,有些同学第一次听到这个东西对吧。

这个东西非常的重要,呃,我先说明一下,你会在其他地方听到其他的一些称呼,说的和他是一个意思,你会听到一些什么样的称呼呢,对cost function代价函数你会听到objective啊。

客观度或者目标函数啊,他说的和LOFUNCTION实际上是一个意思,所以这个东西在中文当中,我们把它叫做损失函数,哎,等一等等一等损失损失函数是个什么东西,好像到目前为止。

你还没告诉我这个东西是什么东西对吧,损失函数是什么呢,刚才我说过了,我说你要做题,老师会叫你拿出一个小本本,来把自己做得不好的那些题目记下来,去分析一下自己为什么没做好,哪个方法没掌握好。

那你得知道哪些题做错了对吧,错的程度到什么程度,做的有多不好,哪些环节做的不好,偏差有多大,这个东西我需要一个数学定量的东西,给我指明一个方向,所以损失函数就是这样一个东西。

所有人都知道前面的假设函数长,这样,我给一组塞达就会有一个结果出来,问题是不同的,C大凭什么说他好,凭什么说它不好,你怎么去评估啊,你如果都评估不出来,这个东西你衡量不了的话,你凭什么让我去做优化。

去做学习,所以这个地方的损失函数就是一个衡量,你现在这一组参数下,你做这个事情和标准答案之间,差异的这样的一个函数,它就叫做loss function,叫做损失函数,举一个最简单的例子,在这个例子当中。

我们只有一个变量X我们输出的结果是Y,我们只有三个样本点,112233,我们要用一个Y等于WX,或者Y等于KX,这样的方式去拟合现在的三个样本点,当然了,有些同学会跟我说,老师我肉眼就看出来了。

Y等于X,OK好,我们先不管这个东西,因为现在这个例子非常的简单,所以你肉眼就看出来了,嗯很好很棒,但是当这个数据的维度高起来的时候,你肉眼是看不出来的,好没关系,我们需要找到一套通用的东西。

去衡量说我做的好与不好,首先可动的东西是什么,是K对吧,或者说Y等于C的X啊,那无所谓啊,就是这是不同的表达形式,那在这个情况下,我认为C打X啊,那大家去看一下这个地方可以调的是C的啊。

我我我先为了简单起见,我没有加B啊,我没有加后面那个偏置项,只是说这条直线一定是一条穿过原点的直线,你想一想它可以变的东西是什么,是不是你拿着这样的一条直线开始甩呀,他开始绕着原点在旋转呢。

诶我每每旋转到一个地方,我是不是有一个我预估的结果值,会有一个真实的结果值,我是不是这两个东西之间,可以求一个什么差值啊,我是不是可以求一个德尔塔差值出来,所以这是一个很直观的一个概念。

你需要有东西去告诉你说我选定了这一组C的,我做的到底怎么样,你必须要有一个数学定量的东西去衡量,这个东西,我才知道我下一步的优化方向在哪,所以很简单,你预估的结果,你对于每一个输入的样本,输入的X。

你的预估的结果是你C达X,你的真实的结果是什么,对是你的label,是你的标签,我把我预估的结果减去真实的结果啊,但它可能可正可负对吧,所以我给一个平方,OK给个平方以后,它衡量的就是差距。

把它们加在一起除以2M分之一啊,注意啊,前面的2M分之一,它M分之一是求一个平均,这个大家能理解吧,就是你有很多道题,老师说你这这份题做的好与不好,不能只看单道题对吧,所以我要看你平均做的好与不好。

你有100道题对吧,你100道题,你这100道题做的结果怎么样,我要把它加在一起,我要把它加在一起,OK我也把它加在一起,然后我把它加在一起以后,求一个平均的差异有多大,我应该除以总的题目的数量对吧。

那我问大家一下啊,因为有同学说这个地方是N,我问大家看大家一下是M还是N,是M还是N,我对这个地方的多少多少道题,多少个样本求了和N是什么,不要搞错了,这个地方的M和N先看清楚它们分别是什么。

我的样本数是M哥,你看到了I等于一到M,我是对我的M道题去求了我的差异,我是不是应该除以M分之一,为什么要给二好,有同学会说老师为什么要1/2啊,为什么要1/2啊,啊不要着急,这个东西没有意义。

它仅仅是为了我们待会去做数学优化的时候,求导的方便仅仅是这样的一个原因啊,所以比如说老师给你给班上的同学,去做一个打分,我给的分数是198,然后九十六九十四,这样的分数和我给的分数是五十四十九四十八。

这样的分数并不影响大家的序对吗,就是做得好的同学还是做得好,做得不好的同学还是做得不好,所以前面这个地方的1/2,是不影响我这个结果,它的取不同的C打的时候,它的大小顺序的对不对,这个东西是不影响的。

所以给我们带一个1/2,大家不用,大家不用太纠结这个问题,他没有关系啊,因为你在后面的处理当中,你会发现它为我的数学计算提供了一些便利,所以我把它整体除以二,我不影响我的顺序啊。

原本是一百九十八九十六啊,94P变成现在的50,那个49,四十八四十七,实际上没有关系,Ok,哎呀刚才那个东西啊,我写了一个函数对吧,我说OK这个地方是西格玛前面2M分之一,这个地方从I等于一到M好。

然后我后面呢是一个HC的啊,xi k减去这个地方的YI好,我给了一个啊平方好,大概是这样的一个公式好,是这样的一个公式好的,然后这个东西呢他在回归类的问题当中,另外一点是是这样的,首先我问大家一下。

这个这个公式当中未知数是什么,请告诉我现在这个JC大当中的未知数是什么,我的每一个样本送进来的样本X是知道的,Y是知道的,谁是未知数,谁是我现在哪个东,哪个变量是我现在不知道的未知数。

我要去调整的未知数好有很很好,很多同学告诉我是C的,是C的啊,因为X和Y都是知道的,seed是不知道对不对,好好很好,那所以大家现在抽象一下我做的事情是什么,来不要看到这个复杂的公式。

你看到的东西就是一个JC的好,这个东西首先告诉我它的它的它是用来干嘛的,它是用来干嘛的,它是不是用来评估,不是评估啊,用来衡量我做的好与不好的,就是衡量我和标准答案或者说F的好坏的。

它是用来衡量F的好坏的,好记住啊,这是第一个点好,第二个点是啊,不同的C打是不是会有不同的JC打值,不同的CA是不是有不同的偏离量,所以我现在想让我和标准答案之间的差异最小,我是不是要去找到一个C大。

使得我现在这个函数最小,是不是使得我现在这个函数最小,告诉我我是不是希望去找到一个塞达,使得我现在这个JC达最小,使得我现在我的预估值和标准答案之间的差异,越小越好好,所以抽象一下。

你发现它变成了一个问题,它变成了一个求函数最小值的问题,好这个有问题吗,大家有问题吗,它变成了一个这样的问题,叫做求函数最小值的问题,而你这里的变量是C的,唉但是大家想一想啊。

你想一想这个地方我Y等于C打X哎,我的C大可以动对吧,因为我们来看一看,当这个C打从很小,从从很小从零的地方开始往上走,再往上走的时候,大家告诉我,这个时候的JC打是什么样的一个变化呀。

是不是我在右边这幅图当中描述的变化呀,开始的CA等于零的时候,是不是在这标准答案在哪,在这它们之间是有差异的,对不对,它们之间是有差异的,对不对,随着我这条直线往上走,差异会怎么样。

对会先减小减到什么位置,对在这是一个特例啊,这是个特例,在这个特例当中,它会刚好穿过它,所以它会走到零,然后会再变大呃,告诉我从左边这幅图到右边这个函数,大家有问题吗,有同学有问题吗。

我要去求这个函数的最小值,我用一种最直观的方式,把这个函数的形状变化趋势给画出来了,我要求的东西在哪,我要求的东西在哪,我要求的东西在这,这是我想要的东西,这是我想去找到的那个点,当我找到他之后。

我就可以很自信地告诉你说,这个师兄师姐的方法用的很好,我在我的数据上有非常棒的效果,好有一个问题就是刚才这个是一个一元的情况,一元情况就只有一条轴嘛,啊多元的情况是什么样呢。

对多元的情况画出来是这个样子啊,对这个样子啊,啊大家听清楚了,我的最终的目标一定是希望去找到一个最小值,只不过在很多情况下,比如说大家在后面学到更复杂的函数啊,更复杂的更复杂的模型当中。

它的损失函数是一个非凸的,也就是说在那个情况下,它它是凹凸不平的,所以他很多时候你是找不到全局最低点,所以你找到的是一个一个这个局部最低点啊,或者叫做极值点啊,但是有可能在工业界可用就好了。

好这个问题不用纠结,总之回到刚才我们这个例子当中,我们就是这样的一个曲线,对不对,就是这样的一个曲线,对不对对,就是这样一个曲线好,那在二元的情况下是什么,对是这样的一个碗状的形状有问题吗。

我每取定一个函数值,它都会有一个有一个有一个取值嘛,这个取值注意啊,这个时候的取值不是原来的函数的预估取值啊,我再强调一遍,这个时候的函数取值是什么,这个时候的函数取值是什么,是差异啊。

请请盯盯着这个东西看啊,它不是我原来的Y等于K啊,这个C打X不是不是那个Y,他现在是一个用于衡量我每取第一组C的,我和标准答案之间差异的,这个函数叫做损失函数啊,它不是原来那个假设函数啊,它是损失函数。

好好相信大家没问题,然后对有同学问到这个问题,说老师老师老师这个我知道这个这个好简单的,那个数学老师告诉我们说求求最求极值,我好像求导让导数等于零就出来了对吧求导,然后导数等于零就出来了。

OK你说的东西没没有问题,就是你说的这个很棒啊,说明你的数学基础非常好啊,但是你要知道唉,通常数学家,这些学统计的数学家和做计算机的人同学,他们会有不同的解决问题的思路,数学家他会给你很多很复杂的公式。

他会告诉你说你这样算就可以了,但是它会有一些问题,举个例子来说,有一些场景下你的计算的计算量是很大的,大到你在工业界没有办法用,你没有办法很快速的去算出来,比如说哎数学家会告诉你说你求个逆就好了。

这矩阵求一个逆,然后你再再用力去和,和这个这个这个X去做一个矩阵的乘法,这个事情就解决了,问题是你求矩阵逆,那个事情是可能是一个计算量很可怕的事情,所以有些东西从数学上理论上来说很简单,求解起来。

但是当这个问题变复杂了之后,呃,他的求解和计算,他的那个数学公式求解起来可能是很复杂,所以呢在计算机的角度,我们我们更我们更倾向于用这样的方式去解决,这个方式叫做迭代法,所以我们再回顾一下。

刚才我给到大家的这个公式,这个公式当中告诉大家一件事情,说我们的优化是等于loss function加optimizing,所以我的优化是等于损失函数加上,使得这啊那个有点丑啊,大家那个忍一下。

损失函数加上啊,这个优化算法啊,就是损失函数对损失函数去最小化的,或者说去减小的这样的一些优化算法,所以损失函数我们已经定义了,它就长那样,所以优化算法有很多种,没错是有很多种啊。

我今天讲到这个方法是最最最最常见的方法,它并不是唯一解,你会在其他地方看到其他的一些优化算法,没错,这个事情没做好,所以我们在计算机的世界,我们更习惯用这样的一类方法,叫做迭代法去解决问题。

迭代法说的事情是不要着急,不要一不能没有办法一口吃成一个大胖子,所以怎么办呢,一步一步来,他问你,他问你说,你已经知道现在这个东西是一条抛物线,或者说他是一个这样的网状的结构了,你怎么去求这个最小值呢。

然后他想了一下,他告诉你说,我好像可以在这上面放一个玻璃弹珠,然后我让这个玻璃弹珠往下滚就可以了,他最后应该会停在最低点,如果它是一个网状结构的话,这个大家有问题吗,我把那个玻璃弹珠往上一放。

它是不是可以往下滚,滚到最低点,当它啊它可能有可能会小震荡一下啊,但最后是不是一定落在最低点对吧,所以这个时候我们来模拟一下那个过程,我要做的事情是放一个小球,我让这个小球顺着他往下滚。

我希望他最后停在这,所以这个地方会涉及到一个问题,就是K小球从哪放,第二个问题,小球怎么滚好,我们从数学上来,我们从数学上来解释一下他说的事情是什么,我们来翻译一下上面说的那句话。

第一你得给我一个初始的位置,小球放哪初始位置好,初始位置可以是任何一个位置,比如说在这个地方啊,那个啊抱歉啊,这个地方我纠正一下,这个不是X啊,这是C的啊,抱歉。

这是做PPT的时候的一点小的那个那个失误啊,就是这个地方应该匹配一下,所以横坐标是C打,我举例不同,C打社会有不同的FC打,然后刚才大家已经告诉我说,这个东西长成这样啊,长成这个形状啊。

刚才大家告诉我的好,那我我刚才告诉大家一件事情,我说诶那把它做的有趣一点,我来放个小球,让它往下滚吧,那这个小球里头会涉及到两个问题,第一球放哪,第二球怎么滚,球放在哪,没问题,你随便放。

因为这是个管嘛,你大概就放高一点,会放高低放低一点,所以没问题,我会让我的C大取一个C大start一个一个取值,这个可以是默认值,比如说取零,比如说取某一个值都可以啊,好然后接下来你要做的事情是。

我希望他往下滚,诶,有同学能告诉我,从数学上来说,这条曲线变化最快的方向是什么方向吗,高中数学就告诉你了,这个地方抛物线变化最快的方向在哪,是它的斜率的方向对吗啊,当然这是单元这一元的情况啊。

多元的情况我们把它叫做叫做gradient,梯度对吧,叫梯度好,所以呢他告诉我说这个东西是切线的方向,是切线的方向对吗,所以好,我来把刚才说的这句话翻译一下,这句话翻译一下,是这样的。

请帮我找到一个方向,在我起始位置开始,请帮我找到一个方向,我会顺着这个方向往下滚一段,然后我再顺着这个方向再往下走,所以他每一次都是这样的迭代,它犹如一个下山的过程,当你蒙住你的眼睛,让你下山。

你可能会用脚去试探一下周边的地形,找到那个往下走最陡的方向,去往前迈一步,往前找到往下最陡的方向,往前迈一步,而这个所谓最陡的方向就是斜率,或者是啊在高原的寒情况下,它的梯度,所以我每次去迈一步。

所以大家能理解吗,当我在这个位置,在我在这个位置的时候,在这个位置的时候,当我在这个位置的时候,当我在这个位置的时候,我往下滚,我是不是去找到一个方向,大家告诉我这个地方的JC打对C打一球偏导。

大家看这个地方的函数对C的去求偏导,他拿到的方向是什么,就是这个值是一个正值还是负值,大家告诉我这个小球,现在球的斜率是正的还是负的,直观理解一下它是负的对吧,我应该往正的方向走还是往负的方向走。

我应该往正的方向走还是负的方向走,我应该往正方向走对吗,所以记住一件事情,就是梯度,或者说啊梯度,或者说他的这个它的gradient啊,现在这个gradient或者是斜率,这个时候是让他变小。

让让他这个变大的方向啊,就梯度是变大的方向啊,所以这个时候呢你的负梯度才是往下走的方向,才是才是你真正的让这个函数减小的方向,所以我翻译一下这句话,就是这样的,我原本有一个C的位置。

我希望他朝着我现在的,这个最大的负梯度的方向走,所以负梯度的方向我希望朝着这个方向走,我是不是要加上阿尔法贝的这样一个东西啊,那加上阿尔法贝的一个这样的东西,是不是就是这样的一个公式啊。

我朝着负梯度的方向去迈进一步,然后我下山的过程走到了一个地方,我再环顾一下四周,我再基于我现在判断最陡的方向再去迈下一步,没错这个就是最简单的一种优化方法,叫做gradient descent。

梯度下降叫梯度下降,你们千万不要小看这个方法哦,这个方法在神经网络当中,有一个和它对应的方法叫做随机梯度下降啊,就是唯一的区别在于随机梯度下降,没有用全部的样本去求梯度啊,他用的是一部分部分的梯度。

但是那个算法在神经网络当中非常好用啊,大家很多同学都会用那个方法去做优化,他做的事情就是我去找到那个下山的方向,我朝着方向一步步走,呃虽然数学家告诉我说,我只需要求导等于零。

我只需要去求这个矩阵的逆就可以了,但是我发现这个事情并不好求,所以OK啊,有同学问到说为什么是负梯度的方向,我刚才已经解释过了,你看一看这幅图当中梯度是朝朝左还是朝右的,梯度是大于零还是小于零的好吧。

梯度是大于零还是小于零好,所以从刚才那个是一元的情况,如果是二元的情况呢,现在有一个碗,现在有一个碗,你在上面放了个球,它会怎么滚,对在碗这样的一个形状当中,如果我找一个横截面,我往上一层一层的去截。

我拿到的是什么,是等高线对吗,是是不是等高线,大家对这个图没有问题吧,我拿着一个水平的平面去做截取,我拿到的是不是这样的,一个一层一层的等高线呢,我最底下的这个地方是碗底,它是最低的。

我希望去找到他对吗,所以这个地方大家看到的这个箭头是什么,对就是那个球滚的方向,我是垂直于等高线的方向,垂直于等高线的方向往里走的,这个是我认为比较快的方向诶,你也可以朝其他方向走啊,你当然可以这么走。

这么走这么走绕回去对吧,但这个很慢,所以最快的方向就是刚才说的啊,gradient啊,就是所谓的这个法线的方向,在二元的情况里头,就是大家看到这个情况,OK嗯好的好啊,有同学说这个不是等高线。

这个不是等高线吗,每一圈它是不是处在一个高度,这里面的每一圈是不是处在一个高度,你就把它当做等高线就好了,二元的情况和一元的情况实际上一样,仅仅的区别在于你有两个方向,你有两个方向。

有问题一会儿我们再课间的时候再说好吧,所以这个地方,这个地方大家看到的这个一环一环的,实际上每一环它的高度是一样的,在现在这个这个曲面上啊,就是取经不同的C大C大于零和C打一,实际上它的取值是一样的啊。

就是这一圈实际上是一样的,然后大家现在看到的这个地方的梯度下降,在多元的情况下,仅区别仅仅在于你有很多个未知数,你需要对这些未知数都同样,用这个地方的gradient design去做一个迭代啊。

这个函数求导大家会吗,X平方求导你会吗啊sorry,不是立方平方,X的平方求导,你会吗,好你是会的啊,好没问题,所以你知道你会把二拿下来啊,所以这个地方2M分之一,你会知道它会变成M分之一对吧。

好好很好啊,然后啊还要还大,大家知道这是一个复合函数对吧,就是C大X减去Y1的平方,这是一个是一个复合函数,所以它最后呢呃对C打求导,还要乘以一个部分对吧,好没问题啊,这是个复合函数。

所以它求导的话两部分先对啊,外层求,然后再对里边的这个小的这个函数去求导好,所以这个大家都没问题啊,然后所以这就是那个梯度下降啊,刚才大家注意到这里头有个东西叫做阿尔法,刚才大家注意到这里头东西。

有个有个东西叫做阿尔法,刚才大家注意到这个地方会有一个阿尔法,那阿尔法这个东西呢,它就是所谓的学习率叫做learning rate,大家想一下这个阿尔法会有什么样的影响,先别管它。

别纠结这个东西怎么去求我问大家一下,阿尔法如果太大会怎么样,阿尔法太大会怎么样啊,不好意思啊,这个地方都有修正C的GC的好,如果步子迈太大会怎么样,步子迈太大会怎么样,会直接跳过最低点,甚至足够大。

它是不是会往上走,告诉我啊,如果你给的这个阿尔法非常大,你给个100万,它会跳到这个位置,他下次可能会跳到这个位置,可能会跳到这个位置,他不收,他不收敛,他可能不收敛,那一般情况下你取得大的话。

他有可能越过最低点,那我再问大家一个问题,哎那个如果如果它小呢,如果取得特别小呢,哎你告诉我说老师我取的小,这个总稳妥了吧,我取0。000001诶,好没问题,对。

这个时候他的时间会非效时间消耗会非常的多,它的速度会非常非常的慢,速度会非常非常的慢,好没问题,所以怎么去求这个阿尔法呢,对这个东西叫做超参数啊,所谓的超参数是指的在这个模型开始学习之前。

请帮我把它敲定,请帮我把这个值敲定,我需要用它去完成迭代,所以这个地方呢对它有一系列的方法,可以去完成梯度下降啊,但大家注意一点啊,就是一般情况下我们为了简单,你可以敲定一个恒定不变的。

恒定不变的这样的一个阿尔法啊,他也确实有一些其他的方法,但是呃我们在我们在工业界当中,有一个说法叫做NO free lunch,叫做NO free lunch,这个意思是告诉你说啊。

这个世界没有那么美好的事情,你告诉我说老师我有个非常牛逼的算法,它可以自动去学习这个地方的阿尔法,取什么样的步长是最最合适的,没错可能会有这样的算法,但你知道他一定付出了其他的代价。

比如说他需要先去扫描和计算一遍,这个地方的阿尔法,这个东西也同样是需要费时间的,所以啊千万不要去想想象,有任何一个东西比另外一个东西一定是要好的,经常有同学会问我说,老师老师老师哪个模型最好啊。

哪个模型最好,这个问题我回答不了没,有没有所谓的最好的模型,你想你就想一件事情吧,如果这个世界上有最好的模型,我干嘛要其他的模型啊,我就不用去学这些其他的模型了,我直接学那个最好的模型就好了。

我编一本书,我不需要去想其他的模型了对吧,所以所以没有这种事情啊,大家不要去问这样很傻的问题,说哪个模型最好,哪种方法最好,没没有这个事情的好,所以呃你知道这个地方用的方法叫做梯度下降。

你知道学习率会有什么样的影响,好OK这个点就够了,然后这个地方的阿尔法怎么取对,它是一个超参数,针对超参数它的优化的方法,我们在后面会讲到呃,实际上它是一些实验的方法,就是你需要去选取不同的这个阿尔法。

比如说呃取这个0。000呃,一啊,0。001啊,0。01啊,一等等,他会去做一些实验,他会去做一些实验,这样好吧,然后那个这个在后面会给大家讲到,我今天在这不给大家细讲啊,好了,下面我们要讲到。

非常非常非常非常非常重要的一个概念,叫做叫做OVERFITTING和under fitting to the model,没model的状态,模型的状态哦,这个东西非常重要哦,你我我告诉大家。

你你你以为参加比赛的时候,你以为工业界做实际项目的时候,参加比赛的时候,这些前面的选手在撕什么样的东西,他他在所有东西就是就是这个东西,谁能让现在的模型学习到的方法更通用一点点。

就是他的他的表达更通用一些,这个是大家在努力学习的东西,所以你去参加比赛,你会看到很多很高高逼格的东西对吧,我去年参加了一个开go比赛,然后最后最后呃排名在在第二,然后第一。

然后然后我当时用了大概八个模型去做融合,然后第一名告诉我说,后来我们和我们和第一名交流一下,让第一名告诉我说,他们用了啊160多个模型,然后我们就说OKOK那个啊就是输了输了没错,那个160多个模型。

他们去利用了模型的差异化去,当然我们成绩和他们差的非常小,就是前面几名的成绩其实差的幅度很小,而他会它的单个模型做的承承,做的效果是没有我们好,但是他用了很多模型做集成的时候。

能够把把学偏的那部分拉回来一点,所以最后的表现总体的表现会好那么一点点啊,OK好,所以你记住一件事情,就是我们在我们所谓的模型的好坏,其实说到底就是这样一个比,去比谁的模型泛化能力更好一点。

谁的模型学到的这个模式,学到了这个映射关系会更通用一点,所以这个地方就会涉及到这个概念,叫做fitting和OVERFITTING呃,under fitting和all fitting是这样的。

这个地方有个很简单的例子,这个例子是这样的,你现在决定了要用多项式回归,多项式回归去解决一个问题,然后这个问题呢是一个啊多项式回归嘛,完成一个连续值的预估嘛,然后标了一些样本点。

然后咔咔咔的上甩了一堆样本点了,大概长成这样,然后呢这里头有个很纠结的问题,就说嗯你要知道啊,这个数据如果能画出来,好简单的画出来谁如果可以画在这幅图上,你告诉我说老师老师这个我一眼就看出来了。

我应该用一个类似于二次函数这样的方式方,式去去做做预估嘛,对吧,但是问题是实际工业界的数据维度高得很,你画不出来的,OK你画不出来的,所以在这个地方有个很纠结的问题,就是多项式模型。

我我的那个次数选多少比较好啊,我我可以选一次,我选二次,我可以选这个3456789十次,所以这是个很纠结的问题啊,那你想一下,如果是一次的话,大家告诉我这是什么,这是一条直线,这是一条直线,这个是什么。

对,这是一个抛物线,啊这是什么,是一个高次曲线,呃大家先不用纠结纠结,那个模型集成的那个那个事情啊,我们在后面会给大家讲到,然后另外我需要给大家说明的就是,还是NO free lunch。

这个天下没有那么美好,没有那么好的事情,这个是什么意思呢啊亲爱的同学们,如果现在有一套模板,或者现有现有的这个工具,可以帮助你自行的去找到最优的解啊,你们就不用学这个课了,你们就下岗了,工业界也不需要。

你们也不要招这么多的算法工程师了,为什么我直接阿里云或者腾讯云,或者各种云平台,只要一集成,把这套模板这套套路往上一套,你来数据,你往里头怼呗,我直接就能拿到模型了对吧,所以不要也不用去问说。

有没有一些现成的框架或者软件,可以解决这个问题没有,如果有的话,你们就失业了嗯,所以所以啊大家往后学就好了,对呃谷谷歌的做法只在部分,我知道谷歌在做这个事情,谷歌和微软做的那个东西。

只对一些多媒体数据是有用的,呃我自己在工业界做这个事情,我们的场景他们搞不定,你一定要手动的对数据去做一些分析,他们理解不了场景,你所谓的人工智能没有那么智能,他做不到,你甩给他一个题。

他就能解决这个问题,它在一些特定的场景底下有用,比如说图像识别,就是这很特殊,因为图像这个东西人不太好去做分析,它本身就是raw data,原始数据,他绝对做不到通用的人工智能,不然的话大家就下岗了好。

所以这个地方呢有一个很纠结的问题,是说我到底取直线还是抛物线,还是高次曲线才能拟合得更好呢,其实我也不知道,但是大家想一想,如果你取直线的话,会有一个问题,哎我问大家一个问题啊,如果你取直线的话。

这个直线当然他会努力的去学了对吧,就是你你刚才那个优化算法,其实梯度下降做的事情,就是在调整这条直线的斜率,和它的它的这个截距嘛,所以这条直线他就拼命的学,他不断的去去做旋转,不断的去上下平移。

但是我问大家一下,他能他能学好这些点吗,它能拟合好现在的这些点吗,它拟合不好对吧,所以这个状态叫做欠拟合,就是这个模型的学习能力很差,学习能力有点差,所以以至于说他没有办法去拟合好,所有的样本点。

它它刚对其中的一些样本点拟合的好一点,他对另外一些样本点就偏了,所以他很挣扎的在学这个东西,但是学不好抛物线呢,抛物线它可能不会穿过每个点,但是它离这些点都挺近的吧,可能是这样的一个形态。

OK啊高次曲线呢哦高次曲线太牛逼了,你想一想他有这么多的项,而且还有平方立方四次四次方向,大家告诉我一个数的平方立方四次四次方,如果它是一个大于一的数,它是不是他是不是这个空间会非常大呀对吧。

平方向嘛他可以直接甩得很高,它的立方向可以甩得很高,四次方向可以甩得很高,所以这个时候呢,你有你有非常充足的空间去把这条曲线拉下来,或者是丢上来,所以它可以有很很很很诡异的方式啊,很很扭曲的方式。

就穿过每个样本点,很开心对吧,大家他特别开心,他说我每个点都传过了,哇这个事情太棒了,但有个问题就是最左边这种状态显然是不OK的,这种状态对应了什么呢,对隔壁家的傻儿子啊,所以这个很尴尬了啊。

所以你让他去学习呢,他其实很努力啊,他他不是不努力,他真的很努力在学,但是他可能他的这个记忆力,或者是这些能力就很有限,所以你要让他去同时学九门课,或者多少门课的时候,他就,有点吃力啊,就怎么都学不好。

我拼命的在学,我拼命的在调这条直线的这个斜率,和它的截距根就学不好,那那那这个东西是什么呢,这个东西是什么呢,对这个东西是反的啊,你另外一个邻居家有一个天才儿子,然后呢问题是呢大家没好好教他。

所以什么意思呢,就给了他十道题,说你来来把这十道题做一下,一般的小朋友做十道题,要一个要可能要要40多分钟一个小时啊,然后这个同学太牛逼了,就是这十道题呢可能呃5分钟就搞定了。

但是他问题是他做这个题的方式,他学这些题的方式呢,并不是去好好的把底层的规律和模式学下来,而是直接把它背下来,因为他记忆力好啊对吧,他很聪明啊,对你而言很难的东西对我而言很简单啊,我直接背下来呀。

我不用看题目啊,我去看一下这里的关键词是什么选项,选什么好,背下来了,然后明天你给我出一模一样的题,好,咔咔咔,写完了100分,明天我换一道别的题目好,不认识,没有见过。

所以这个地方的左边这个状态就叫做欠拟合,欠拟合,通常情况下是因为model的学习能力不够引起的,就是你有一个很复杂的场景,你用了一个非常弱的模型去学它啊,当然这个情况在工业界不太可能。

就是你现在看到的工业界,大家不会用特别弱的模型,不太可能大家上的都会是相对比较复杂的模型,所以更有可能会出现右边这个地方,就是你那个模型的学习能力太强了,问大家一个问题啊,你去解一个方程组。

这个方程组有三个未知数,只有两个方程,你告诉我有多少组,几三个未知数,两个方程,就是啊你给他太大的空间了,你给他太大的空间了,你三个未知数得有三个方程啊,一般情况下啊,而且这三个方程还没。

不得不不能有两个方程之间,是一个线性相关的啊,就是在这样的情况下,在这样的情况下,他才有可能拿到的是唯一一组解,但是有如果你给他的空间太大了,你这个模型的能力太强了,你给他太多的参数哎。

拜托他的学习能力太强了,你这几个小小样本对他而言简直就是小case,我我随便找一组解过来,但是啊我我随口举个例子啊,我知道有很多同学这个对线性代数比我要熟啊,所以你说的这些不能其次啊。

等等这样的一些要求对啊,先抛开这个不说,我们就说那个那个呃,就是我大家明白我刚才说的这个意思啊,就是当我有三个或者四个,或者这个五个未知数的时候,我只给两个方程的时候,这个事情太好办了。

我随随便便找一组数,我就我就完成拟合了对吧,所以这个东西对应到的是过拟合,过拟合通常情况下是因为你的model capacity,是因为你的模型的容量太大了,然后你没控制好。

他是因为你那个呃天才儿子太聪明了啊,可惜呢你没有好好教他,你没有跟他说,你不能这样做,你得好好的去看题目底层的原理啊,不许背题目啊,啊那个什么什么不用,不要着急的去看小猪佩奇,OK啊等等不啦不啦。

咱就说一堆这样的,这个这个这个一会儿我们会有方法去限制它好,所以这个地方的过拟合和欠拟合,大家有一点基本的印象了,有一点点基本的印象了,所以过拟合和欠拟合里面更可怕的是。

后面这个过拟合是这个over fitting啊,这个事情更可怕,然后你看到的参加比赛,你没有别人效果好,或者说前面几名之间有差异,最根本的原因在于大家过拟合的程度不一样,就是你你学的这个程度不一样啊。

然后这个地方呢,我给大家做了一点小小的解释啊,大家都希望自己更聪明,都希望去用神经网络对吧,他说啊老师这个模型超级牛逼的那个啊,好复杂的,逼格非常高的对,但你不一定能用得好,就是更复杂的模型。

更多的参数意味着它有非常非常强的能力,但也有可能你约束不住他,他可以用很很随机的方式,就可以解决你这个问题,但是他没有任何的意义,第二点是你要知道你的这些数据,它并不一定每一个数据都是和全局分布一致的。

这样的数据它有可能是一噪声点,才有可能是噪声点,但是你的模型如果学习能力太强了啊,他是有可能会把这种东西背下来的,好好,所以这个地方我们要提到一个很重要,很重要的概念。

叫做regular arization,正则化,正则化是一个什么样的东西呢,正则化就是你你隔壁家的那个天才儿子,他爸爸妈妈已经意识到了,说不能这样教了,所以呢要约束约束他啊,所以要要给他去加一些限制。

刚才大家的损失函数长成这个样子,刚才大家的损失函数长成这个样子,然后你只告诉他说,今天我给你这些题,我只看标准答案,我只看你做的标准答案,他标准答案都对了,就给100分,OK好。

然后那个那个天才儿子呢就啊好牛逼的啊,反正记答案啊就开始抖抖抖抖抖抖抖抖啊,每个点都穿过了啊,所以就有问题了对吧,这个鬼东西呢它就抖动非常大,意味着它非常的不平稳,非常不平稳,意味着新的样本过来的时候。

卡可能就挂掉了,所以怎么去限制它呢,你盯着这个东西仔细的看了一下,你说好像是因为C大X当中的C大啊,这个地方的XX可能是你做完变换的那些,X平方,X立方X4次方啊,就是这个地方是因为这个地方的C达。

你给他太大的自由的空间了,因为你想一下啊,如果你刚才拟合的这个值太小了,那怎么办,对给后面一项给高一点的C大呀,把他拉起来呀,所以他就拉起来了,如果这个东西太高了,怎么办,以后面一个C打一个负的值啊。

把他拉下来呀,他就拉下来了,所以最根本的原因在于你仔细想一想,在于你这个地方不对C达做任何的限制,它可以通过别的方式去把刚才你和不好的结果,强行的拉下来,或者是拉上去,让这个曲线甩起来对吧。

这是当然这是一个很口语化的说法,大家能理解我的意思就OK了啊,就是把这个东西甩起来了,所以很可怕对吧,这个事情就很可怕了,所以你抖一抖,你感觉很开心啊,你现在样本点你好开心啊,全穿过了,分析这东西没用。

OK怎么限制他呢,今天呢老师检查作业啊,你父母检查作业说答案没用,答案没有用,帮我把过程写好好吗,所以限制一下它,那这个地方呢我不仅要求看标准答案,去计算这个地方的JC达,我还要求去看你C达的幅度。

如果你是用这种很随意的甩动的,这样的方式很,也就是说很大的seed的什么绝对值啊,这样的形式去完成拟合的话,不好意思,不可以,我要给你在尾巴上加一项东西,我评估你做的好与不好。

不仅看你和标准答案之间的差异,我还看你这个地方这一项,这一项就是刚才C大的幅度吗,能理解吗,没有问题吧,啊这个叫做L2胜则换啊,就是它的幅度嘛对吧,所以这个地方的拉姆达是什么,对拉姆达是一个超参数啊。

用来控制说我给他加多大的,我给他加多大程度的,我给他加多大程度的惩罚,Ok,啊对那个有有同学有同学提到了一个问题啊,说这个地方那个C达不应该用2M分之一,需求平均啊,啊这个其实它和你的C大取值有关系嘛。

对吧,你可以你把C你就是其实它是C打,是需要调的啊,所以如果如果你把它放在这个中括号以内的话,对加在中括号以内的话,你就需要去调C的啊,他也可以加在这个位置,对就是这个同学说的说的没有问题啊。

因为有同学提到了这个,说那个C达不应该被M平均,对你可以把中括号放在这个位置没错,然后有同学问到说拉姆达怎么去求对,拉姆达是一个超参数,这个乘法项的程度,就是说你天才的这个这个小朋友。

家长的管太多也不好对吧,人家是有创造力的,天天打就打傻了对吧,不能打太厉害啊,但也不能不管啊,不管就天天就玩手机了啊,就天天这个去吃鸡了好,所以这也这也是不好的,所以得管一管,但是又不能管太过了。

所以这个拉姆达呢就是一个约束项啊,大家得调一调,但这个拉姆达的取值怎么取呢,对它是一个超参数,然后这个超参数呢,就是呃大家要通过一些实验的方法去取啊,就这个没有办法,你就算不出来。

因为这个东西一旦能这种超参数,如果能算出来,哎还是刚才那句话,大家就失业了啊,啊对他有一些方式可以去做出来啊,但是它没有数学的公式,可以直接去求解到最大的最好合适的拉姆达,它和你的数据分布有关系。

它和你的数据是有关系的,所以你可以通过一些方法方式去做,但是这个方式它不是全自动的,或者说不是一个数学公式,往里头一套就能取到的,对啊是的,所以这是一个正则画像好,然后这个地方的损失函数没错。

叫做L2loss啊,叫做l two los l2的一个损失啊,好大家在后面会见到其他形式的损失,嗯嗯那个这样大家呢我们休息几分钟好吧,大家可以去上个洗手间,或者是这个喝口水啊,然后一会儿我们一鼓作气。

把后面给这个算法去给大家讲一下,你会发现你会发现这个,你会发现这个地方呢啊,后面这个算法和前面那个算法呢,他从刚才我拆解的公式上来说是很一致的啊,有同学问了一个问题,我再回答一个问题吧。

那个这个同学问到问题说,为何过拟合会加大variance,哎刚才我说了过拟合是什么现象啊,我我我用一个直观的方式给你解释一下,过拟合什么现象,过拟合是甩起来了,所以你甩上甩下它的波动不会变大吗。

这个模型不稳定啊,所以就像这样的抛物线是很稳定的,像这样的曲线是非常不稳定的,你可以去做一些事情,你可以把C塔压下来,不让它甩那么高,它会相对平滑一点啊,所以它的variance会会降。

OK他的variance会会降它的方差,而它的这个波动性会会往下降啊,就是限制最大的幅度,OK大概这个意思啊,然后那个呃如果要从数学的角度上来来说的话,你可以去查一下,会会有一些证明去告诉你说过。

你和他为什么是这样的一个方式嗯,好吧,那我再解释一个问题吧,为什么误差项求和范围到M,因为我有M个样本,为什么乘法项加到N,我只有N个C打,我只有N个seed,OK说明白了吗。

所以注意一下他们的计算的时候是不太一样的,OK好的啊,切几分钟啊,23分钟,然后一会儿我们回来给大家一鼓作气,把后面的算法讲了,好的我们回来,然后我来给大家解释一下几个问题啊。

有同学说前面的C打是从零开始的,这个地方C打应该从零开始了呃,这是一个习惯,一般情况下我们加正则画像,我们不会对C打零去做,我们不会对C打零去做乘法,我们不会对偏置项去做乘法呃,因为你想一下C打零。

它是不会X做乘积的,后面的C打一,C打二,这些东西他会和后面的具体的X去做乘法,但是这个东西无所谓啊,你把C打零加上来也也无所谓,他也没有关系,它它也可以啊,这个model一样可以run起来。

只是一个习惯而已啊,就是我们习惯不对这个偏执,向这个C点零去做乘法,呃其他的问题我再说,我们先往后走,这个地方我们要讲到一个很牛逼的算法,叫做logistic regression。

老just regression源于这样的一个问题,说今天我要去做一个事情,我希望去对我现在的这样的样本,去做一个分类啊,注意啊,我现在来到场景不是不是那个填空题了,是选择题啊,做分类做分类啊。

然后在做做这个分类的问题当中,当然你赶紧有两倍两类样本点了,所以这个地方有个场景,这个场景的横坐标横坐标是呃,tumor size是这个肿瘤的这个大小,然后纵坐标呢是它是是否是一个恶性肿瘤。

那大家可以看到这个地方有四个样本,是很不幸啊,这四位同学呢是恶性肿瘤,左边这个地方呢啊,这四位同学是诶那个良性肿瘤没有关系啊,很健康好,所以你要解决的问题就是,我希望把这两类东西区分开,好了好了。

然后有同学说,老师老师这个我知道刚才刚学了线性回归,刚才刚学了线性回归,嗯那个如果大家对前面我讲到的部分,有疑问的同学,你可以在回头录播课出来了之后,再仔细听一下我的描述方式啊,我没有说C打越小越好。

我后面那个乘法项,仅仅是为了控制住C打的幅度,嗯然后我刚才已经说过,C大大的话,这个模型它的偏,它的方差会很大,它会甩起来嗯,好所以所以那个呃可以去听下我的描述啊,我我的原话不是说这个东西越小越好。

所以这个地方呢,当我解决这样一个问题的时候啊,有同学说老师老师刚讲过线性回归这个,这个好开心的对吧,找条直线咔拟合一下啊,这有一堆的X和Y吗,有一堆的X和Y嘛,然后我就拟合一下好,这个事情就搞定了。

那我说哎只要现在Y取0。5,然后我去取到这样一个X的阈值,只要在这个阈值的左侧的XK全都是好的,右侧的一直OK很不幸啊,现在大家要去处理一下哎但是呢这个方法,并不是那么完善的一个方法,为什么呢。

当你现在如果有两个异常值进来,三个异常值啊,如果你来了两个这个这个很严重的这个同学啊,就是他的这个肿瘤大小非常大,然后他显然是恶性肿瘤,在这种情形下,你再去做线性回归,你会发现一个问题。

这条直线被拉偏了,这个很好理解吧,因为他要兼顾到所有的样本嘛,他要兼顾到所有样本,所以他被拉偏了,拉偏之后呢,你如果你取0。5做阈值,哎,这俩东西就分错了吗,就分错了吗,对不对,所以这俩东西就分错了好。

所以呃所以这告诉我们一件事情,说你思考一下线性回归,我应该可以拿到负无穷到正无穷之间的一个啊,一个值,对吧啊,负无穷到正无穷之间的值诶,但是这个东西呢你不太好去取那个那个阈值吧。

就是刚才那个阈值你不太好去取定这个阈值吧,因为你取了一个阈值以后,如果我回头那个来个新的样本,我把这条直线拉偏一点,我输出结果好像你这个阈值就不适用了,对吧对,所以他的健壮性不太够,他对噪声非常敏感。

好这个地方有一个很神奇的函数,数学上的函数叫SIGMOID函数啊,这个函数这个函数神奇到什么程度呢,就是哎我去什么情况,啊SIGMOIDSIGMOID这个函数长什么样呢。

对他就是GZ等于一加上E的负X次方分之一,哎这是一个,这是一个数学特性很好的一个函数啊,就是数学家找到了一个函数,这个函数有什么用呢,对它可以把负无穷到正无穷之间的一个数,压缩到0~1之间啊。

你想一下嘛,当Z很小很小的时候,你想想Z取负的100万的时候,大家告诉我Z取负的100万,E的负Z次方就是E的100万,1+1=1000000分之一,它是不是一个非常非常接近零的一个值。

它是不是一个非常非常接近零的值,如果我的Z取100万很大很大,你带进去E的负X次方是一个很小很小的值,所以这个时候它是一个非常非常接近一,的一个值,所以他们把一个负无穷到正无穷之间的值。

压缩到0~1之间,这个大概没问题吧,就是这个函数,然后这个函数呢还有一个很很好的一个优点,就是你你发现你把零这个点带进去啊,你把零这个点带进去,你发现你把零带进去,一加上E的零次方分之一。

大家告诉我是多少,一加上E的零次方分之一,这是多少,它等于1/2,所以我们通常大家说一件事情会说,我有半数的概率,我能做成这件事情,我有半数的概率他会怎么样,我觉得有0。5的概率他会怎么样。

我觉得我有超过0。5的概率,他会怎么样,OK好,然后这个函数还有一个很有意思的事情,就是哎我不知道大家认不认识这个函数,我问大家一下,你们知道啊,这这这个是那个面试题啊,是校招的面试题。

就是GZ这个函数啊,啊你知道它导数是多少吗,G撇Z你知道它导函数是什么吗,好所以现在拿出笔来算的同学,不好意思,这个函数你都不熟,GZ这个函数的导函数,就等于GZ自己乘以一减,GZ不是本身啊。

GZ乘以一减GZ啊,EE的X次方才是啊本身啊,没错没错,GZGZ乘以一减GZ啊,没错,所以所以这个是很好的一个数学特性,这意味着说如果我要对这个东西求导,我可以一步写出来对吧。

就是说我我如果知道GZ等于多少,那这个地方G撇Z等于多少,我是可以直接套这个公式一步求出来的啊,所以它的数学特性非常好,它是一个中心对称的一条曲线,在0。5这个在一零这个位置的输入,取到0。

5这样一个值,然后对这个点是一个中心对称的,在啊很小很小的时候,它取到的值是接近零的,很大很大的时候取到的值是接近一的啊,这样好先先记一下有这么一个函数,好的呃,然后你要知道所有的分类问题。

所有的分类问题,本质上是在空间当中去找到一个decision boundary,找到一个决策边界,在空间当中去找到一个决策边界,去完成这个地方的,去完成这个地方的决策,决策边界去完成这个地方的决策。

所以这个地方两个样本点,红色样本点和绿色样本点,我可以找到一条这样的线完成决策,我这个地方有红色样本点和绿色样本点,我可以找到一个这样的曲线完成啊,区分这个地方有红色样本点和绿色样本点。

我可以找到一条很扭曲的线去完成区,分,好往下走,看到一个例子,这是一个很经典的例子,这个例子告诉我们说如何由线性回归,哎呀这个比呀,这个得到的这个拟合的哎呀,我要换一个手写板了啊。

拟合拟合的这个直线或者曲线,去把它变成这个东西,变成一条决策边界,好我们来看一下这个事情怎么做的,这两个样本点啊,这两个样本点呢啊一个是这样的啊,小圈圈,一个是这样的小叉叉。

我要去找到一个模型去把它分开好,所以其实我就要找到一条决策边界,叫decision boundary呃,先不管这个东西怎么来的,就是我们记住这个公式,我们需要的东西是这个。

这个这个叫做这个表达表示或者是假设函数啊,假设函数再加上优化好,我假定它的假设函数是这样的啊,我再给一个值我的C大零取多少,C大零取啊,去去去去去这个地方的啊,这个这个这个三好,然后C打一呢去取122。

OK然后C答案呢去去去这个这个这个一好啊,大家告诉我这里面的这个形式是什么,就是三加X1加X2等于零,这是什么呀,就这个东西是什么,从数学上来说它是什么,它是一条直线吧,就是你把零三和三零带进去啊。

他发现这个东西都等于零,对不对,然后两点决定一条直线,对不对,所以你就把它连起来,它就长成这样,好很好,哎呀对它就长成这个样子好啊,O那个再问大家一点小小的数学知识,在这条直线上方的上方的点。

带到这条直线里头取值是多少,直线上方的点,你的X1取100,你的X2取啊,那个200带进去,它是一个什么样的值,对他是个大于零的值对吧,你随便带一个直径不就知道了吗,所以在直线上方的时候,对它是A对啊。

大于零的直线下方呢,直线下方呢,直线下方呢对直线下方是小一点,你随便带个值进去,你试试看,你带一个-100,带个-200好诶,这有什么用呢,哎大家还记得刚才的SIGMID函数长什么样吗。

哎大家还记得西格玛的函数长什么样吗,我把一个大于零的值带进去,和一个小于零的值带进去,最终的结果会怎么样啊,就是我把一个大于零的值带进去,和把一个小于零的值带进去,我最终的结果会怎么样啊,分别怎么样。

我把一个大于零的值带进去,它是大于1/2的嘛,我把一个小于零的值带进去,它是小于1/2的嘛,对不对,你看你把一个大于零的值带进去,是不是大于0。5啊,你把一个小于零的值带进去,是不是一个小于0。

5的值啊,所以他告诉我们说我把这一堆的点带进去以后,我去求一个这样的函数,把一个线性回归的结果丢到一个sigma当中,我是不是能拿到一个概率P,大于0。5的一个结果,哎我把下面这个东西丢进去。

我是不是拿到概率P小于0。5的一个结果呀,哎所以这个东西有什么用呢,它实际上是告诉你说告诉你哦,在直线上方的这些点它是小叉叉的,概率是大于0。5的,它是小叉叉的概率是大于0。5的。

而下方的这些样本点是小叉叉的,概率是小于0。5的,而你就可以基于0。5去给一个判定的边界,完成这一次的分类,所以我希望给大家说清楚了,我们再跳到下一个场景,有同学说老师老师你刚才那个东西太简单了。

谁告诉你说我搞一条直线就可以区分开呀,你太弱了吧,好是太弱了,那就换一个听好了啊,这个显示好了,样本点呢对你刚才说直线好简单的,我就不用直线了,因为这个情况下我有一堆的小圈圈,我有一堆的小叉叉。

你发现了,你搞一条直线来啊,你拼命的选那条直线,你调整它的斜率,你调整它的截距诶,分不开对,分不开啊,你被包围了啊,就准备投降吧,好所以这个时候怎么办呢,唉我们来做一点小小的处理啊,非线性的处理。

我让这个地方的C打零取什么呢,取啊一这个地方C打一取什么呢,取0C打二取什么呢,取0C大三取什么呢,取1C到四取什么,取一好问大家一个问题,X1的平方加X2平方减一等于零,这是一个什么。

这是一个什么形状,哎你先别管现在怎么来的,一会再说,那是那是下一个环节,假设函数之后的东西好,有同学告诉我说,老师老师这东西好简单,它就是这样的一个圆,它就是这样的一个圆,哎呀我再问大家一个问题啊。

我把圆外的点,我把圆外的点带进去,带到这个函数里头,带到现在这个表达式里头,这个结果会怎么样啊,对我把这个地方带一个100进去,我把这个地方带一个200进去,这个结果会怎么样啊,哎很好,同学告诉我说。

圆外的所有的都是大于零的,圆内的呢,圆内的呢对园内的都是小韵的对吧,就带到这个表达式,带到这个表达式诶,那我再问大家一个问题,当我套一个G函数在外面的时候,X1平方加X2平方减一。

我猜到它代入这样一个SIGMOID函数,我得到了什么,OK他又告诉我一件事情,他说哎,哎哎在这个圆外面的概率P是大于0。5的,在圆内的概率P是小于0。5的,所以事情又解决了。

他告诉你说在圆外面的是属于小叉叉的,概率是大于0。5的,在圆内小于这个属于小叉叉的,概率是小于0。5的,那我认为大于0。5的我就判定成这一类呗,小于0。5的我就判定成另外一类呗,诶这个问题是解决了。

好好好,所以好像看起来形式很简单,好啦好啦,回到第二个问题啊,所以假设函数已经有了好,请告诉我优化怎么做吧,我不知道theta怎么取,请告诉我告诉我theta怎么做啊,那个优化怎么做吧。

好所以回答这个问题,回答这个问题呢,我们要做的事情是求这个theta,呃有同学说老师老师还损失函数,对不对,损失函数对不对,loss function对吗,求一求啊,所以我把我预估的这个概率结果。

P去和这个标准答案零和一去做一个差值,这个事情不是搞完了吗,好简单的,和线性回归一样,嗯这样做不能说不对,但是我们不选这个东西去做损失函数,为什么,因为这个函数的数学特性不太好。

因为这个函数的数学特性不太好,这很尴尬啊,所谓的数学特性不太好,实际上是指的,如果你用这个东西去做它的损失函数,做它last function,你会发现说这货呀糟糕了好多,最低点啊,凹凸不平的。

根本就不像之前提到的碗状的那么乖啊,凹凸不平,所以呢你就搞一个小球滚,咔咔咔滚到第一个位置出不来了啊,环顾一下四周,你说我就是最矮的呀,我比周边都要矮,你凭什么还要我再滚呢,对吧,我就呆在这好了。

所以这个就非常糟糕了,所以你那小球就滚不动了啊,然后所以这个数这个函数它的特性不太好,数学大家就不用它,所以大家提出来另外一个损失函数叫做lock loss,就是我们会我们希望最后是可以滚小球的。

我们会希望它是能够滚小球的,我们希望这个JC打能是啊,随着这个C打是能是这样的一个变化的啊,这个会比较好好,所以呢我就往下走呃,所以这个地方提了一个损失函数,这个损失函数是这样的,它的公式有一点小小的。

有一点小小的麻烦,然后我来给大家,我来给大家解释一下这个公式啊,就是我给大家推一下,为什么损失函数会长成这样,HC打X刚才我说的是什么,这个东西是什么,是不是概率P啊,是不是属于正样本的概率P呀。

刚才大家都见到了吧,属于小叉叉的概率吧,P吧,我们用一个这个这个SIGMOID函数,里面套了一个C打转置X,然后送到一个sigma的函数里头就得到它嘛,对吧,好给大家推一下诶,我问大家一个问题啊。

如果你的标准答案是一,就是这是正样本,这是负样本,标准答案是啊,这个是正样本,那你的你的你应该就是标准答案取一,非标准答案取零嘛对吧,就是我的意思,就是说你明确你的答案就是这个东西吗。

然后你现在你给的呃,这个预估的结果告诉我说这个是P,就是这样本的概率是P,是负样本的概率是一减P哎,你告诉我你是不是希望这个P越大越好,就是大家告诉我是不是希望概率P越大越好,如果他是一个正样本。

你是不是希望概率P越大越好,就希望它是正样本的概率越大越好,好,你希望是P的概率越大越好,是不是希望log p越大越好,是不是希望log p越大越好,是不是希望负的log p越小越好。

是不是希望food log p越小越好好,所以损失函数就求出来了,就长这样,负的漏个PK当它是负样本的时候,当它是负样本的时候,你是不是希望这个东西越大越好,你是不是希望log1减去P越大越好。

你是不是希望负的log1减P越小越好,哎我刚才的这个推理大家听明白了吗,我给大家说的这个大家听明白了吗,你的概率P就是预估的正样本,预估的是小叉叉的那一类的概率,我会希望正样本的时候。

我会希望它越大越好,我会希望它越大越好,然后如果是那个呃负样本的时候,我会希望一减P越大越好,所以我会去做这样一个一个事情,OK有同学问到了一个问,答了一个问题,说老师老师为什么叫log。

为什么要加log,我会不加log不行吗,不加blog没有关系,但是你别忘了你现在有一批样本,你做题不是做一道题,你你不是做一道题,是做一批题,所以你一批题你不是不希望第一道题的P啊,越大越好。

第二道题的P越大越好,第三道题的P越大越好,如果是这样的话,你是不是希望把它们乘起来越大越好啊,所以你会去做一个乘法啊,比如说P啊,P1撇,PPP1撇不是那个导数啊,是是另外一个P啊,这是第第第三道题。

P两撇,你是不是希望这个东西越大越好,但大家问大家一下,一个01之间的数,一个01之间的数越乘是不是越小,我给你100道题,我给你1万道题,最后这个连乘是不是它会变得很小,这个连成一旦变得很小。

它就很糟糕了,你的计算机超过你计算机可以去计算的精度了,怎么办,求一个log,把它变成加法,加法是不怕数量多的,你加1万个数,它也没有做乘法那样的危险度那么高,做乘法用0~1之间的数做乘法。

连乘乘在一起,你待会就糟糕了,所以我解释清楚了,为什么要加log吗,就是这个其实和自然函数有关系啊,就是log自然大家之所以会去做这样的一个事情,就是因为你不你不做这个东西,它会可能会溢出。

可能会在计算机当中超过它能计算的精度啊,所以我说清楚了吗,好接着往下走,用加法肯定是不行的,用加法肯定是不行的,这个地方你的这些,你你现在这个自然,你是希望每一个都尽量的大啊。

用加法体现不出来这个东西啊,就加法加法的话呃,加法是做不到这个事情的,那你你肯定是用连乘的形式对,然后这个时候呢,你的损失函数可以写成这个形式,你的损失函数可以写成这个形式,啊这个大概没问题吧。

当它是正样本的时候,是不是这个东西就取一,当它是负样本的时候,是不是这个东西就取一,是不是就把刚才的这样一个分段的函数,统一成现在这样的一个形式了,有这个这个部分大家有问题吗,啊哪个同学有问题。

就是把我刚才给大家推出来,正样本的情况下,和负样本情况下的损失函数合在一起,大家有问题吗,因为两分段函数这个太讨厌了啊,他的他不太好求啊,明白吧,就是一个函数比较好求,分段函数的话就有点麻烦啊。

所以呢我就不分段了对吧,我就不分段了,Ok,好吧啊,那个同学说西格玛那个P体现在哪,来问大家一下西格玛log啊,这个H的费达xi,我把这个地方的西格玛啊,对这一堆的东西求和log。

求和是不是等于上面的东西求乘积,log求和是不是等于上面的东西求乘积啊,是不是就变成一堆东西,连成了体现在损失函数呢,是不是体现在这为什么前面要乘以一个Y啊,这个这个同学我们要把公式合到一起啊。

看清楚了,我只有在正样本的时候才取它,我在负样本的时候取它,看到了吗,啊去去这个地方啊,负样本,然后我我我这个时候的取正样本的时候,我这一项不就没有了吗,我取正样本的时候,Y等于一,这一项不就没有了吗。

我取负样本的时候,后面等于一,前面这项不就没有了吗,所以它是不是就变得和前面的公式一模一样了,OK了吧,好好有同学说log为什么前面要有负号啊,记住损失函数评价的是什么,损失函数评价的是什么。

损失函数评价的是我和标准答案之间的差异,你差异越大,这个函数应该越越大才对对吧,所以你这个地方的概率P在正样本的时候,概率P越大,这个值是越大的,在负样本的时候,概率P越大,这个东西是这个东西。

它是它也是越大的,所以你要加一个负号,去符合你的损失函数的含义,损失函数的含义,听明白了吗,我说清楚了吗,我说清楚了吗,这个地方,所以所以要加负号的,明白吗,损失函数是什么,刚才我们希望它越大。

我们希望是正样本的时候它越大,希望是负样本的时候它越大,对那我加一个负号,它就变成对的啊,所以它就它它它就和我的损失函数的定义,一样啊,损失函数是要求评估的是差异度,就这个函数越大他是越不好的。

它越小它是越好的,对吧好呃那个呃亲爱的同学们,不要忘了后面的正则化,就是你要知道哦,你刚才在做线性回归的时候,你是可以,你是线性回归的时候,你是可以扭动的去去拟合这些样本点,你现在在逻辑回归当中。

你同样可以扭着去做做区分哦,你可以扭着去做区分哦,去去把这两个样本点分开来哦,所以这个也是一个很可怕的事情,所以这个地方呢啊对你就同样要去限制一下,限制一下它的幅度,限制一下它的幅度。

所以这个地方的幅度呢,大家可以同样加一个正则画像啊,比如说你这个地方是一个l two的,一个一个lol two的一个正则化啊,不是l to lose l two的,抱歉。

刚才可能是前面同学有问到这个不叫l to lose,这个叫l two的regularization啊,l two的正则化啊,它不是l to loss,l to lose是一个用在回归当中的loss啊。

l two的正则化啊,这样L2的正则化,然后呢加在尾巴上呢,就是为了去限制住C打的这个幅度,限制住C达的幅度,对这个损失函数有不同的叫法啊,最大最大最常规的叫法叫LOGLOSS。

叫对数损失叫LOGLASS,他有其他的叫法,比如说它叫做binary cross entropy loss,就是二元的交叉熵损失啊,或者叫做对数损失都一样都一样对都一样啊,啊对对对。

然后这个函数的数学特性非常好,对这个函数的数学特性非常好,它是一个凸函数啊,它是一个凸函数啊,哦对有同学发现了一个问题啊,说老师这个地方好像你的那个中括号放错了,中括号放错了。

我应该我应该去那个纠正一下这个东西啊,中括号放错了啊,中号放错了,然后这个地方少了一个括号,哎呀抱歉抱歉,这实在是敲公式,一敲多了就容易蒙对,就容易懵啊,所以大家看一下,实际上啊现在这样是对的对吧对。

现在这样我相信大家大家是没有问题的对吧,所以所以那个大家看一下啊,就是前面的部分应该是应该是应该是这样,好好大家现在看到这个式子啊,大家那个那个这个这个公式,还是有点那个书写的时候有点问题啊。

我们应该纠正一下啊,这个函数它是一个凸函数,它是一个convex function,所以凸函数你是可以直接滚小球的,对你是可以直接滚小球的,所以同样的方式去求他的这个gradient,求它的梯度啊。

同样的方式去求他的梯度,然后照刚才一模一样的方式去做,优化细节的东西呢,我没有在,我没有在这里就给大家推导那个导数啊,因为我刚才说它有很好的特性,就是大家别忘了这个GZ是等于GPC。

是等于GZ乘以一减GZ的啊,你们自己去求一下,你发你可以验证一下这个结果,所以它求导其实不难,它的导函数,虽然刚才大家看到那个函数,老师你说老师老师这个感觉好复杂,那个里头又有什么。

一加上E的这个这个负Z次方分之一,然后这个Z又是W的转置X,OK然后然后然后你又在前面求log,感觉这东西好复杂,但其实它不复杂,没有大家想象的那么复杂啊,啊所以这个地方求解的方式。

求解求解的部分没有给大家细说,它还用的方式还是梯度下降啊,依旧是梯度下降啊,顺着这个方向去做优化好呃,再说一点其他的内容,就是这个世界上不只是二分类的,谁告诉你说做选择题只有两个选项呢。

没有人告诉你说做选择题只有两个选项对吧,这个世界上东西多着呢对吧,我我这幅图像里头可能是猫,可能是狗,可能是大象,可能是鸽子,可能是其他动物,所以如果我只知道二分类,刚才我们的逻辑回归只完成二分类对吧。

我只拿到一条决策边界,Decision boundary,决策边界,我只能完成二分类,我怎么去完成多分类呢,这个地方有些思路啊,所以从二分类迁移到多分类,有两个常见的思路。

一个叫做one with one,一个叫one with Rest,他们分别做什么样的事情呢,我还会翻做这样的事情啊,这个地方有三类三角形,小叉叉和小方块,我怎么去做三分类呢,我做不了啊。

我只能做二分类好,没关系,我一步一步来,我先构建一个分类器,C1去区分小三角形和小叉叉,为构建第二个分类器,这个地方的C2去区分小三角形和小方块,我去构建第三个分类器,去区分这个地方的小叉叉和方块诶。

你告诉我,如果我来新的一个样本点,我来新的一个样本点,比如说这个样本点可能是啊,在这哎,这个样本点是不是可以丢到这三个分类器当中,分别去拿到一个属于这个三角形的这个概率啊,P1和属于叉叉的概率一减P1。

然后以及丢到第二个分类器当中去,找到属于三角形的概率啊,这个地方啊叫做叫做P111撇和一减,P11撇是不是可以丢到第三个分类器当中啊,C3当中去区分出来属于方块的概率啊,属于方块的概率P啊。

那个啊一两撇,然后属于叉叉的概率啊,一减P一两撇有有问题吗,我对其中的每两类啊,不不不,这个地方和soft max没关系,这个地方和soft max一点关系都没有啊,大家不要不要。

那个我知道你们知道一些多分类的分类器啊,不要搞混了,这个地方就是用二分类去解决,去解决多分类啊,那它的两种思路,one with one或者one Rest用的都是二分类。

和soft max一点关系都没有好,OK所以这个思路大家听明白了吗,我对里头的任意的两个类去构建一个分类器,我会拿到三个分类器,没错他会拿到二分之N乘以N减一个分类器,没错没错。

啊你你们你们我知道你们想在想什么,你们觉得计算量很大对吧,构建三个构建这么多个分类器,计算量很大对吧,唉谁谁跟你说了,谁跟你说了,这些分类器在构建的时候一定要做串行了,唉谁告诉你说要做做串行啊。

我估计这个资源多的很,我我任意的两个分类器,我去构建这个分类器的话,我可以很简单的去构建,构建一个并行的去构建很多个分类器,可以同时跑起来啊,还有一个还有一点是这样的,哎你你知道你你自己想的是什么。

你觉得构建这么多个二分类器和你你猜一下,构建这么多个二分类器和构建一个多分类器,哪个计算量大呀,我知道你在想什么,因为你直接想要模型吗,你说我这个地方有二分之N乘以N减一个模型。

那个地方只有一个多分类器的模型,但谁告诉你说,那一个模型比这个地方的一个模型,和这个地方的一个模型,构建的时间复杂度是一样的,所以不一定的这个东西不是你想象的那样哦,你要任何的事情。

万事万物你都要考虑不同的维度,所以这个地方的one with one,是一个在工业界里头依旧在用的方式,比如说大家如果看SBM,你看后面讲到的支持向量机,它在做分类的时候,它就有可能会用到呃。

用到这个地方的思路啊,就one with one或者one with Rest的思路对,所以大家可以稍微那个留意一下对,就任何的事情,你我还是还是那个大家要多多思考啊,他总会有自己的一些利弊啊。

可能和你直观想的东西不一定一样好,这是one with one,One,One one,One with one,做的事情很简单,就是在任意的两个类别之间,去构建了一个分类器。

那one with Rest呢,那one with Rest呢好很多同学很聪明,你已经猜到了one with Rest是什么,when we switch告诉构建,同样会构建三个分类器。

只不过这三个分类器是区分说诶是小三角形,不是小三角形,是小叉叉,不是小叉叉,是小方块,不是小方块,有问题吗,同样去取最大的那个概率P啊,注意啊,他这个地方构建了三个分类器之后。

它取的是这里头最大的那个概率啊,就是P1P11减P1啊,P1撇,一键P1撇,P一两撇,一键P一两撇里头哪个最大,它就算是就是说这个里头啊,Sorry,就是P1P2P三啊。

不对P1P1P2P一两撇哪个最大,他就取哪个,OK能理解能理解我说的意思,就是他取最大概率的那个类,作为他最后判定结果的lo,所以这是一个思路啊。

就是one with one和one with Rest,这样的思路,我希望能给大家说清楚了,one way spend是两两之间去构建,然后one way stress呢就是是否对吧,是小三角形。

不是小三角形,是小方块,不是小方块,是小叉叉,不是小叉叉,好这样啊,代码一会儿给大家讲,然后说一点点说一点点那个工程应用的经验,这个就是我刚才给大家说的那句话,因为有同学总会觉得说老师。

老师前面写的这些模型好简单的呃,我想学复杂的模型,我要去学那些什么什么比较比较牛逼的,那些model啊,那些神经网络的model,什么支持向量机啊,那些这个啊GREGBDT等等这样的机械模型。

我觉得他们好牛逼的,我觉得洛基回归好弱的啊,这个没有啊,没有就是呃模型简单,工资低,谁告诉你的,你这句话的前提是,简单的模型和复杂的模型你都能用好,所以而且你要知道,不同的场景里适用的模型是不一样的。

嗯我我跟你说啊,如果你这个问题非常简单,你用神经网络去做这个事情,可能是一个吃力不讨好的事情,逻辑回归的优点在哪,逻辑回归你可以拿到,你可以拿到C答,你可以直接根据C塔去看每一个特征,它的重要度有多高。

对,所以所以这个时候,你它有非常非常高的可可解释性,我们今天给大家讲到的模型和明天讲到的模型,都有非常非常高的可解释性,可解释性是什么,是工业界非常看重的东西,举个例子来说啊,你们去看一看。

有些很牛逼的行业哦,叫做互联网金融,大家知道吧,很牛逼吧,天天跟钱打交道啊,互联网金融,然后里头有一个领域叫做叫做风控反作弊,我告诉你神经网络他们是不敢用的,为什么,因为神经网络出现问题了,完蛋了。

你查不到问题,就是它的可解释性很差,你不知道他为什么做了一个这样的决定,但是如果今天大家用逻辑回归,你去检查一下这个地方的C打,你就知道他为什么会做这个决定,是因为我的某个C打比较大。

是因为我的某个输入的X比较大,才会有这样的一个结果,所以你可以第一时间对你现在这个东西,问题去进行处理,如果你用神经网络,你现在出现问题了,你只能把它先降级,降到一些其他的模型上,然后先顶着。

然后你再去查它,它短时间内是查不出来他的,你你是很难去查出来他的问题的,所以可解释性意味着有更高的可控度,有更高的可控度,而且直到几年以前,你看到的最牛逼的那些公司,包括百度,包括阿里。

他们还在用这个模型,用的用逻辑回归,只是只是在到近两,近几年大家的那个数据量幅度起来了,然后不那么容易过拟合,然后这些工程师又能在一定程度上,能去debug一下呃,像神经网络这样的一些model之后。

现在线上的baseline,就是现在这些模型才切到deep learning上对,但是你看到大部分公司我们有一句话叫做,一招L2打天下,真的你去工业街问一下,这个大家都都都是知道这句话的啊。

就是我只需要这一个模型就可以了啊,就是关键就在于你的数据处理的有多好,然后所以这个地方呢我给大家写了一堆东西啊,大家看一下就好了,就是模型本身是没有好坏之分的,千万不要有这种想法。

觉得啊老师这个模型好简单,然后会这个模型的人是拿不到高的工资的,没我我跟你说逻辑回归我,我去面试你的话,我去问你问题的话,我同样可以问得出来,你对你的机器学习的功底到底是怎么样的,所以你不用。

你不要去觉得这个模型很简单,它的里面也有一些细节啊,你需要再消化一下,然后呃模型本身是没有好坏之分的,然后它有它的优点,它有它的优点,它最后能输出一个概率P,然后它可解释性高啊。

他做完特征功能以后效果很好,然后他可以去做一些其他的,因为它可以输出概率,他可以去排序啊等等等等,然后它的应用也很多啊,就大家看到那些什么呃,最大的几家公司,包括这个这个什么头条啊等等啊,抖音啊。

他们里头做一些工作可能都会用到,可能都会用到这个模型啊,是对啊,现在写的这些内容来源于我,来自于我自己的一些总结,所以那个不是书,如果你要看书的话,你可以看一下周志华老师的机器学习西瓜书,在那本书当中。

他把逻辑回归叫做对数几率回归啊,就是他认为最后是一个回归,回归的是一个概率,所以它叫做对数几率回归啊,然后你可以去看一下,好吧啊,然后这个地方关于算法的调优啊,你可以去调正则化的系数。

C可以去调收敛的阈值,E可以去调损失函数,给不同的权重啊,这些东西都是可以调的,你在工具库里头是可以可以可以见得到的啊,先简单的说一下,然后推荐两个工具库是呃。

来自于台大的LIBERIA和PCLEARN中的logistic,Regression,然后LIA这个库是一个它是一个C加加的库啊,然后LIN里头有一部分是对他做的那个,Psychloe,当中。

有一部分是对这个东西这个库去做的封装啊,就是它是一个Python的封装啊,你可以认为OK好啊,所以这个库大家可以看一下,我给了一些链接啊,这是这是台湾大学的一个库叫LIVINA啊,如果数据量大的话。

也可以用spark spark当中呃,这个应该是以前的酷啊,这以前的版本1。6,现在应该已经到2。3了,Spark,然后这个spark当中有两个板块,一个叫ml lib,还有一个叫做ml。

然后这两个板块当中都有LR,然后它都能完成并行化的优化,OK好,然后那个我带大家来看一下代码嗯,所以那个稍等一下,我来把它切上来,呃能看到我的屏幕吗,能看到我的屏幕吗,嗯大家能看到我屏幕吗。

好啊我我做一个小小的说明啊,第一节课的代码,里头有我自己纯手写算法的部分,听清楚啊,里面有自己纯手写算法的部分,所以如果大家看这个代码,觉得老师好复杂的,这个很正常啊,在大家今后使用这些模型的时候。

更多的时候你不会自己手写代码,你会基于一些工具库去完成这些任务,只是工具库用的好与坏,和你对模型的理解之间会有非常大的关系,所以如果你看这一次课的两个代码,这两个我手写模型的代码看的有问题的话。

这个不要不要因为这个东西而觉得很啊,对自己的否定情绪很高啊,是不用因为这个地方的底层的这个这个代码啊,一方面是他确实比较麻烦,另外一方面是我只是为了告诉大家说,你看我给你写了一个逻辑回归。

我给你写了一个梯度下降,我用这个东西确实能跑起来,确实能解决这个问题,我只是为了给你加深一个印象,告诉你说你看我写一个线性回归,我写一个损失函数,我写一个梯度下降,我去迭代一下诶,它的损失函数下降了。

他最后能够收敛哎,和工具库的结果还比较类似,只是这样的一件事情,并大家实际工业界的在解决问题的时候,并不会去手写模型啊,这是一个非常好的事情,手写模型肯定是比不过那些前辈已经吹出来的。

很完善的这样的工具库,所以大家在这次课看到的这两个代码啊,linear rebrushing example和logistic regression example,对我自己手写了一部分代码。

就是关于这里头的这个就是大家知道的啊,这里头会有一些模型的这个呃拟合呀,会有一些优化迭代,这样的过程我全都自己手写了,所以你看起来代码会有点复杂,实际在工业界当中去完成拟合,可能就一句话啊。

所以所以这个地方会有一些其他例子吗,比如说你看这个地方的cable的,这个旧金山的犯罪啊,类型的这个分类这样一个问题呃,最终的你知道建模的部分在哪,建模部分在这看清楚啊,建模部分就在这。

他就是用一个模型去拟合一下我的数据,去feat一下我的数据,X和Y看到了吗,这个东西就完成了,这个过程训练就完成了,不需要你自己去写,而我前面给大家写的这个东西,是为了加深大家对知识的认识。

所以我给大家手写了一遍啊,所以大家不需要去抠这种细节点,比如说你说老师老师这个可视化我不会做,怎么办啊,会不会后面的课学不下去,不会啊,老师老师这个地方的这个向量化的表示形式,这种南派的计算。

我不会会不会影响后面课的学习,不会OK好,所以这个地方我先做一个简单的说明啊,然后我来说一下这个地方的例子,这个例子是这样,大家看这个代码不用一行一行的去看啊,就是不要求大家每一行都去看。

搞清楚他在做什么啊,因为你在后面的,我刚才我说了,就是使用方法不一定是这样的,使用方法哈啊这地方会有一些工具库啊,Python这个语言我不知道大家熟不熟啊,但是建议大家熟悉一下。

这是数据科学领域呃比较牛逼的一个语言,如果现在大家看各种各样的AI工具,如果它没有,它不是Python写的,他一定会有Python的接口,基本上是这样的,你看google的TENSORFLOW。

你看你看那个FACEBOOK的PYTORCH,他以前有个很好用的库叫做touch,这个库呢早在非什么CANCEFLOOR,什么carry,什么什么什么,这些工具库全都没有出现之前就有,大概在那个时候。

我们1114年一几年在用的时候啊,1314的时候,可能那个时候就已经有touch这个工具库了,然而那个工具库的主语言不是Python,所以谷歌爸爸一旦一一把甩出来之后,大家用Python去写。

然后那个啊就那个FACEBOOK肯定也是,他也在构建自己的AI生态嘛,所以受到压力了,所以他立马推出了一个叫做PYTORCH的工具库,那个工具库就是touch的一个Python的版本啊。

还是Python的版本啊,有同学问到说老师,老师这个地方的这个i Python这个notebook,用什么东西去打开啊,你如果是Mac的话,你可以装jupiter notebook啊。

如果你是windows或者Mac的话,你同样你可以去装一个anaconda,Anaconda,然后我来给大家拼一下吧,对我敲到里头了,敲到我们聊天区了,叫anaconda,然后你把这个东西下来。

下下来以后,下一步下一步下一步安装好了,它里面就可以启动一个NO no9,peter notebook就可以下载这个代码,好吧啊,然后这个代码呢我不想每一行每一行就讲,我事先说明一下。

在Python当中呢,工具库是这样做的啊,有些大神已经写好的工具库,Import pandas s p d,说明说我要把pandas这个工具库引入进来,我取一个别名叫做pd,我把NPI这个工具引入进来。

取个别名叫做NP,然后我要做可视化,所以要用的Mac polip这样的工具库好,中间这一大坨东西不用管,他们就是一些基本的设定啊,前面的东西也不用管,就是用当派去产出了一个数组而已,一个矩阵啊。

你可以认为OK啊,然后这个地方的单变量线性回归,先准备好数据,数据我已经给大家准备好了,叫做linear regression data1啊,Linear regression data1。

然后所以这个地方我把它加载进来,它就是一个大的矩阵,然后在这个矩阵的基础上,我就可以去取出来对应的和Y好,所以把X和Y画一画图啊,就长成这个样子,那个大家读这个代码的时候啊,你是第一遍读的时候。

不要去抠每一行代码,不然的话你读的会很会会很费劲,呃会很费劲,所以这个地方呢大家以以这个嗯,大家大家以现在这个地方的这个案例为准,去看一看他在做什么样的事情,我做了一个格式化。

我给大家画出来的横坐标是population of city,就是城市的这个人口数,纵坐标是什么呢,纵坐标是它的一个perfect啊,就大概是这个城市的一个收入啊,或者是他的GDP啊等等这样的信息好。

然后所以我画了图,大概长成这个样子,然后我现在,我现在想对这个地方的数据去做一个拟合啊,我想对这个地方的数据去做一个拟合,那怎么办呢,对我我这个地方显然是一条直线。

所以我要做的事情是我的假设函数已经有了,是C的X对吧,那我就要去计算一下我的损失函数啊,所以loss function或者computer function实际上是这样的啊。

loss function和computer function实际上是这样的,那我给定C打给音Y给定X的时候,我做什么,你看是不是C达和X去做一个内积啊,就是C大乘以C达的转置乘以X,然后求完那集以后。

我是不是用求完预估的结果值,减去真实的结果值,再求了一个square啊,再求了一个平方啊,H减去HC的X减去Y求平方,再求和,再除以2M分之一对吧,这个和我们的公式一模一样。

这个和我们在我们在我们刚才的PPT当中,公式一模一样对吧,然后我们写了一个gradient descent,就我们手写了一个梯度下降,我们手写了一个梯度下降,这个地方的梯度下降是每一次的C打。

都沿着负梯度的方向,负梯度我们已经求出来了,就是啊H减去Y再乘以X啊,就转置乘以X这样的一个,那X的转置乘以这个H减去Y对吧,然后我沿着负梯度的方向,以阿尔法这样一个学习率去做一遍调整。

我写了一个for循环,我就一步一步的去做这样的啊,一步一步的去做这样的调整对吧,我一步一步去做这样的调整,我把中每次调整之后的这个损失函数,做一个记录,那大家会发现随着我的迭代次数。

往随着我的这个地方的迭代次数啊不断的增多,大家会看到这个地方的cost j,实际上最后的这个损失函数,这个JC打是往下降的,往下降,就表示说我和结果之间的差异值越来越小,越来越小了。

然后最终我就可以把这个结果画出来,所以当我求我迭代到一定程度的时候,我就求出来了,C打了求RAC的,你就知道斜直线的斜率了吗,你知道斜直线的斜率,你就可以画出来这条直线嘛。

所以大家看这个地方我用了两种方式,一种方式是我自己用用这个呃,这个这个梯度下降去学习到的这个参数,另外一种方式是我调用了大神的一个工具库,就是啊逻辑回归,把那个psychic learn。

psych learn当中的这个这个这个linear,regression线性回归,然后去feit data对,去feit data,然后拿到的结果大家看,实际上我自己手写的这个算法。

和工具库的算法是非常类似的,就结果基本上是一致的对吧,结果一般基本基本上是一致的,然后我就可以对它做一个预估好,这是这个代码正确的打开模式,这是这个代码正确的打开模式,OK啊好。

然后第二个代码是逻辑回归啊,逻辑回归前面的东西我也不说了,这一大坨好,然后pro data就是一个函数,这个函数用于绘出来样本点的一个分布好,所以我现在通过data把加载进来的数据叫做data one。

点TXT加载进来的数据去绘制出一幅图,这幅图就长成这个样子,所以这幅图是说我参加了两次考试,我两次考试有两次考试的成绩,example one score和example to score。

最后我能不能通过这次考试,我要基于两次考试的得分去做判断,所以大家看到这个地方会有啊,黑色的部分是通过了啊,这个地方的黄色部分是没有通过,是挂掉了,所以啊有没有通过,有没有挂掉,取决于取决于你两科成绩。

如果你有些科目非常非常的好,只要你另外一科不要太差,我就让你通过,结果大家发现了吗啊,然后或者是你两科都很好,当然了,妥妥通过,如果你两科都很差,不好意思,你肯定通不过,如果你某一科很好。

但是另外一科太差了,不好意思,也通不过,很多同学考过研对吧,你教考研的时候,实际上单科是有单科线的,你过不了单科线的话,不好意思,你是没有办法的,OK好,所以我需要去找到一条决策边界。

把这样的两类样本点分隔开,没错,所以呢底下这个地方我就开始给大家写了,好计算一下损失函数,损失函数是什么,对刚才大家回到PPT里头,看一下损失函数怎么求的,损失函数是不是正样本的时候是啊。

这个log p啊对吧,负样本的时候是log1减P,然后前面加个负号对吧,记得吧,然后我就把这个东西写出来了啊,Python Python其实它是一个可读性很好的一个语言,所以我就把损失函数写出来了。

然后到损失函数写出来了以后,我应该怎么样对,我应该用这个地方的梯度去完成梯度下降,去优化吗,所以你就可以优化一下,然后呃这个里面有一些细节啊,我没有办法一行一行给大家解释,如果你们有看不懂的。

可以在群里头啊,那个提出来,大家可以一起讨论啊,我会给大家做解释,然后你往下看底下这个地方的话,决策边界就是我如果通过梯度下降去学习到了,这一条角色边界的斜率和它的截距,我就可以把它画出来。

所以大家看这条这条线学得还不错吧,这个学得还不错吧,你看他是能把它是能近似的,把这两类样本点分隔开的,因为它是一条直线啊,所以它啊他是没有办法做到完全分隔开的,因为你看一下这里头的样本点是不可以。

线不是线性可分的,你找不到一条线把它分开的,所以他很努力很努力学,大概学到这个程度好啊,下面呢这个例子是一个加正则化项的逻辑回归,因为我们说正则化很重要对吧,你要去限制住他的这个呃逆合能力。

所以呢这个地方呢我们把数据放出来,它长成这个样子啊,它有两类样本点,一类样本点是这个地方的黑色的小叉叉,另外一个样本点是这个地方的黄色的啊,这个小圈圈我要把它分开,所以要学习出来一个决策边界好。

我们搞一点点多项式的特征出来,因为显然这个没有办法线性可分嘛,大家看到这幅图能找一条直线,是咔咔咔分不开的,所以怎么办呢,线性分不开,搞成非线性,所以他找了一个多项式的变换。

去把映射后的数据映射成最高六阶,就是最高是六次方啊,这样的一个一个多项式的啊,表达就是有X1的例六次方,X26次方啊,那又包括X1的五次方,四次方,三次方,X1的平方乘以X2,X1的立方乘以X2。

X1的立方乘以X2的平方啊,等等等等等等,反正这里头造了很多的这种,交叉项和多项式的特征出来了,然后我把这个多项式的特征,利用刚才的啊逻辑回归去完成一个分类,我同样去计算一下损失函数。

只不过这个损失函数,要记得加上尾巴上的正则画像啊,去加一个正则画像好没问题,然后底下这个地方是同样的方式去做调优诶,刚才有同学说,老师老师为什么那个问题里头不去做啊,超参数的不做这个参超参数的选择啊。

对啊,因为刚才不做调参吗,因为刚才那个linear regression太简单了,他没有要调的东西,大家现在看到这个地方,罗辑logistic regression,它有一个要调的东西叫做C的啊。

这不叫做拉姆达,就是这个地方的正则画像的强度,拉姆达呃,你先看图,先看图,拉姆达等于零表示什么意思,拉姆达等于零表示什么意思,拉姆达等于零,是不是说你们家这个天才的这个小孩,我管都不管。

你爱怎么学怎么学,你你自己你随便去学对吧,我不对你做任何的约束,所以大家看到最左边这样一幅图,是不加任何惩罚的,我不做任何的惩罚,你看他可以学得很扭曲,不做任何的限制,他可以学得很扭曲,它扭它很扭曲的。

这个结果很可能效果是不太好的,在新的样本上,大家看中间中间是我加了一个拉姆达等于一啊,就是我加了一些拉姆达,中间啊中间是我加了拉姆达,拉姆达等于一,说明我稍微惩罚了一下他,但是又没有太过。

大家看这个学习的这个曲线怎么样,是不是平滑了很多,你们看结果是不是平滑了很多,最后这个拉姆达等于100,拉姆达等于100,也糟糕了啊,拉姆达等于100来表示大多了啊,这个小孩就就就那个管的太严了啊。

打太多了,这个没有创造力了啊,也畏畏缩缩,不太敢去学了,所以效果就不太好,你看右边的效果就不太好,所以拉姆达太大和太小都不好啊,你不管它也不好,管太多了也不好稍微管一管,所以这个拉姆达怎么去调对。

后面会讲到具体讲到如何去调参,但是这个地方给大家一个基本的认识啊,基本的认识我这个代码,大家把他的kernel换成python3跑一下,我而且你们用过Python吗。

你们知道python2和python3的差别不是太大吧,就是大部分情况下是通用的,除掉print代码除法和啊,你的一些map filter这样的东西,它一个一个是迭代器,另外一个阐述结果是list。

差别不是太大,你要你如果要保python3,你把这个地方的cell你不PROCEL,你把这个地方的kernel,你把它换成python3的kernel去跑一下就好了。

我不知道大家装的JUPITER有没有两个环境啊,我自己本地的JUPITER是两个环境,都装了python2和python3,所以如果你们要做python3,你们就在你们自己配一下环境。

在kernel里头把把kernel换成python3的kernel,所有东西都可以跑,代码没有动啊,代码不用去动啊,这里头的代码是大部分代码是兼容的啊,除掉print这样的函数,其他的代码大部分是兼容。

所以你们直接跑就可以了,OK所以不要觉得python2和python3之间有太大的差异,没有你想象那么大的差异呃,呃至少对用户而言差异不是那么大啊,基本上你的可以感知的部分比较少。

当然了我是我也是很提倡大家用python3的,因为在2020年以后,那个python2是不会再维护他那些工具库的更新了,所以建议大家用python3,我这个地方用python2的原因是。

因为我公司的服务器投入的Python的环境,有些还是python2的,这是有些历史遗留原因啊,大家知道在前几年我们就开始用Python了,然后有一些项目当中用到了Python,是python2诶。

你要全切成python3的话,有一定的风险,线上的项目,这个意思好吧,对,那个是这个意思,如果大家用python3跑这个代码有有小问题的话,你们提出来,我们帮大家去改啊,其实改动的地方很小,明白吧。

就改动的地方其实很小啊,K好那个这个这两个就是那个呃我手写的代码,然后大家可以看一下,这个这个是实际工业界里头解决问题,我们用工具库去做啊,这个代码,然后这个里头就是读数据啊,包括读数据啊。

数据的处理啊,这个我们在后面会给大家讲啊,读数据和数据处理,然后它的建模很简单,它建模就这一行启动一个逻辑回归的分类器,拟合一下数据就完了,就一行对这个就是你用工具库和不用工具库的。

你用工具课不会用工具库的区别,OK啊,所以用了just regression,直接去feat一下data就可以了啊,多余的东西我不想,我不想给大家再啰嗦多说,你们如果在跑这个代码。

或者是查这个API的时候遇到了问题,你就在群里艾特我问就好了好吧,我的代码已经在课前啊,在昨天已经传到了我们的QQ群文件里,大家打开QQ群文件把代码拉下来,本地装一个anaconda。

就可以把它把我的代码加载起来,可以去跑,OK啊,anaconda是有python2和python2的,python3的不同的版本,大家用python3去跑,我这个地方这个代码也没有问题。

也是没有问题的好吧也是没有问题的,然后大家注意一下,这个地方的代码阅读是需要花一些时间的,所以我希望大家下课以后花一点点时间,去把我这个地方给到的这个啊,案例和代码去消化一下,OK去消化一下。

如果你们有问题的话,可以提一下,OK啊,然后我我觉得大家可以在学过一点点模型之后,再动手去做一点东西啊,回头我们会有一些小的比赛案例丢到大家手里,让大家去做,你们不用着急。

因为你今天学到的模型是很基础的模型,你在明天学完以后,你会学到新的模型,你会你需要去感受一下模型和模型之间的差异,这个东西对你的这个东西,对你的学习是有帮助的,然后案例我会传到我们的QQ的群文件当中。

然后大家那个去呃看一下好吧,然后自己去把这个代码拉起来去跑一跑,你去看一看里头的细节,最好的学习方式是在已有的代码上,去看别人是如何实现,以及里面需要注意的一些点。

这样啊我这个代码应该用python3跑是没有问题的,你们可以试一下啊,对啊,你可以试一下啊,我今天就给大家讲到这好吧,我就不再拖堂了,不好意思,今天那个因为第一次课,我想给大家把一些基础的知识。

和一些我的一些理解给大家那个说清楚,就没有赶时间,所以呃可能拖堂拖了一会儿,然后希望大家见谅啊,就是那个可能影响大家休息了,然后那个大家有更多的问题,你们就在那个群里面再找,再再艾特我去提问好吧。

对那个我就不再给大家再拖时间了,然后那个对就是你们有问题的话,你们就问,然后我我我有可能工作会啊忙,但是我看到的话,我肯定第一时间回复大家好不好对对,所以OK那我今天就给大家讲到这,然后大家辛苦了。

早点休息,你们有问题的话,你们在那个QQ群里去艾特,我再去问,然后我看到了,我会给大家做一个解答,参与大家讨论,好不好啊啊那个作业我说了,先把代码看一下,先把代码看一下,我现在让你建模。

你也做不了这个事情,对对,你先把先把这个地方我给到了四个四个代码,先去看一下,等你学完了几个模型之后,我会给你一个作业,会引导你去完成好不好,所以先不要着急啊,然后这个地方代码你一定要先看。

如果你不看的话,我给你一个题,你是动不了手的啊。

OK好好,谢谢大家,大家早点休息啊。

【七月在线】机器学习就业训练营16期 - P10:在线视频:1-机器学习基本流程,基础模型与sklearn使用_ev - IT自学网100 - BV1Z9T5ewEKL

好那么我们就开始我们今天的课程呢,嗯那么我们今天的课程呢。

我们在今天这呃两个小时呢,我们带着大家看一看,在呃机器学习里面,如何学习这个机器学习的一个呃实战部分,然后我们在今天这节课呢,我们会嗯,就是说呃讲解这个机器学习的一个基本流程。

主要是以SKN的这个库来要进行讲解,然后在这两周呢,我呃我就是来,就是说带着大家来学习机器学习的实战,然后呢我们的实战内容呢不会讲的特别难,但是也不会特别简单,就是如果对于SKN有掌握,有基础的同学呢。

可能掌握起来会比较轻松一些,当然你也不用担心啊,我们嗯就是说也会给到一些练习题给到大家,所以就是说你如果觉得呃,就是说讲就是说讲的不讲的太浅了,你也可以直接做练习题,这都是可以的,然后呢我是刘老师。

然后在这两周呢我会带着大家一起来进行学习,然后大家如果对我们的课程呢有什么问题。

也可以直接在我们的直播,直播的过程中呢提出来啊,我也都会,我也会第一时间看到就进行解答,然后我们首先呢来看一看,我们这个实战阶段要学什么以及要做什么,勇哥同学勇勇哥。

这位同学说每个模型都会用SK单练习一遍吗,大部分都会进行一个练习的,然后我们来看看我们这个阶段要做什么啊,其实在我们的一个机器云里面呢,我们在之前的阶段是其实学习了这个基础,再加上机器学习的一个原理。

那么有很多同学刚才已经有同学说了,就是说呃原理重要还是实战重要,这个呢其实两者都很重要,那么一般情况下呢,我们在学习一个机器学习的时候呢,其实是原理和动手都是要掌握的,那么这个呢就是说。

其实并不是说你只掌握了原理就能找到好工作,也也并不是说你掌握了动手,你也就能找到好工作,这两者都是需要掌握的,那么嗯我个人感觉呢,就是说原理它可以告诉你这个算法是怎么来的,但是呢动手呢。

可能就是给你增加一些实战的经验,那么这个实战呢,其实它往往都是从一些具体的例子,来进行一个讲解的,那么还还往往都是从一个库来进行讲解的,那么这个呢其实是可以增加你对算法的一个,具体的一个理解。

比如说我们在机器学习的一个原理的过程中,会讲解这个x g boost,那么在讲解X级boos的时候呢,我们的老师会给大家讲解他每他有哪些超参数,他的一个模型的一个学习过程是怎么样的。

那么在具体实践的过程中,是不是就是这样呢,大家可以在之后的课程可以体验一下,第三个呢就是说我们的一个实战呢,其实它是往往更接更加接近于具体的案例,这个案例呢其实更加能够帮助大家理解,工业级别的案例。

以及能够呃为我们后续的一个项目的一个,实践过程中啊,增加一些经验的,那么我们既然实战是非常重要的,那么我们如何进行实战,如何学习呢,其实也有一些嗯,学习的路径和学习的一些建议吧。

第一个呢就是说我们既然现在都是呃,大部分情况下,99%的情况下,都是基于Python环境下的一个而学习,那么我们就肯定是要学习这个Python的一个基础,对吧。

那么我们在之前的阶段已经学到这个Python的一个,pandas以及NP以及magiplot lib,这些基础的库的使用,那么在我们的实战部分呢,可能要学习一下这些呃机器学习的库。

那么在n Python下面呢,机器学习的库其实是非常多的,那么我们其实首先第一第一个点呢,就是说我们要学会使用这些库呃,这个使用这些库呢,就是说我们需要学会啊,所以我还是不放大啊。

我们是需要学会用这个库来完成一个,具体的问题,那么我们为什么我们不自己实现这个库呢,就是说我们既然学了这个逻辑回归,学到这个数模型,我为什么不自己实现一遍呢,当然我也是推荐大家。

如果大家有精力的情况下啊,你可以自己实现一遍,当然但是呢其实呃,你自己实现的可能会有很多的一些呃,在这个精度和这个运行速度上,没有已有的库好,那么已有的库呢其实是嗯更加稳定和通用的。

而且呢你学到这个已有的库呢,对之后的一个就业都非常有有帮助的,那么比如我们今天所讲解的的这个SKN,这个库呢其实在很多互联网公司,或者说所有的互联网公司,都有这种库的一个应用场景。

那么我们既然这些库很重要,我们如何学习呢,这个呢就是说你学习这个库,你就要学习它的具体的用法,以及它的一个场景和细节,这个是要需要需要学习的,然后呢学习完这个库之后,你不仅需要学习他这个库的具体使用。

你还要学习用这个库解决一些具体的问题,因为你学习完这个库,其实本质还是呃要学要解决问题的对吧,问题肯定是呃我们最终要解决的,那么在我们的实战部分,我们可能还会讲解,就是说在机器学习的这个领域里面。

我们会遇到什么问题,以及如何动手解决这些问题,这个我们都是会给大家进行讲解的,然后呢嗯还有同学问,就是说我们的实战和面试有什么关系,我们面试不就是讲呃就是说考察这个额算法吗。

或者说考察我们的一个项目经验吗,他跟这个实战有什么关系呢,其实这个面试和实战还是有一定的关系的,首先呢第一点就是说,其实这个实战的,它是能够体现你个人能力的一部分,而且呢这个库的一个使用是必备的。

有很多时候呢他的一个面试的问题,都是直接问这个库的一个基础,比如说SKN里面哪些函数,是可以用来做数据划分的,s kn里面的一个数模型有哪些哪些,那么我们对实战的一个呃项目。

或者说对这个课程这一个阶段的理解呢,其实也是能够帮助大家理顺一下,这个机器学习的算法的应用流程以及案例,也是这个必备的技能啊,也是必备的技能好,然后呢这个是我们第三点,就是说实战和面试有什么关系。

然后第四点呢我们就看一看,其实我们这个实战部分我们要学什么,其实有一些库我们大家已经学习过的啊,我们就不会进行讲解,然后呢其实在我们的实战部分呢,其实主要学两部分的内容,第一个还是库。

这个库呢就是说我们Python环境下的这些库,你是需要掌握的,比如说pandas long psk,N x g,boos h b m以及chaos tensorflow pythority。

这其实是深度学习的库啊,这是深度学习的库,那么我们在我们这两周的过程中呢,可能会讲解一部分深度学习的代码,但是呢我们不会讲的很深,然后呢在这个库这个阶段呢,我们还会嗯给大家介绍一下。

基于spark的这个呃这个大数据开发的能力,然后呢这些是库的使用,或者说是技能的使用,然后还有一些是知识的,这个知识呢,就是说我们的一个呃呃,机器学习和数据挖掘的一个知识,比如说我们的特征如何编码。

我们的数据如何进行分析,我们的一个嗯数据如何进行构建,以及我们的数据如何进行划分,以及一些具体的一些案例和解决方案,好这是我们第四点啊,就是具体的学习内容,然后第五点呢就是说嗯其他的一些相关问题。

这是之前的一个呃,就是说我们这个阶段呢,有一些同学问到的问题啊,收集了一下额,第一个呢就是说实战部分能不能不学,直接学就业案例,就是说有同学就是说我觉得实战太简单了,我能不能学就业案例,额。

这个是可以的,如果你有基础的情况下,且你觉得讲的太简单的情况下,你可以直接跳过,这个是没有关系的,因为我们都有录播,第二个呢就是说实战的API,特别是我们上面所说的这些库的API。

我不记得是不是需要背下来,额这个不是的,你不需要背,你只需要在用到的时候能够找到就行了,第三个呢就是说实战的学习太枯燥怎么办,其实实在进入实战这个阶段,可能就大部分的情况下,都是一个写代码的过程啊。

那么写代码可能对于有同学来说,他可能是比较枯燥的,那么我建议大家还是要学会啊这个调试代码,如果你按照这个一部分一部分来调试代码,可能是呃啊啊,我觉得原理更枯燥啊,这个分人啊。

分人有的同学可能就比较喜欢这个公式推导啊,有的同学就比较喜欢公式推导对好,那么这是我们这一阶段要学到的问题啊,学学的内容啊,以及一些相关的一些点,我们在开始的一个嗯学习的过程之前呢。

我们会给大家讲清楚啊,这个好,那么我们就开始我们今天的一个学习啊,那么我们今天的一个学习呢,就是主要讲解这个机器学习的一个基本的流程。

那么我们这节课呢,我们会花这个呃一个多小时给大家讲,s kn这个库,以及用一些案例给大家讲解s kn嗯,他的一些具体的API的使用,首先呢我们看第一部分,就是s kn的一个建模的要点。

首先呢我们来看SKN的一个介绍啊,那么我们这个地方先把这个这个移开一点啊,那么SKN呢其实它是呃Python环境下的,非常强大的机器学习的库,它基本上能够解决所有的你能够看到的呃,机器学习的问题啊。

因为s kn里面包含了很多的一些,机器学习的呃,他的一些算法的实现,那么在SKN里面呢,这个图是s kn它啊官方的一个导图啊,就是说当我们遇到一个机器学习的,一个问题的情况下。

我们如何判断我们用什么样的算法,那么其实这个呢其实是一个比较好的一个,就是说呃分支脉络啊,或者说是一种思考模式,首先呢当我们拿到一个问题之后呢,我们首先可以看一下我们的一个问题,所拥有的样本的个数。

这个样本的个数是不是足够多,比如说他是足够,他的样本的个数是大于50的,50个的情况下对吧,如果是小于50的情况下,那么就说明这个数据集其实是太小了,我们不足以完成机器学习模型的训练。

如果是大于50的情况下呢,我们接下来看一看我们的一个标签的一个情况,我们标签到底是需要是不是需要额,就是说呃做一个具体的一个分类,那么如果是分类的情况下呢,我们可以进一步的划分把刀。

就是说你如果是分类的情况下,那么如果是有标签,有标签的情况下,那么就是分类任务,如果是没有标签的情况下,那么就是一个聚类任务对吧,把我们的一个样本把它聚到一个个的类别里面。

如果是我们想要完成的一个目标呢,它是不是一个分类任务,那么我们接下来可以把它划分成,我们具体是一个回归任务,以及到底是一或者是不是一个降维任务对吧,那么对于我们的有监督任务,就是我们的一个分类和回归。

这是主要的,那么我们再看其中其中一个分支啊,比如说对于回归呃,对于我们的分类来说,卡了吗,可以刷新一下啊,刷新一下,然后呢我们就看我们的一个分类的一个分支啊,就是说如果我们在看单独的一个分类的分支。

情况下,我们就看看我们如何判断,我们的一个具体使用哪一个算法,那么对于此种情况下呢,我们可以根据我们的样本的个数,就是如果我们的样本的个数足够多的情况下,我们用什么样的算法,如果我们的样本个数不足。

不是特别多的情况下,我们用什么算法,然后呢根据我们具体的一个样本,它到底是不是文本,我们可以根据嗯它进行进一步的划分,那么我们的一个就是说如果是按照这个卖的话,你可以看一看。

就是说基本上我们最终就可以映射到,或者找到我们具体用什么样的一个算法,所以说嗯上述这个PPT里面显示的所有的算法,在SKN里面都是有实现的啊,就是说分类,聚类回归以及降维在SK那里面都是有实现的。

那么sk learn呢,它全称sin keh learn啊,是这个Python环境下功能最强大的机器学习的库,它涵盖了机器学习的各方各面的,一个细节和实现,那么这个呢就是说它基本上是包括。

所有你能想到的机器学习的一些细节啊,而且呢它涵盖了大部分的机器学习的算法,以及提供了标准的实现流程,那么SCHN呢,它底层是以是用这个long派来实现的哦。

那么大家也知道long time底层是用这个嗯C加加,那C和C加加那一些,所以说它在效率上其实是有保证的,而且呢s kn它是提供了标准的API,文档以及学习路线啊,我们待会可以看一看s kn的一个文档。

其实写的非常清楚,那么如果我来推荐大家来学习,Python环境下的机器学习呢,我会推荐大家学习这几个库啊,就是pandas,Npis clearngbm,或者说叉t boos以及TENSORFLOW。

PYTORCH这些深度学习的库,那么这些库呢基本上是涵盖了Python环境下的一个,机器学习,深度学习的一些嗯,就是说技能啊,所以说大家也可以啊,就是说参考这些库来进行一个学习。

那么我们刚才所就是讲的SKN,它其实是非常强的,那么它如何强大呢,我们这个地方举举两个例子啊,首先呢SKN它提供了非常丰富的一个,机器学习的模块,我们举个例子就是数模型,那么我们从我们看这个代码啊。

from eclient import tree这个模块,然后呢我们假如说想要定义一个分类数,decision trick的class file,然后呢,我们的一个节点的分裂的一个准则。

是这个ENTROP,然后呢我们想要让我们的模型,就是说这个地方第一行是实例化,我们的一个输入模型,然后一行代码完成训练,fit这个地方T就是我们实例化的一个数模型,然后费城呢。

就是说给定我们的一个训练的一个数据,以及它对应的标签,构建一个我们的数模型,然后在我们的测试集上进行一个预打分,这个地方的一个点score呢,我们传入测试集的数据以及测试集的标签。

我们直接得出我们在测试集上啊,这个地方的score呢它默认是计算的准确率,就是我们的ACCURRENCY,然后呢假如说我们想要在我们的测试集,或者说在新的样本上面做一个预测,我们就是点predict。

点predict就行,当然我们假如说想要在我们的一个利用,我们的一个数模型,在我们的所有的样本,所有的数据集上完成一个交叉验证,那么我们直接调用这个cross validation score。

这个函数就可以完成这个交叉验证的一个步骤,那么大家可以看一下,就是说我们在SPN里面一个模型分为FEIT,就是训练,Score,就是打分,predict就是预测,那么在SQL里面呢。

其实它所有的一个机器学习的模型,都是包含这几个函数的啊,那么这个呢我们这个大家注意的一点啊,需要注意的一点就是说s kn里面的一个class,一个类,其实它是以大写的,它是大写的啊,adapt哦。

adapt classif它是大写的啊,大家看一下首字母大写的,那么这种首字母大写的情况下,它就它大家也知道这是这是一种命名规范对吧,那么在Python的,特别是在s kn这个库呢,它是用这样就是取名。

就告诉我们这是一个class,是个类类型,然后呢在SCN里面还有这种函数的,比如说我们这个地方第二行from s cln,对data AI import make classification。

那么这个make classification呢它是一个小写的,首字母小写的,那么它就是一个函数,所以说呢在SCN里面,你基本上是可以根据这个呃,就是说这个呃变量的一个命名命名啊。

就可以判断它到底是一个函数或是类,那么在SQL里面的每个函数和模型呢,他都写的非常清楚啊,比如说我们这个地方的一个呃,我们的一个adapt adapts classifier。

他的一个文字介绍它的调用方法,以及它的参考文献都写的非常清楚啊,我们可以切到他的一个参考额,就是它的一个文档啊,那么我们这个地方打开的呢,就是s kn的一个呃官网,Scikit learn,点ORG。

然后呢,假如说我们想要找里面的一个具体的算法,比如说我们想找里面的PCA,那么我们可以看一下他的PC,我们点开的是这个PC这个库啊,这个呃这个class,那么我们可以往下翻,在这个在这个下面。

由于它的一个具体的使用方法,我们想要它的保留的主成分是多少,以及我们具体的一个使用的函数,以及它的一个参考文献都是写的非常清楚的,所以说我们假如说想要使用这个库呢,其实是非常方便的对吧。

我们直接用s kn对吧,from s cn点这个降维的模块,Import pca,然后我们这个地方呢在进行实例化,PC的时候也是一样,首先把它实进行实例化,然后呢进行fit对吧。

大家也知道对于PCA来说呢,其实它本质也是一个呃,就是说它本质也是一个我们的一个呃,无监督学习模型对吧,它用来作为降维的,那么对于降维的模型呢,其实在SKN里面呢,它也是用费城来进行一个额。

就是说来进行个礼盒的,这个费城呢不仅仅是用就是说训练的意思,它也是一个礼盒的意思,有些没学的原理呃,原理不明白啊,呃其实是这样的啊,其实这样的大家可以先看一下,我们这个这个这个思维导图,大家发现就是说。

其实这里面的每一个机器学习算法,你其实可以把它划分,每个机器学习算法,我们就可以把它划分成分类回归降维聚类对吧,那么你把它划分成具体的用途的情况下,你先可以结合,就是先把它用起来。

然后再去看书也是可以的,就是说你可以先学习原理再去用,也可以先用再去看书,也都是可以的,这两者都是可以结合的,也并不是说额就是说要把它学懂了再去用这个,也就是说都是可以的,都是可以的。

我是比较建议是相辅相成的一种形式啊,相辅相成的一种形,然后这位同学说他推荐李航老师的书啊,都可以啊,你不管是看李航的统计学,统计学习方法,或者说是周志华老师的嗯,就是说机器学习都是可以的,都是可以的。

那么SKN呢,它为什么是Python环境下最通用的机器学习库呢,因为它包含了非常非常多的一些,不仅是包含了机器学习的一个原理啊,它包含了数据的预处理模型的选择,降维方法。

以及包含了我们常见的一些应用场景,的一些模型分类,回归聚类都是包含在里面的,所以说你假如说想要找,想要用这些具体的机器学习模型用起来,那么SK呢肯定是你最最就是第一选择啊。

比如说我们想要假如说用我们的一个,我们的一个随机森林对吧,Render,对吧,大家可以看一下random first classify,Random first regression,对吧。

一个是分类期,一个是回归期,对吧,假如说我们想要逻辑回归,对吧,Logistic regression,那就是green对吧,假如说我们想用其他的一些我们的领回归对吧,或者说其他的一些我们的一个呃。

分类器都是可以来嗯,就是说很快就能找到的,这个地方,我们直接是用这个浏浏览器的一个CTRL加F啊,然后搜关键字就可以搜到的,然后呢这个地方其实大家也可以看到啊,大部分的一个s kn其实他写的非常清楚。

我们还是用这个,Windofirst,大家可以看一下这个地方,叉叉CLASSIF,叉叉regression对吧,其实就写的很清楚,什么什么的分类器,什么什么的回归系呃,这个在哪看啊。

这个直接打开SKN的官网,我待会会把这个我看一下,这个发到群里啊,SKN的官网,你点开之后,然后点这个API,点这个API对吧,就可以找到这个具体的一个链接了,然后你就可以在这个链接里面搜。

你具体的想要的算法,想要的算法对,是不是很方便,比方假如说我们想用这个tree decision,tree decision哦,直接搜trap对吧,这个地方左边是这个模块啊,左边是这个目录的模块。

然后右边呢是他的DC线程train,勇哥说看SKN的中文手册更好,嗯这个地方呢我不是不是反感看中文手册啊,我绝对不是反感看中文手册,但是呢毕竟啊毕竟就是说英文它更新的更快啊。

呃中文手册大部分是国人自主翻译的啊,就是说难免在一些细节上有差有误差啊,你如果觉得看英文就是说有点困难的情况下,你可以去看中文的手册,但是我个人比较建议你去看嗯,哈英文官方的API嗯。

而且但是就是他的一些API,基本上没有用到很复杂的单词啊,而且SKN里面假如说你不懂他的一些具体的用,就是说他的一个就是一些常用的术语啊,你可以在这个这个s kn,它很方便的给了一个术语表。

比如说我们来看一看啊,他给了个数字表,比如说这个叫什么叫binary classification,Mute classification,Mutual classification,对吧。

以及什么是feat,这个在SKN他都给清楚了,这个术语表啊,都是基本上都是一些常见的单词,而且看了之后他的文档写得真是非常好啊,所以说嗯我是推荐大家如果有能力啊,以及想学好的同学。

那真的是想就是说非常建议学习一下好,那么这是我们的第一部分,就是SKN的一个介绍啊,初步介绍,然后呢我们再看一看s kn的一个建模技能啊。

就是它包含了什么样的功能,那么其实呢SK呢它包含了,基本上包含了额机器学习,他在运用到具体问题,就是解决具体问题的时候的各个步骤啊,它都包含了,比如说数据的预处理特征,编码特征,工程模型的训练与验证。

产能机器学习模型,模型的评价函数以及误差分析,这些呢这些模块在SC里面都包含了,所以说你假如说学习S可能基本上是一步到位,就是不需要关注,你可以不关注它的原理,你可以直接用SKN来完成所有的一个操作。

这个都没关系,这个都没关系,所以说大家就说如果有面试经验的话,你就会发现我在面面试的时候,面试官问我一大堆的问题,再具体就是说进入了这个岗位之后,其实发现就是用的这些库,这个是很正常的。

所以说现在一些机器学习算法工程师,都是本质都是在调库,其实本质也没有对这个算法有什么改进,这个这个本质就是这样的,但是为什么我们还是要学习这个原理呢,其实这个原理它能够帮助我们更好的用。

更更好的解决问题,以及更好的用这些库,对有同学问这个模型的对应的输出模型,对应的输入数据维度和输出数据维度,在哪可以看呢,我们待会会讲个例子啊,讲个例子你可以体体体会一下啊,待会我给你讲个例子。

可以体会一下,我们首先呢来看一看在SKN里面,它包含了数据的一个预处理啊,首先呢是这个标准化,大家也知道对于我们的一个呃,就是说一个数据而言呢,其实它很多情况都不是说,直接能送到我们的模型里面的。

我们在之前的原理的过程,讲解机器学习原理的过程中呢,我们老师可能会给大家讲到,我们的数据呢可能要做一个标准化对吧,嗯我们可能是需要用这个嗯减去它的方差啊,减去它的一个平均值,然后除以它的方差。

让他把把它变变成一个标准的一个形态,或者把它转成一个正态分布,那么在SKN里面呢,它还提供了其他的一些scanner,这个scanner呢你可以理解他就是一个标准化,不同的标准。

比如说你可以用这个MIUGINNER,那么这个mini next gner是什么原因呢,我们来看一看他的文档啊,其实都是非常简单的,我们来看搜一搜他的文档啊,我们搜这个min max好找到他的。

那么这个MMAX根呢,它它的编码方法,它的一个预处理方法是怎么样的呢,当我们输入X的时候,这个X呢它是一个,我们你可以理解它就是111列啊,一列活动,或者说你可以试他就是呃一个单独的一个特征。

那么这个单独的特征呢,我们先先看下它的分母,分母就是一个这单这一列的一个最大值,减去最小值,然后分子呢是这个单独一列减去它的最小值,那么这个呢相当于是我们把这一列用他的LINUX,当做它的命。

它的一个级差对吧,最大值减去最小值称为极差,当他的一个分母,然后呢把它做一个具体的一个转换,当成它的分子,这个呢就是说我们直接用一个MMAX,把它做一个转换对吧,然后呢我们把它转换之后呢。

还可以把它转换,当然也可以把它转成这个min max的啊,当然也可以把它转转换回去对吧,然后呢这个min max呢,它就是说额其实是使用到的,这一列的最大值和最小值来进行计算的,当然有一些其他的。

比如说我们用这个max abs,就是说next abs跟哪的,就是说我们这个特征呢,除以它的一个绝对最大值,绝对最大值对吧,那么就是说不同的一些我们的一个呃,就是说预处理方法呢都是可以的。

那么在excel里面呢,它其实一些一些函数啊,一些操作都是放在一起的,比如说我们刚才所讲的这些scanner呢,都是放在这个叫as s cl点propose嗯,prepose passion啊。

这个预处理这个模块里面啊,所以说我们其实可以很方便的可以找到啊,那么在SKN里面呢,它还提供了这个我们前面所讲到的呢,这个是基本上是这种常规的skin,当然还有一些其他的啊这个非线性的一些转换。

比如说把它做一个分位点的转换,或者说把它做一个嗯,就是说嗯指数变化都是可以的,那么我们在SKN里面呢,还可以把它就是说我们这一列呢,把利用这个预处理模块把它做一个额,就是说取他的一个L1或者L2。

你把它转成一个呃,就是unit norm,这个都是可以的,然后呢在SCN里面呢,它可以利用我们的这个IMPULT这个模块呢,完成这个缺失值填充对吧,我们的一些机器学习的算法呢,它是有很多的一些模型。

它是不支持额包含缺失值的一个数据的对吧,我们如果想用这些模型呢,我们可能要首先完成一个缺失值的填充,那么在SCN里面呢,是支持一些缺失值的填充的方法的,那么在之后的一些嗯实践过程中呢,我们也会给大家讲。

它包含了哪些缺失值填充方法,那么在S坑里面呢,它还包含了一些特征的一个预处理方法,比如说我们的一个特征的常见的编码,Neighbor encoder。

完后请encode以及我们的ordinary encoder,都是额这个常见的一些特征的编码的操作,都是在SK里面所包含的,那么我们给大家讲一个,就是说先举个例子啊,就是说我们特征编码到底在做什么。

那么我们假如说大家去应聘的情况下呢,其实呃很多的很多时候呢面试官都会问啊,这个我们给一个数据的情况下,你如何对这个数据集进行编码,或者说我给一个数据的数据集的情况下,你如何对这个数据集做一个特征工程。

这种呢其实是常见的一个呃面试的一个问题啊,这个是常见的面试问题,或者说对于一个字符串的一个字段,我们如何对它进行编码,那么这个这一类问题呢,其实就是一个特征工程的一部分,那么我们首先呢在这个地方呢。

大家首先要理解一个概念啊,或者说弄清楚一个呃两个名词,就是说数据挖掘和机器学习到底是什么,它们之间的区别是什么,那么我们如果大家现在学习机器学习,或者现在学习数据科学呢。

一般情况下都是直接学习机器学习是吧,直接学习机器学习算法,但是呢对于老师我啊,我是这个old school的这个程序员呢,我是在这个10年左右,就开始看一下这个机器学习的一个原理的书,然后呢在当时呢。

其实机器学习的一个它的一个名字啊,最开始它还有一些分支叫这个模式识别,不知道大家知不知道,那么其实在早期的时候呢,机器学习它是作为这个数据挖掘的一个子流程,他是他是作为数据挖掘X流程。

数据挖掘它是更加关注于全流程的数据采,从数据的采集,数据的一个编码,再到模型的构建,再到最终的一个模型的部署,所以说数据挖掘和机器学习,它的一个主要的区别就在于数据挖掘,它其实是更加关注于数据全流程的。

那么数机器学习呢更加关注于这个模型的构建,与它的优化好,那么我们讲了一大串这个数额,数据挖掘和机器学习的一个区别,我想表达的意思就是说,如果一个你想成为一个合格的算法工程师。

你就不仅仅是要弄懂这个机器学习的一个原理,和它的应用,你还要掌握我们如何把数据把它转换成模型,它需要的形式,比如说我们看一看啊,我们这个原始数据它是一种JSON格式的啊。

是类似于这个Python环境下的,Python语言里面的这个DK是格式,那么这个DK的格式呢,它其实是一种非规整的形式啊,假如说我们最外层的零是表示的是这个呃,一个样本的一个样本的id,然后呢。

原始的数据集里面还包含了一层这个house info,然后这house info里面有一些字段,Number rooms,Number bedrooms,以以及这个STRATEWAY。

相当于是这个街道的编码,以及这个lo basement rooms是个一好,那么接下来就是说,假如你遇到了这四呃四个特征,你怎么对我们这四个特征做一个编码呢,对吧。

其实这个呢并不是说是一个嗯机器学习的语,嗯模型的问题,但是呢其实是我们日常生活中,或者说在实战的过程中,经常会遇到这个问题,就是说我们拿到一个字段的情况下,我们如何对这个字段进行一个编码。

比如说我们对于数值字段,其实我们的现在的机器学习的模型,大部分都是直接可以识别,或者直接可以输入这个数字段对吧,那么我们对于数值字段我们可以不做任何处理,但是呢对于这个字符串字段,其实我们现在继续模型。

他是不能直接输入字符串的对吧,它本质还是完成这些计算,那么我们对于这个字符串我们怎么进行操作呢,我们可以做把它做一个编码,比如说我们用这个独热编码,独热编码呢就是one hot encoder。

one hot encoder呢,他的意思就是说,我们把它转成一个稀疏的一个向量,那么这个向量里面呢一就代表它对应的位置啊,就是说对应的取值零呢,就表明它就是说没有取值。

那么对于呃这个呃这个是shore bird一个呃位,然后呢对于这个嗯字符串进面板呢,它的一个操作就是说,我们首先统计一下这个stress name,就是所有样本的string name。

它总共的一个空间是多少,就是总共包含多少个独立的字符串,那么我们把它做一个one hot,就是说我们把它转成一个1×5的一个向量,在某一个位置它取值为一,其他的位置取值为零,就one o k。

One o k is hot,比如说one o k是编码的,然后其他的位置都是没有编码的好这是one hot,编码数值一般要标准化,标准化规律化吗,哦这个呢其实是这样的,对于不同的机器学习模型。

它的就是说是不一样的对吧,比如说对于线性模型,我们一般是要做这个预处理的,那么对于数模型其实我们可以不做是吧,那么对于不同的机器学习模型,我们是可以就是说区分对待的,那么在SKN里面呢。

它不仅仅是包含了这些,这些数据的一个预处理啊,它最最核心的就是说,它包含了很多的机器学习的模型,而且这些机器机器学习的模型呢,你可以在不不理解它原理,或者说不去弄懂,不去深究它原理的情况下。

就可以很方便地进行使用,在SK里面呢,其实他所有的机器学习的模型,模型都是有四个函数可以进行调用的啊,fit模型的训练,或者说模型的拟合,predict模型的预测。

predict pro这个probe呢就是probability模型,预测概率值啊,这个predict是直接是预测成标签,这个predict probability呢,是预测这个标签的一个概率值。

然后这个score呢默认是打分,做一个准确率打分对你可以就是记住啊,这个四个函数是可以记住的,就是所谓的GSKN里面的嗯,机器学习的模型都是支持,大部分都是支持这些四个函数的,而且呢SKN里面它支持了。

嗯老师,那有同学问老师,那一个优秀的算法工程师,的核心竞争力在哪些点上,这个其实蛮多的,就是说在知乎上也有蛮多讨论的啊,一个优秀优秀的算法工程师,他的核心竞竞争力,我个人认为在于能不能快速解决一个问题。

核心竞争力就是你能,就是说能不能快速解决一个问题,如果都是掉包的情况下,那就是谁看谁掉的快呢对吧,谁掉的快呢,就是说我现在你有这些库,我有这些库对吧,看谁用的更好,这个就是核心竞争力。

只能叫算法应用工程师,那你本质上就是这样的,你去不管你是本科还是硕士呃,或者是博士,你去嗯,互联网公司90%的岗位都是算法工,他所谓的算法工程师都是解决具体的问题,他没有开发算法。

他都是用算法去解决具体的问题,还是业务问题,额第一个是对于这个具体库的一个使用,就是说你能不能把它用的很熟练,第二个是对业务能力的一个掌握,熟练掌握程度啊,额一般情况下业务能力我觉得嗯不是制约。

就是说现在很多场景下嗯,就是说不管是互联网啊还是金融啊,很多场景下其实业务并不是很复杂,往往是这个具体的一个额建模的能力,可能是一个就是说能够考察大家的点吧,对就是说嗯是不是数据处理能力很重要。

嗯数据处理能力当然很重要,这个肯定很重要,就是说我举个例子啊,我举个例子,你如何用pandas,你如何用pandas完成一一千万行数据的一个呃,读取并完成它的一个特征工程,就是说你假如说你现在的一个。

你现在就是你的笔记本,你能不能完成这个操作,对,或者说你能不能用pandas完成,你想要提取的特征,比如说我们前面举个例子啊,这个举个很简单的例子,比如说现在你想要你用这个已有的库啊。

数据的预处数据预处理,这个数据处理的这个pas的库,你假如说你想要统计number rooms,Along number bad rooms,它整体两列的一个相关性。

或者整体它两列构造出一些新的特征对吧,其实这个呢就是很基础的,你要把这个数据处理的一些库给他掌握好,当然我这个地方是只举了一个很简单的例子啊,这个数据处理里面还包括这个数据的一个清洗,数据分析对吧。

以及数据的预处理都是很多的,然后呢我们就回到我们PPT啊,大家如果还想就是说提问的情况下呢,也可以继续提问啊,对然后呢在SKN里面呢,它其实是支持的,它支持的一些机器学习模型呢都是比较基础的。

都是比较基础的,但是是一般情况下,都是在涵盖了我们现在所有的机器学习的教材,里面的啊,比如这个线性模型,数模型以及神经网络以及无监督学习模型,在SKN里面都是有具体的一个实现,但是需要注意的是。

就是说SSKN呢,它是不包含这些高阶的一些数模型的,实现比如说呃这个呃charge boost,Nice,Gbm,Catch boost,这些呢都是在s kt里面,它是没有具体的实现的。

那么SKN的一个神经网络呢,在SKN里面它也有全连接网络的实现,在SKN里的全连接网络呢,它是实现了这种CPU环境下的全新用全连接网络,它是没有实现GPU环境下的一个全球网络,对好。

然后就是说这个SK呢,它是基本上涵盖了基础的一些,机器学习的模型嗯,呃有同学问,用大量的数据和小量的数据,在使用pandas的方法上一样,在性能和机器要求上有哪些注意的点呢,这个就细节蛮多的。

就是说我们在使用pandas的时候呢,首先有哪些点你需要注意的,第一个是数据的类型,就是你读取数据集的时候,数据的类型你需要注意,其次是数据的一个处理,就你具体的处理函数。

就是说是不是嗯就是说能不能进行矢量化加速,这个呢都是非常非常关键的,有些pandas的函数它是是串行执行的,但是有一些函数它是其实是可以把它转成number派,这种矢量化执行的,对都是有很多细节啊。

这个细节都蛮多的,比如说在pandas里面的apply对吧,其实他都是哦,就是说在速度上可以做蛮多的一个加速,能不能讲讲这方面的一个实力啊,可以呀,呃我们我们下节课吧,下节课我找找找几个例子吧。

因为这节课我没准备对下节课啊,下节课,那么在SKN里面呢,它还支持了这种数据的一个,我们的一个评价函数啊,就是评价指标以及误差分析,它不仅仅包含了这种回归的分类的啊。

无监督学习的以及一些排序等等问题的一些,就是说评价函数在SKN里面都有包含的,一些实现,所以说你假如说想要计算这个UC呀,要计算这个logo loss啊,其实直接用SKN就行了。

好那么前面呢我们就用这个在第二部分呢,我们就讲解了这个s kn它具体的一些呃,就是说他的一些包含的一些模块对吧,那么我们接下来就看一看,s kn如何用它的一个额,就完成一个具体的一个建模。

首先呢我们来讲一讲在这个地方,可能在之前的课程可能已经有讲过啊,就是说哎我们的数据划分方法,那么在我们讲具体的一个嗯实践的过程中呢,其实数据划分方法呢是非常重要的,数据划分其实它非常非常重要。

就是说首先呢我们在遇到一个问题的时候,我们首先要确定这个问题的到底是什么对吧,我们这个问题到底,我们前面这个PPT所讲到的问题到底是回归啊,分类啊,还是聚类还是降维,确定的问题是什么。

之后接下来我们要确定什么,我们就要确定我们数据的一个具体使用的算法,对吧,我们到底是用线性模型还是数模型,还是等等其他的模型,然后第三步呢,我们就要确定我们的数据划分方法。

这个呢就是要确定我们具体要使用的训练集,以及我们的验证集,以及我们的测试集到底是由什么组成的,这个其实非常重要的,那么在很多情况下,其实我们的一个数据对于我们的数据集而言啊。

我们的训练集以及测试集都是给给定的对吧,很多情况下我们的训练集和测试集是给定的,我们很多情况下呢,我们的一个呃就是说验证集它有可能没有给定,验证集没有给定,那么我们验证集我们如何进行划分呢。

这个可能大家如果知道的啊,你可以就是说我们稍微讲快一点,如果不知道呢,大家这一点其实非常重要的,有三种数据划分方法,就是三种验证级划分方法,第一个是流出法,就说我们直接按照比例原始的训练集。

我们把它按照比例划分成训练的部分,以及我们的一个验证部分,第二种,第二种方法方法呢我们叫这个cross validation,交叉验证,cross validation呢。

我们就是说把我们的数据集划分成N份啊,这个地方挡住了啊,应该是啊K分啊,K分或者N份,然后呢对于K分的,或者说把它划分成K分的情况下呢,我们对于每份这个嗯这一份啊,这个一般情况下。

KK呢它是小于我们的样本的数量的,所以说我们每一份其实它包含了嗯,可能包含几十个几百个我们的样本,那么在每次训练过程中呢,我们会随机啊,就是说循环选择一份做我们的验证集,比如说在第二次我们训练的时候呢。

我们用第二份做我们验证集,第在第三次训练的时候,我们用第三份做我们的验证机,这是K折交叉验证,那么K折交叉验证,其实它和流出法其实是很类似,在每次训练的过程中呢,其实它就是单单次的训练过程中。

其实就是一种流出法,只不过呢K折交叉验证它的一个数据集,它每份在不同的部分充当了验证集对吧,还有一种方法就是我们的采样法对吧,自主采样不是STP,那么他是从我们的原始的数据集里面,做一个有放回的采样。

得到我们的训练部分,以及我们的一个验证部分好,那么我们的数据这是数据数据集的划分方法,就是说怎么划分得到数据训练集以及验证集啊,那么主我们在具体的实践过程中呢,主要是用我们的流出法和K值交叉验证。

两种比较多啊,K折叠乘验证它的优点,就是说是能够训练得到K个模型,而且这K个模型在一定程度上是,拥有一定的多样性嗯因为他的一个数据集,参与训练的数据集是不一样的,那么K值这交叉验证它的缺点。

就是说它的复杂度是稍微高一点的,需要训练K个模型,那么如果数据量比较大的情况下,如果我们拥有的数据量比较大的情况下,我们可以直接用这个流除法,如果你想要追求精度的情况下,你可以用K折交叉验证啊。

如果我们的数据集比较小的情况下,你可以用这个嗯,不是strap采样的方法好,那么我们刚才所讲的呢是我们化数据化的方法,第三个呢就是说额这个还有一个呢,就是说我们的数据的一个具体的应用流程啊。

这个呢就是说我们在具体的使用到一个,用使用一个模型来进行建模的过程中,我们怎么知道,或者说怎么根据我们模型的一个阶段去进行,就是说下一步的操作呢,这个其实也有一定的一个实践流程的。

这个思维导图呢是温达在neo lips上面的,一个就是问答,它原始的一个PPT上面的啊,我截取的,那么我们在应用机器学习的算法的时候时候呢,首先呢其实是有一定的具体的流程的。

我们首先呢看一看我们的一个训模型的,训练集的一个误差是不是比较高,如果我们的模型在训练集的误差,就比较高的情况下,那么说明此种情况下,我们的一个模型的一个误差,是由我们的一个偏差所占据。

那么我们可以要做的呢,可能就是说用更大的模型训练更长的时间,以及用其他更好的一个模型的网络结构,去获得比较好的一个训练的精度,如果我们的训练集的一个误差,就是说他已经比较低了。

但是呢我们的验证集这个train d EV呢,就是说我们是从训练集里面划分得到了验证集,它的一个误差比较高,那么此种情况下,那就是说明你训练集误差低了,但是呢在验证机的误差比较高。

那么说明你的一个模型是过拟合了对吧,那么你说明你此时的一个模型的一个误差呢,是由这个方差所占据,那么你可以考虑加入一些正则化方法,或者说用更多的一个数据参与我们的一个训练。

如果我们的模型训练集的误差比较低,验证机的误差也很低,然后在我们的DVL,这个DEVL是我们的公开测试机啊,就是说你可见可见的测试机,可见的测试机它的误差很高,那么就说明这种情况下。

就说明你的一个验验证集和测试集啊,这个验证机这个DEVL啊,这个DEV是可见的一个测试集啊,这两部分的一个数据集它是分布不一致的,说明你的train test data是mismatch。

就是它是不匹配的,那么在此种情况下,我们在划分验证集的时候呢,你尽可能把我们验证集的一个数据分布呢,让他去和我们的最终的测试集更加匹配,那么如果我们的模型训练集的误差很低,验证机的误差也很低。

以及我们的公开测试集的误差很低,但是呢最终假如说我们模型上线以后,你的具体的上限,上线的一个最终的实践的过程中,你的一个误差很高,那么这也是有可能的,就说明你的一个公开的一个测试集,其实你也过拟合了。

那么有很多同学就是说不理解这一点,就是说我们为什么还能过礼盒验证机,为什么还能过拟合测试集,其实我们的机器学习模型,其实你只要有这种打分反馈的一个情况啊,你就有这种调参的这种就是说要机会。

那么只要有调仓的机会,那么你就有过拟合这个数据集的一个可能性,所以说我们为什么会用这个,未未知的一个样本来预测,或者说用为为什么用这个未知的样本来验证,我们模型的精度呢,就是有这种一种考量啊。

所以说大家在具体应用到一个,具体问题的时候呢,我们就是可以用这个思维导图来进行一个啊,具体的一步一步来进行一个实践,那么我们在具体的一个,具体的一个应用的过程中呢,其实我们怎么能完成建模呢。

首先呢把我们的数据集划分成训练的部分,以及测试的部分,然后确定好我们的模型,然后呢,我们首先呢需要对我们的数据集,进行一个预处理,而且需要对我们特征进行一个转换,然后对我们的一个模型进行训练。

以及模型进行选择,然后我们模型训练完成之后呢,然后对对我们的模型的一个预测结果,进行一个后处理,然后最终最终得到我们的结果,然后呢,这个地方我们的一个机器学习的一个框架呢,它我们这个地方的思维导图。

它是涵盖了数据的预处理以及特征的一个编码,而且呢它还包括了这个模型的选择,以及模型的调参,那么其实呢这整个的这个步骤啊,其实这是我们机器学习,它具体应用到具体问题的时候,我们要做的。

那么其实这整个步骤呢,我们可以用一个工具叫autumn mon,就是自动机器学习的这个呃工具来完成,那么AUTOML呢其实大家如果有知道的话,其实AUTOMA这种自动机器学习呢。

其实在一定领域它是能够代替算法工程师的,在一定领域能够代替三种工程师,但是呢在很多情况下都是呃,还是不能完全代替啊,它只能在一领域能够代替,因为这个AUTOMI的一个嗯学习呢,其实它也是一种算法。

它也是在特定的领域领域才是有作用的,好那么这是我们第三部分,就是SKN的一个建模流程,我们其实也是以这个机器学习算法的一个,建模流程来给大家讲的,就是说我们模型的数据划分怎么样的,我们的一个误差。

在判定我们的误差的情况下,我们如何完成下一步,以及我们的机器学习的算法的流程是怎么样的。

好,那么我们接下来呢,就用一些具体的代码来进行实践吧,对吧好,勇哥同学说现在奥特曼家用的多吗,是不是还得学奥特梅尔额,其实是这样的呃,AUTUMON在特定的特定的领域用到的比较多。

就是特定的领域是比较多的,NAS是什么,n a as是这个NAS是一个呃网神经网,深度学习的网络结构的搜索方法,NAS啊,是深度学习里面的一个网络模型,结构的搜索方法,DEV啊。

这个地方的DEV是对应于可见的测试集,对可见的测试集,然后这个test呢是这个未见的未知的啊,或者说未来的一个测试集,或者说是线上的测试集,那么大家如果额自己学习SKN呢。

一方面是可以从我们的一个官网来进行学习,这个官网其实他给定了很多例子啊,打开这个SPN的官网之后呢,其实是在上面有一个叫example,这个页面呢,其实它下面就包含了很多的例子啊,比如说我们来看一看啊。

在S看的里面,对吧,我们用SKLN能不能完成这个聚类呢,当然可以呀对吧,这个地方他是用SKN完成嗯,他是用SQL里面的key means呃,以及呃我们的beat kings。

以及呃PC之后的KMEANS来完成一个聚类,然后他也会把这个聚类的结果,给他做一个可视化,对所以说SKN呢你能够想到的一些操作啊,他都是能够就是说完成的啊,在这个呃example这个页面呢。

是包含了很多的一些具体的案例的,你也可以如果感兴趣的同学,也可以就是说分步骤来进行学习,好那么一嗯,第一种方法呢就是说根据SKN的官网,以及他的一个具体的一个例子案例来进行学习。

第二个呢就是说你可以从这个嗯。

嗯我们这个地方呢我会给大家以一本书,叫s clan的一个嗯s kn的一个kid book啊,这个书呢也是蛮也是英文的。

但是并不是很复杂,这个书呢就是讲解了SK的一些具体的一些模。

型的一些一些使用方法,嗯这本书我也看过,这也是非常非常嗯就是说比较实操的,而且也比较基础。

如果感兴趣的同学呢,也可以就是说根据这个书来进行学习,好,我们接下来呢就看一看SKN的一些,具体的一些呃,就是说一些使用案例啊,一些使用案例,我把我的这个notebook给大家打开。

然后呢我在写这个代码的时候呢,我基本上也是用SKN的一个这个JUPITER,JUPLAB啊,然后大家如果是用汽车在线的一个云平台,其实本质上和这个我们这个网页是一样的啊,网也是一样的好。

那么我们就来看一看具体的代码吧,那么我们就看第一个例子啊,然后我们就休息一下啊,那么我们首先呢来一步一分,一步一步来给我们讲代码对吧,首先呢from excent import labors。

以及data sense,以及proper proping这个三个模块,neighbors呢,它主要是包含了我们的一个,就是说KN的一些计算,KN模型,或者说最近邻模型。

然后这个DATASET呢是完成了数据集的读取,然后proposal呢是这个是这个我们的数据,预处理预处理,然后这个地方model selection呢是我们的数据划分方法。

以及我们的交叉验证的一些模块啊,在这个model selection里面,然后呢这个SKN里面呢还有这种matrix啊,这个我们刚才所讲的这些评价指标,我们翻译一下啊。

在API文档里面有这个matrix,matrix对吧,我们的一个AOC啊,我们的准确率啊,以及我们的F1score,在这个matrix模块里面都有实现好,那么我们接下来看一看这个代码啊。

我们首先呢从DATASET里面node i r s,这是一个我们test conn里面,它包嗯就是说自带的一个训练数据集啊,自带的啊,然后呢我们读取完成之后呢,我们就读取它的一个训练的部分。

以及它的一个标签,然后接下来呢,我们就用我们的一个给定的数据集呢,把它做一个训练的部分和验证的部分的,做一个划分,这个地方我们的train test split,本质就是一个hold out的这种划分。

Hold out,流出法啊,流出法,这个地方我们的train test split,它是有一个默认的,我们的一个验证集的划分比例,这个地方大家可以看一下文档,这个地方它的划分比例是多少呢。

它的划分比例是我们的一个0。25,就是说25%的一个数据集呢,我们划会划分到我们的一个test test set,这个地方我们就把它充当成我们的测试集,然后呢,我们如果想要对我们的数据集做一个预处理呢。

我们就是从PROPING里面调用这个scanner对吧,比如说我们这个地方调用我们的一个嗯,Standard scanner,然后做一个feature好,然后呢我们假如说啊。

这个地方我们首先呢看一看这个stand standard skinner,这个地方的fit用来做什么,有同学问到这个润润动stage,它是用来做什么的啊,我们待会给来可以给大家讲啊,嗯那么需要注意的是。

就是说这个地方给大家写一下,大家记住这样一句话,就是说SKN里面的,所有的机器学习模型,它的模型啊,所有的模型加上一些预处理,都是支持这种状态的,那么有同学他可能不知不理解这是什么,是状态。

那么这个状态呢比如说我们举个例子,假如说这个地方我们用这个min max scanner,Min max scanner,他是要计算它在计算的过程中,是需要得到需要通过这一列的一个最大值。

最小值完成一个处理的,所以说在这个feature的这一步呢,其实它会计算这个SKINNER要用到的,比如说在standard skinner的过程中,它会用到什么,这个standard scanner。

它会需要用到我们这一列的一个均值,和这一列的一个方差来完成一个转换,那么有同学可能还不理解啊,我这样跟你说啊,在feature的这一步会计算均值和方差,那么在这个transform这一个这个步骤。

我们这地方的SKINNER他是从STARDSKINNER做一个feature,得到一个他的一个具体的实例化的一个对象,然后这个对象呢直接做一个分transform,这个transform呢。

它会以我们上面所计算得到的一个均值和方差,对我们的数据集做一个转换,那么这个地方我们transform呢,它是直接做一个转换,它是没有再做feature的,这个地方我们一定要注意。

就是说这个fit呢它是保存了这个状态的,保存状态的,那么如果是直接对我们的训练集和测试集,同时把它做transform,那么就会保证就会可以保证我们的一个训练集,测试集,它的具体的预处率。

它的标准是一样的是吧好,然后这个地方其实也跟我们前面所讲到,这个在excel里面所有的大写的啊,这种首字母大写的其实都是这种class class呢,它是支持需要实例化再进行使用的。

然后呢我们接下来定义一个kn的一个模型,K neighbors classifier,然后呢我们最近的一个样本我们用来做判别呢,我们是三个样本,然后我们就kn做feature。

用对我们的训练集做一个feature,然后对我们的一个测试集做一个predict,然后我们就用我们的准确率,Accurrency score,我们从matrix里面import的做一个打分。

然后我们的计算得到的准确率是8%,19好,然后我再回答这个同学的问题啊,Random stage,你假如说你想要看它的一个具体的一个含义,对吧,很简单,我们看他的一个,但它的一个文档类型呢。

windows stage其实就是一个呃seed,这个windows seed呢,就是说我们在做做数据集划分的时候啊,其实它是一种随机打散的划分,它是随机划分的啊,它不是啊。

就是说我们这个hold out这种划分方法,它是一种随机划分的,也就是说他其实是随机挑选,挑选了一定的比例充当我们的训练集,随机挑选的一定比例,当做我们的一个验证机,那么这个就有一定的随机性。

那么我们如何固定住这个随机性呢,我们就设置这个random stage,Real stage,对它可以用来控制我们的一个这个可复现性,就是说当我们设置成real stage情况下。

我们的数据集的划分方法就固定了,好我们稍微休息5分钟啊,稍微休息5分钟,我们继续好吧,对大家,对我们刚才所讲的这些内容有什么问题吗,以及觉,你就是说大家觉得我们这个讲课的一个节奏,是不是啊有改进的方向。

或者说有一些不舒服的点,呃,这个,呃satisfied对吧,这个含义是什么啊,这个含义其实嗯非常非常好的一个问题啊,我们待会会讲啊,待会会讲他是什么样的一个额,就是说含义啊,我们待会会讲的。

对我们先休息一下啊,先休息一下好额,那么我们回来啊,大家对我们刚才所讲的这个内容OK吗,OK的同学扣个一,我看一下啊,OK的同学扣个一,我看一下,或者说有什么问题也可以直接提出来啊。

好额只有两位同学扣一啊,那么我希望其他同学也能够完全掌握啊,我就默认其他同学没有问题啊,好,那么你这个地方我们刚才有同学问我们的train,Test split,这个呃satisfy这个是什么含义啊。

这个呢就是说我们看他的一个解释啊,If if not none,就是说这个参数如果它is not known,就是说他设置的情况下。

Data is subsplit in satisfied fishing,Use use this as the class label,好,那么我们可以演示一下这个到底是什么意思啊。

我们可以构造一份数据集,我们的Y呢,我们的X就是哦放大一点啊,嗯我可以先把这个运行一下啊,免得我没有long派啊,这个long派没导入是吧,input是浪派,H m p。

然后呢我创建一个训练集P点zeros,然后呢我们创建一个20行四列的一个X啊,20行四列的X,然后呢我们的Y我创建它是1234,一乘以额四五是吧,四五那就是5+2乘以5+3乘以,五加上,4×5。

我们在这个地方呢,我们创建了这个我们的数据集和我们的标签,我们的Y呢我可以给他打印一下啊,他是这样的啊,121这个地方呃,四个五个,一五个,二五个,355个,四五个,四对吧,那么也是20个。

那么我们也是用这个train test splish now,然后对我们的数据集进行划分啊,我们来看一看啊,我们这个地方我们把windows stage把它去掉啊,这个无所谓的。

我们也是传入我们的X和Y,然后我们可以把我们的一个训练集,它的一个标签,和我们的一个验证集测试集的标签给打印一下,大家就看出来,大家可以看一下我们的验证集的标签,它是23221,为什么呢。

因为这个地方他其实是随机,从我们原始的一个数据集里面进行采样得到的,它并不是说是一个规制,或者说标按照比例进行采样的对吧,每次采样都是非标准的,那么如果我们用这个函参数啊,如果我们用这个地方的一个参数。

我们来进行设置,那么就这个这种情况下啊,我们再设置一下我们的一个n split,对吧,假如说我们这个地方我们没有加这个额参数啊,它其实得到的验证机,它的比例并不是说是一比一比一比一的。

那么如果我们加了这个参数的情况下,我们得到的一个验证集的比例就是一比一比一,这个参数就是说你在进行划分,我们的一个验证集的时候呢,尽可能的把我们的验就是说你划分得到数据集,保留原始的类别的比例。

就是这个作用就是这个作用,那么这个作用这个参数呢,其实也是蛮有蛮有用的,就是它是Y需要有排序吗,不需要这个地方,这个地方的Y他不是说从Y的排序得到,他其实是随机。

先随机挑选一些我们的样本的一个index,然后再从这个次序得到它对应的一个Y对好,这个理解了吧,好然后我们就继续啊,然后呢我们的SKN呢,他其实能够做很多的一些操作啊。

比如说数据的预处理域特征的编码模型,训练验证场景,机器学习模型都是可以做的,那么比如说我们在这个嗯SPN里面啊,比如说我们假如NOSKN里面的progress,这个模块。

假如说我们在导入我们的一个额一个error,这个导入一个三行三列的一个嗯,嗯矩阵的情况下呢,我们假如说直接用for personal scale这个函数,那么这个地方哎大家可以看一下。

我们这个地方其实是直接用的一个函数,对它进行一个处理,那么我们处理之后的这个矩阵呢,其实他长得这样的啊,可能你觉得他平白无奇,但是呢你假如说直接求这个矩阵的一个均值,和它的方差。

你会发现他都帮我们处理好了对吧,均值为零,方差为一,那么其实我们这个呃proposal their skin呢,它其实这个函数本质就是我们这个standard scanner,这个具体的一个实现。

不信我们来看一看嗯,我们定义一个progression,点SKINNER,Scanner,点feature,然后对我们的这个把实例化的这个嗯,对象呢把它对我们的这个矩阵呢,做一个转化成form。

然后就可以看到其实它是可以直接转换的,结果是一样的,然后呢,其实这个地方我们如果用这个class大写的class,Status scanner,它是能够记住下我们这个地方。

你x train里面的一个均值和方差,然后接下来,假如说你直接对我们的一个新的数据集,做一个transform呢,我们就用我们之前记录下的均值和方差,做一个处理就行了。

好那么我们这个MMAX其实也是一样的,那么在这个地方呢,我们也是定义一个我们的一个矩阵,然后呢我们用in max,那么这个地方其实我们的min max呢,或者说所有的skin呢。

它可以这个地方我们是上面这个例子,是feature和transform分开做的,当然我们也可以把feature和transform同时做,比如说我们把feature下划线transform。

也就是说我们用这个数据集,同时把它计算它的一个最大值和最小值,以及我们想要的参数,以及同时把我们的数据集做一个转换,那么这个地方需要注意的一点,就是说。

不管你是用feature transform还是废纸纯子,不管你是把feature transform分开做,还是把它一起做一,非常非常注意的一点,就是说你一定要保证只能FEH一次,只能保证废止一次好。

还有一个呢,就是说如果我们在训练,训练好这个CISCANNER之后呢,接下来做一个转换的情况下,其实我们传入要需要传入跟他原始维度一样的,比如我们这个地方我们定义的是一个3×3的。

那么你假如说做一个转换呢,其实你要传一个跟他样本维度一样的,才符合他的一个转换,当然还有这种命嗯,就是max abs的一个,为什么只能feature一次,我这个地方给大家举个例子啊。

为什么只能feature一次,假如说我这行这个地方有两行代码,第一行代码是对我们训练集的数据,用这个这个代码完成一个转换,第二行是对我们的测试机代码做一个转化,那么就会出现一个问题,什么问题。

标准不统一啊,标准不统一,你能get到吗,因为你在这个地方,你在做第一行代码转换的时候,你的最大值最小值是虚拟机的最大值最小值,第二个转换的时候,你用测试题的最大最小值来进行一个转转换。

你就表它的一个标准就不统一了,所以说这个fit它是记录下这个标准,然后transform呢就是用这个标准做一个转换,所以说你在任何情况下只能fit一次,这样这样能理解吗,这样能理解吗,对。

所以说你不能是各自用各自的标准啊对吧,那你在用这个来完成我们的模型的训练时候,就肯定会出现问题对吧,可能出现的问题好,那么这个max abs呢其实操作也是一样的啊,操作也是一样的好。

然后呢还有这种其他的robots skinner,这个robot skin呢它是主要啊对于这种异常值啊,可能更加鲁棒啊,这种转换,然后还有这种我们的一个额就是分箱的这种。

就是说分位点的transformer啊,这种转换呢其实也是非常方便的,还有就是我们的一个呃就是说非线性的转换,比如说power transformer都是可以进行转换的。

然后呢在S坑里面呢它是很很方便的,可以把就是说把它做一个L2的一个LM,这个大家在我们的机器学习的原理里面,已经学过对吧,Ai long,它把它把我们的每一行把它转成这种嗯unit农。

然后呢对于我们的数据集,假如说我们它是有缺失值的填空情况下,我们直接是可以用这个缺失值来做一个填充的,那么这个缺失值呢我们如果在SK里面呢,我们是直接从这个impulse这个模块呢可以玩。

就是导入我们的缺失值的填充方法,比如说我们在做一个缺失值填充的时候呢,我们可以用这个这一列的一个平均值,做一个缺失值填充,这一列,这个平均值对于趋势值进度怎么怎么说呢,我们来看一看。

首先呢我们传入这个三行两列的一个数据,三行两列的一个数据,我们包含那个数据是一二缺失值37676,那么我们在做一个缺失值填充的时候呢,其实我们可以看一下啊,我们首先呢完成一个FEIT。

然后接下来作为作为我们一个额,就是一个transform,那么我们可以看一下,在我们原始数据集做废纸的时候,这第一列的一个平均值是1+7除以二等于四,第二列的一个趋势,第二列的平均值是2+3加六。

再除以一个三,等于我们的一个哦,2+2加2+3加六啊,这个是11对吧,11÷3是呃,就是说3。6对吧,3。6,然后呢,我们接下来对我们的数据做一个转换的时候,他是直接用这个平均值,第一个是平均值。

第一列的平均值四,第二类平均值是这个11/3,做个填充即可,当然我们这个缺失值填充,它不仅仅是可以对于数值的列,做一个缺失值填充,也可以支持对于我们的一个嗯,就是说啊类比的例做一个趋势填充,举个例子啊。

我们这个地方呢我们的这这个数据集呢,其实你可以用这个long派进行表示,也可以用这个data frame,其实本质是一样的,我们这个地方呢有两列,第一列呢是这个也是类别类型的A缺失值AB。

第二列XY确实值Y,然后然后呢我们可以用这个most frequency,就是说出现次数,这一列出现次数最多的一个取值,做一个取值值填充,比如说第一列出现次数最多的是这个A。

impulge feet里面的参数可以解释一下吗,哪一行吗,是这一行吗,我们这一行吗,我这一行我说了啊,是这个任务,这个most most frequency,就是说用出现次数最多的这个取值来做填充。

对,上面这个这个不就是一个嵌一个,一个就是说嵌套的历史吗,这个不就是嵌套的list吗,嗯需要解释吗,第一个这个就是一个list,这是一个元素啊,这是一个样本啊,一二确实值376,就是三行三行两列的啊。

我们如果把它写开,是这样的,我写开你就知道了,就是这样,三行两列对吧,三行两列,第一列我们用第一列算他的一个平均值,1+7啊,缺失值我们不算1+7除以二,然后2+3加六,对你可以理解它就是一个小数据集。

对我们三行两列,三行两列可以理解吧,嗯好,那我们继继续啊,那么这个地方呢我们就设置它的一个填充方法,是用这个most most frequency,然后就是这一列出现次数最多的一个取值。

这一列出现次次数最多的一个取值,当然我们也可以用这个KNN的一个填充方法,就是说我们找他最近邻的样本来做一个填充,那么这个呢我们再来看一看啊,这个填充方法啊,我们用这个嗯最近邻的样本呢。

我们算它是两个最近邻两个样本,然后呢,我们这个地方呢其实再做一个嗯,最近邻的一个计算呢,它其实呃会抛弃这个,就是说他会在计算我们缺失值的时候呢,这个是一个样本,这是一个样本,这是一个样。

这个样本四行三列,四行三列,然后他在计算这个最近邻样本的时候呢,其实我们第一个样本,它最近邻的其实是我们这个呃,呃这个第二行和第三行,第二行和第三行,然后他就用第二行,第三行对应的列做一个平均值。

得到我们的这个缺失值,然后我们对于这个样本呢,它最近最近您的两个样本,是我们的第二行和第四行,然后我们第二行,第四行的一个第一列的一个平均值,做我们的一个我们的这个缺失值一个一个填充,那么这个KN呢。

一个填充呢其实是找最近的样本,它和上面的一些填充方法其实是不一样的对吧,他其实是有这种用其他行其他列的一个计算,找到最均匀的样本,然后再去填充对应的一个额,就是说列。

然后上面的方法其实是直接做一个简单的填充,所以说上面的填充方法呢叫这个simple impputer,下面的呢叫这个KNINPUTER,所以说他的一个实现的逻辑是不一样的,然后呢我们再做一个具体的额。

接下来呢就讲我们的在kn里面,其实他是支持这种我们的一个呃,数据的一个转换的啊,数据的转换的,比如说我们首先呢来看我看一下我们的这个呃,额这个我们的一个嗯ordinary encoder。

alerary encoder呢,其实它本质在做一个编码的时候呢,其实是额对于我们这这整个额怎么说呢,这整个我们的一个额一一行,就是说他元素做一个编码,比如说这个地方我们有这个嗯,应该是2×3的一个额。

就是说两行三列的对吧,然后呢我们会把这个from第一行,假如他属于第一行,那么就是说这一列他的第一个取值,那么我们会把它编码成一,如果他是在我们这一列的第二个区域,那么我会要把它编码成零。

这是直接是整体的一个feature啊,就是他是同时feature多列的,那么如果我们想要对我们的这一列做一个one,hoing code呢,那么就稍微更加复杂一些。

我们这一列这一列male female,它是有两个取值的,有两个取值,那么我们在做一个one hot的时候呢,其实是会把它转成一个一零和零一,这两两种情况。

那么这个from u s s和from europe其实也是一样的,它是有两个取值,那么我们也是会把它转成这种零一和一零呢,这两种情况,然后有同学就说老师你这个不是多此一举吗,然后我可以举个例子啊。

就是说其实我们这个例子他举的是这种binary的,这种就是说出现次数是这种二元的情况,你假如说我们出现次数是这种多元的情况,比如说from china,你再看一看他做一个转换的时候。

他就是from us s from europe from china,这个地方啊,我再复制一行啊,这个地方再多复制一行,你可以看一下001010100,他就完火结合这个binary encoder。

就是这种二元的这种布尔型呢,其实还是有点差距啊,大家可以体会一下好,还有这种多样式的编码,多项式的呢,其实呃这个编码可能,ordinary encoder和label encoder有什么区别啊。

这是一个非常好的问题,说明这个同学在对SKN,有一定有一定的一个理解啊,一定能理解这两个在功能上其实没什么区别,但是在就是说在具体实现上是没什么区别,但是在使用上其实是有一定的区别的。

Label encoder,你可以看它的一个原始的一个叫法叫label,label是什么,Label encoder,它就是对我们的一个标签标签做一个encoder。

所以说一般情况下label encoder它只支持单列的,那么ordinary encode它是支持多列的,主要是这个区别对嗯,在我们具体使用下,就是说这两者其实是可以混用的。

对就是说功能实现其实没什么区别,对,然后呢还有这种我们的多,在我们的预处理里面呢,还有这种多项式的编码,多项式的编码呢,就是说我们可以看一看他的文档啊,多项式的编码,比如说我们传入AB的情况下。

我们可以得到多得到什么1ABA的平方,AB以及B的平方,这个呢就是说我们一个我们可以传入这个,多项式以及它的degree,就是它的具具体的多项式的一个就是几阶,对吧几阶,然后呢。

我们就可以就是说根据这几阶的一个组合,得到的新的特征,比如说我们传入的是零一这个2345,这个地方是我们的一个呃三行两列啊,三个样本两列,然后默我们完成的是什么,1AB以及我们的AB啊,以及我们的A方。

我们的一个AB以及B方对吧,这个地方我写一下啊,1a b,A方以及我们的B方以及AB,这是说我们这几列分别对应的我们的这个哦,我们的一个取值对吧,这个其实是从我们的两列构造,得到了多列的一个特征。

当然这个多项式啊其实这个用到的比较少,因为它既它其实是一种暴力提取的啊,在提取这个特征的时候,他其实就是做这种简单的组合,就是说哎多项的二项的三项的组合嗯,并不是很实用啊,并不是很实用好。

然后我们接下来就看一看一些具体的例子啊,就是加深大家对我们的个人的一些印象啊,我们还是用IRS这个数据集这个地方,我们这个例子我们上面已经讲了啊,直接读取我们的数据集,完成数据划分。

构建我们的KN的classifier,以及计算我们的一个准确率,就像我们准确率,然后呢,当然我们这个地方在SK里面,它还支持这种cross validation score。

Cross valization,我们在PPT里面讲了,他就是这种交叉验证,那么什么是cross validation score呢,就是说我们在进行交叉验证的时候,我们可以对我们的验证机进行打分对吧。

那么我们既然对我们验证集就可以进行打分,那么我们就可以验证集,它打分可以不是五折吗,我们这个地方的CV就是五折划分成五折,就是我们的PPT里面的K是等于五的情况下,那么我们就可以算一算我们的一个五折。

分别的一个验证集的精度是多少,这个地方我们的第一个输出啊,Sorry,第一这一行,我们的输出就是我们的五折的一个验证集,的一个打分是多少。

那么我们还可以做一个cross validation predict,这些呢都是从我们的model selection,这个模块里面引入进来的,这个地方,我们可以对我们的验证集的一个它的一个呃。

就是说预测结果把它进行导出来,多折是取平均值吗,在这个地方我们是没有取平均值的,当然你如果是想要衡量一下我们的一个模型,交叉验证的打分呢,我们是用平均值来嗯,就是说做的对的。

那么我们接下来呢就看一看其他的例子,在SQL里面呢,我们这个地方是读取了一个m list,就是一个手写数字的一个数据集,然后呢我们读取完数据集之后呢,我们其实这个原始的数据集呢。

它额我们是用CSV给出的,那么我们直接使用pandas为这CSV,从这个这个是一个HTTP链接啊,就是嗯这个read csv呢,它不仅仅这个函数呢不仅仅可以读取本地文件,也可以读取这个网络链接啊。

都是可以进行读取的,然后读取完成之后呢,我们就用我们的一个hold out值的划分方法,把我们的数据集划分成训练的部分,以及我们的验证的部分,然后呢,我们可以把我们的一些图呢把它进行可视化。

这个就是一些手写数字啊,手写数字就是说就是0~9啊,数十个数字,04999667517对吧,就是手写数字,然后呢我们就能能不能构建一个模型,完成这个手写数字的识别呢对吧,我们就一步一步来构建。

首先呢我们在进行一个识别之前呢,其实我们可以做一些可视化啊,这个可视化呢不仅仅是可以用来,我们把原始的样本给它画出来,这个画图啊,其实是用magipch live来画图,大家可如果感兴趣这个画图啊。

可以自己去看一下啊,我们绘制得到的是一个figure,size是1515的这个图,然后他的n rose n calculum,就是说是十行十列的,然后就是说我们这个地方每每一行啊,十行十列啊。

我们根据这个十行十列就得到100个数字啊,对100个数字进行可视化,然后呢,我们设置一下我们的一个具体的画图的,一些title啊,以及它的一些元素,对嗯,我们不仅仅是可以对这个样本的原始知识。

进行可视化,我们也可以对我们的样本把它做一个PCA,把它降维之后,然后做一个可视化,其实我们嗯做完可视化呢,这个地方我们是用这个SKN里面的一个PCA,把它做一个降维,然后降成两个维度之后呢。

我们就可以把我们原始数据集的,主要的两个维度啊,主要降维的得到的这个嗯维度呢,把它做个可视化,大家绘制到二维的一个维度上,然后呢在绘制成二维的维度上呢,我们还做一个操作。

就是说我们这个点啊就表示的是一个样本,这每个点就是一个样本的情况下呢,我们还给定一个颜色,这个颜色怎么来的呢,这个颜色就是原始这个样本的一个类比,原始这个样本的一个类别,就是说是这个由它的一个。

就是它的颜色就相同的点啊,就是表明是相同的元素啊,类比是相同相同的,我们可以看一下,就是说其实大部分的相同的这个数字,都是在PCA之后也是处于相同的位置对吧,处于相同的位置。

然后呢我们可以构建一些我们的一个模型对吧,比如说我们可以用SKN里面的这个,我们的一个嗯嗯,MIP的CLASSIFI就是全连接网络,这个全局流网络呢,它是有100个隐含隐含节点的。

就是隐含层的维度值是100,我们让他来构建一个全连接网络,然后直接对我们的数据集做一个feature,然后呢这个地方我们的原始的一个图片呢,它是一个灰度图,他的一个取值范围呢,是从这个0~255的对吧。

那么我们可以把它做一个处理,就是直接除以除以一个255,就是把我们的数据集呢把它转换成一个呃,就是说0~1这个范围内是吧,然后直接做一个fit,直接把它完成训练,然后呢直接做一个predict。

就是做我们的一个预测对吧,那么做做完我们的一个模型训练和预测之后呢,我们还可以分析一下我们的一个模型,它的一个呃就是说预测的一个准确率对吧。

以及它的一个混淆矩阵,混淆矩阵呢,就是说我们这个模型它对预测就是真实的预的,预测结果和我们的一个额,就真实的一个结果和预测结果,它的一个整体的一个分布的情况,就是说比如说我们的这一个取值。

就是说真实标签为五的情况下,但是呢我们的预测结果为一的情况下,的取值个数是吧,我们其实如果这个模型全对的情况下,我们的一个它的一个样本呢,都是处于我们的对角线对吧,也就是说真实标签是四。

我们的模型的预测标签也是四,那么通过这种混淆矩阵呢,我们其实是可以看出,我们的模型主要在哪个地方错了,哪些样本错了啊,需要注意的是,这个混淆矩阵它不是一个对称矩阵啊。

它不是一个对称矩阵,那么这个混淆矩阵呢,我们也可以直接从我们的SKN里面嗯,他的matrix里面进行一个计算,我们只需要传入我们的模型的预测结果,以及真实的标签,就可以完成这个混淆矩阵的一个计算。

那么我们也可以打印一下我们的classification report,这个函数呢主要是完成我们这些每个类别,它的一个procession record以及F1score的计算。

这个呢可能是更加就是说计算的准确啊,也就是说每个类别它的一个呃就是说查准率,召回率以及F1score,当然我们也可以用其他的模型来完成一个实践,比如说我们任务KNN对吧。

也可以的,完成时间也可以类似的画,绘制出我们的一个混淆矩阵。

那么我们也可以用线性模型来完成,我们的一个训练都是可以的,好那么我们接下来呢就看一看啊,我们前面不是有同学讲到问到这个数据划分嘛,其实在SKN里面数据划分,我们前面所讲的例子呢。

就是我这个地方想讲的例子啊,提前讲了,我们首先呢可以构建我们的数据集的情况下,我们构建20个,我们一般情况下啊,我们的数据集它的一个适用这种矩阵啊,矩阵来进行,可以用来举证来进行表示的这种数据呢。

我们一般情况下称它为结构化的数据,结构化数据呢就是说他的一个行业比较规整,一行代表一个样本,一列代表一个特征,或者是一个字段,所以说大家如果看到一个矩阵,或者说一个数据集,它的维度数五五千乘以十。

那么就表明它的有5000个样本,以及每个样本是十列特征好,那么我们构造得到的一个标签呢是111,就是说也是先是一,后是二,再是三,再是四,如果我们不设置这个satisfied,这个参数的时候呢。

其实它是不均匀分布的,如果我们设置了这个satisfied的时候呢,我们的一个标签就是均匀分布的,当然对于k fold也是一样的啊,k fold就是我们的一个交叉验证,如果我们不设置它的情况下。

我们的label其实划分的也不太好,如果我们设置它的一个划分的时候啊,我们重新把它运行一下啊,如果我们设置它的一个情况下,其实它就划分的比较啊,这个地方嘶,啊运行这个吧,这个地方还是没设置啊。

这个地方这个地方呢,就是说如果我们想用key fold让它做数据划分,也划分的比较均匀呢,我们就用这个satisfy,satisfied key fold就行了,就是他直接来进行划分就行,对,好。

那么我们刚才呢所讲到的是这个数据划分划分,然后呢在SPN里面呢,它还支持这种模型调参都是帮我们写好的啊,我们可以直接来进行使用,那么我们也知道,就是说对于机器学习模型而言呢,我们的嗯。

就是说参数分为这个我们的数据模型的一个,参数呢分为这个普通的参数和这个超参数对吧,参数呢就是说我们的数据,这个数据呢它是能够从我们的一个这个数值呢,是能够从我们的数据集里面学习得到的。

超参数呢就是说我们需要人工进行设置的,那么比如说我们如何来对我们的一个模型,来进行调参呢,嗯有两种比较基础的方法,一个是这种great search网格搜索。

一种是render search这种随机搜索,我们首先来看两个比较简单的例子啊,我们首先呢给定两个超参数,每个超参数呢有一个有三个取值,那么在此种情况下,其实我们第一个,超参数有三个取值的情况下。

第二个超参数有三个取值情况下,我们总共就得到了九组超参数,需要注意的是,就是说我们是需要确定每个超参数的取值,才得到了一组超参数的组合,也就是说我们所有的超参数一致的情况下,我们才确定了一组超参。

这个需要大家注意啊,不是说我确定了一个超参数,不是的,所以说当我们有两个超参数的情况下,每个超参数有三个取值情况下,我们就得到了九组超参数,那么这九组超参数里面,哪一组超参数是最优的呢。

哪一组超参数是精度最好的呢,我们就需要如果是用great search呢,就是说我们把它构造得到一个点对吧,假如说我们把第一个超参数划分,得到坐标轴上面,第二个超参数呢也这画不画到我们坐标轴上面。

我们就得到这些点九个点,如果我们是RENWINDORESEARCH呢,它就相当于是我们第一个传参数呢,从一个范围里面随机生成,第二个套参数呢也是从一个范围内随机生成,然后做一个组合好。

那么这个具体的一些操作呢,其实在我们SKN里面都有一些具体的实现了,你不用担心,那么我们怎么进行实践呢,首先呢你可以定义一下你的模型的超参数,的一个取值范围,或者说你的一个具体的取值。

比如说你的一个这个地方,我们是用这个gradient,gradient boosting的一个CLASSIF,然后呢他的一个具体的超参数,我们可以设置成他的一个estimate,他是50或者十。

学习率呢是0。02或者0。05数,模型的深度呢是这个一或者2min,simple sniff是五或者十好,然后传入之后呢,我们接下来这是我们的一个网格,就是我们的网络的一个嗯。

或者说我们的一个超参数的一个网格啊,然后呢我们传入,我们接下来还传入我们的一个呃模型,它的实例化,然后呢我们还需要用传入一个交叉验证的折数,以及我们总共要训练多少次,这个n letters呢。

就是说我们总共假如说我们的超参数的组合,它的一个大小的空间是大于100的情况下,我们就使用我们就是说只跑100次啊,只跑100次,n estimate是什么意思,我们看文档啊,看文档。

我们在这个gradient boosting classify,这个n n estimates呢,相当于是我们的多,就是说这个boosting的一个次数,BOSTING的次数。

那么这个地方我们的一个呃gradient boosting,它的一个我们也知道它是一种不死的方法,那么它是一种集成学习方法,你可以理解他就是集成集成多少次对,二维呢二维是什么意思。

我没有理解的意思是什么,二维,然后这个CV其实表明我们的交叉验证啊,就是说我们到底跑几折,交叉验证,然后用我们的交叉验证的验证集的得分,来衡量我们最终的一个进度,然后这个ANITTERS就是我们的一个。

总共跑多少次对,然后呢如果我们用grade search呢,呃如果我们用render search呢,它其实是随机筛选的,必须上去,如果我们用这个grade search呢,其实基本的操作也是一样的。

基本的操作也是一样的,然后他跑出来的结果也是差不多的,也是差不多的对,然后我就是说我们也给定了一些例子啊,就是说我们在1SKN的一些建模的案例,如果大家感兴趣的呢,也可以看一看。

第一个案例呢是泰坦尼克号的一个建模的案例,就是说我们根据泰坦尼克号的一个乘客的一个,嗯信息来预测它是不是幸存,第二个呢是这个呃,就是说一个电商的一个呃商品的价格预测,我们是需要根据这个商品的一个价格。

以及商品的一个文本信息来预测它的价格,第三个呢是这个我们的一个呃,呃应该是一个文本分类的一个问题啊,就是说我们如何用SK来完成一个,文本分类的一个例子,然后呢,如果大家觉得就是说想要深入学习SKNL。

就可以通过我们上面所呃,就是说介绍的这三个案案例来进行继续学习啊,当然就是说我们给到大家的呢,其实已经呃发到群里的呢,就是有一个泰坦尼克号的案例啊,你也可以直接用这泰坦尼克号这个案例,来进行学习。

我们在给到的一个代码里面呢,还有一个叫这个呃SK的50个tips,或者说50个小练习啊,你也可以,就是说我也非常建议大家可以,把这50个小练习可以给他嗯,就是至少是呃运行一下啊,至少运行一下。

比如我们用SK的数据集这个地方,这个地方呢我们在讲SKN的时候呢,我们没有讲很高阶的操作啊,其实是说SKN的一个操作呢,它是可以做一个pipeline的,做一个管道的,管道是什么意思。

管道就是说s kn的一个数据,它的一些操作呢,我们可以把它当做一个流来进行使用,因为我们的一些这个数据预处理模型构建,我们这个地方的make pipeline,它是怎么做的呢。

我把这个数据这个翻译一下啊,这个地方我们首先构建了一个Mac calculent,Transformer,就是说我们对我们的列如果哪些列啊,这个地方我们对我们的new era列。

做我们的一个我们的standard scanner,我们对我们的类别列做一个完好进行扣和encode,我们其实是可以构建一个make cent transform,就是说直接把一些操作对类别列。

对数值列,同时把它集成到一个操作里面,然后呢这是预处理,然后我们做完预处理之后呢,我们还可以做一个模型训练,我们直接把玉数量模型训练打包成一个PAPINE,那么有同学说打包这张牌未来有什么操作呢。

有什有什么用途呢,用途非常大,打包成pipeline之后,这个pipeline直接可以做一个FEIT,也就是说,我们不需要再去一步一步,做我们的一个特征处理,特征模型训练的。

直接做一个一行代码就可以做一个预处理,做一个模型训练,而且它帮我们保存好了,这个中间的这个预处理的变量,中间的模型我们如果做一个预测,直接是PAPI的prograd papagit property。

这个地方它是直接让我们模型输入的数据,通过这个预处理,然后再通过的模型,所以说也是非常方便的啊,非常方便的,然后呢,其实这个嗯SPN里面包含的东西是蛮多的啊,蛮包含包含的东西蛮多的。

我也是非常建议大家下去之后呢,可以做一个具体的实践啊,可以做一个具体的时间,就是说你你还是要自己去使用它,你才能说你能够掌握它,不然是嗯就是说真的是,这个里面的数据集都有吗,有的啊。

这个notebook给定的数据集,就是我们已经发给大家,在这个地方呢有一个test test点CSV以及train csv,你直接改一下名字就可以跑的,你直接改一下名字就可以跑的。

然后就是你可以看一看啊,就是说如果你想要把我们的一个SK能学习好,其实还是蛮多要学的啊,蛮多要学的好,额,那么我们这个是实践的部分啊,大家如果感兴趣的呢,我是非常推荐大家下去。

把这些我们给到了大家的一些例子啊,你可以学习一下,基本上是有很多的时间可以供你自己学习的好,我们就回到PPT啊,嗯是不是要全部撸一遍,我建议你可以先看一遍,你可以先了解他的API的使用。

特别是初学的同学,你可以先看一遍,就是说知道他是怎么用的,那么我是非常建议大家,以一个具体的案例来进行学习的,因为很多真实场景下的数据集呢,并不是那么干净,是需要你进行一个处理的,那么你可以考虑一下。

用SKN完成一个数据集的,具体的读取数据集的一个呃,确实值填充数据集的处理,你可以以泰坦尼克号入数据集啊,也就是说我们这个地方给定的这个数据集,以及它的一个这个test csv以及TRCSV啊。

以及中给定的数据集,你来进行实践一下啊,当然我们这个地方也给了一个例子啊,这个地方也给了一个例子,是可是可以直接可以跑的,对这个地方给出那个例子啊,也是基于泰坦尼克号,这个是预计直接可以跑的。

因为当你遇到一个具体问题的时候,你肯定是可能就跟完成一个小步,小步的一个操作又不一样了,好第二个呢就是说我有一些建议啊,因为机器学习的原理跟实践呢,我个人认为是相同重要的,因为原理更加关注于每个算法。

实践呢更加关注于具体使用,比如我举个例子啊,在这个我们的随机森林的这个模型里面,嗯我找一下啊,稍等,对比如说我们在随机森林里面,其实随机森林,它是利用我们的一个行列进行采样,然后得到不同的数据集。

然后完成我们的一个训练,多得多棵树,那么我们如何通过控制我们的这些参数,完成随机森林这个数据集的构建呢,或者说我们如何控制这些参数来完成,假如说我让你想让你这个随时能在训练的时候。

尽可能的每棵树用到的特征尽可能多对吧,那你怎么进行设置的,或者说你这个随机森林我想让它在训练过程中,它的随机性尽可能大,那么紧怎么进行参数的设置呢,所以说很多时候这个模型的一个原理,我们刚才所讲的。

或者说他的一个网这个模型的设置,你具体的参数上面又跟我们具体的原理,其实不一样的,因为这个模型它在具体实践的时候,可能他有一些具体设置,就是说在我们的一个教材上面,它没有体现出来的一些参数。

可能就在具体实践里面呢就会出现,所以说你如果想要具体实践,可能还真的是要做一个我们的一个是呃,就是说这个代码的阅读,或者说这个文档的阅读,比如说在学习森林里面。

这个max features就是设置一下我们的每棵树,它使用得到的最大的一个特征的数量,我们就可以通过这个设置,这个max features,就可以用来设置,我们每棵树用到的最大的一个特征的数量对。

所以说这是第一点,就是说原理和算法其实都是非常重要的,第二个呢就是说实践是需要动手的,但是并不是指定特定的库啊,我是比较推荐用vs,可能当然你假如说用其他的一些库来进行实现,也是可以的。

假如说你用R语言里面的其他的库来进行实现,实践,我并不反对,我并不反对,但是呢我是比较推荐用SK好,有同学说怎么根据经验选择用哪个模型,我们在前面这个思维导图,可以一可以稍微回答你的一些问题。

其次呢可以也有一些模型经验的一些呃,模型的一些选择方法吧,我们刚才不是讲了结构化数据吗,结构化数据就是表格类型数据表的嘛对吧,我们我们先前提啊,前提我们先指就是说聚焦到有间的问题啊。

只只聚焦到有间的问题,那么对于结构化数据呢,我们一般而言,一般而言大部分情况下都用数目系,为什么呢,因为这个表格化数据,里面包含了较多的类别,类别字段,那么对于类别字段,大家也知道。

其实数模型它是很天然的,可以支持类别字段的分裂,如果我们用线性模型,其实类比字段我们就是需要对它进行处理,不管是label encoder或者是玩后期encoder对吧。

那么label encoder或者说玩后期啊,label encoder或者one hoencode,其实它都是有缺点的,nel encode他是会改变这个标签的,或者改变这个类比值大小关系。

one活性code其实是会导导致稀疏性,都是有它的缺点的,所以说如果我们遇到的是结构化数据,我们尽可能用数模型,如果是非结构化数据,比如说我们的图像,文本视频语音,那么一般情况下都是直接用深度学习模型。

为什么呢,因为结构化的非结构化的数据,它的一些数据集呢是更加难以理解的,深度学习的一个模型呢,可能更加建模能力,可能更加更强一点,一般情况下,你可以先就是说以这两个角度来进行选择,模型即可。

然后为什么没用线性模型,其实呃现在的一些高阶的,现在的一些比如说这种x g boost,其实它的一个精度,就是说应该是大部分情况下比线性模型更好,因为它里面加入的这种集成学习的速度的。

肯定肯定比线性模型,在大部分情况下会比线性模型更好对,那么以上呢就是我们这节这节课的一个内容,大家对于我们嗯这讲解的一个内容有问题吗,大家或者说,在什么情况下会用到朴素BA4或者HHMM。

嗯这个呢怎么说,在很多场景下都用不到,我个人感觉朴素贝叶斯怎么说,它其实嗯他其实用到这种表格化数据也蛮好的,因为表格化数据,其实他谱子BS是能够计算这种先验概率的,H m h m m。

其实这种也是可以计算得到这种概率,但是其实他在很多时候也是需要计,怎么说呢,计计算的东西蛮多的,嗯我个人啊,我个人的习惯是,直接就是如果表格数据直接用数模型原理,老师说用那些GBM替代差距补齐。

嗯这个地方是这样的,这个地方是这样的,差几boost之后来HGBM嗯,就是说很相似,呃x g boost的时候他是提出的比较早的,然后他是嗯提出比较早的,然后那HGBM呢是微软提出来的。

是基于差几boss只做改进的,然后呢这两个其实很多程度上精度差不多,然后这两个库它在发展越来越发展啊,现在很相似,基本上功能上一模一样,所以说用谁都可以,用手的,用谁都可以,我个人而言啊。

就是说这两者都可以,因为这两者都很快啊,这两者都很快,速度也都很好,都可以的,都可以的,对大家还有问题吗,如果大家没有问题,我们今天的一个直播的内容就到此结束啊,大家如果有问题的同学可以继续提问。

如果没有问题的同学呢,我们就可以嗯,就是说呃就是离开了,我昨天装x g boost只有90多兆RHGBM,只有几兆嗯,这个不能从安装包来说啊,这个不能从安装包来说对,其实嗯据统计啊,据统计。

其实现在还有很多的一些嗯地方,还是用拆机boost的比较多,并不是说那些BM不好啊,只能说是有一些历史遗留原因吧,历史遗留原因,对其他同学还有问题吗,比起CB,比起matt plot lib而言。

CB会更好吗,首先你弄清楚一点啊,啊,SIMON是基于MAD projetb,两者可以混用,为什么要用con,我可以给你打开con的一个官网,SIMON它天然是支持它天然的用途。

是基于这种data frame的这种格式的,我们在画图simple的时候,其实我们首先用这个散点图scatter plot,然后传入我们的行名,就是说X轴的列名,X轴的这一列的名称。

以及我们分互录就是我们分组的名称,然后传入我们的data,这个data就是我们的data frame,然后直接就有绘图,X轴就是我们的cart这个地方传入的这一列。

Y呢就是我们的price这个地方传入的一列互动,就是我们分组的不同颜色的,那么你可以看一下我们这个地方,SIMON它是基于pandas或者基于data frame这种画图。

它是直接基于data frame的,但是你再看看啊,这个地方其实它也是用到了matt plot lib,所以说matt plot lib它是更加底层的,SIMON是基于medical。

这两者可以更加混用啊,两者可以混用,SIMON画起来更好看,是更好看,但是你假如说想要更画的更加精细,假如说你想要调里面的模型,假如说调这个图的一些细节,那么就只能match pleap。

对好其他同学还有问题吗,如果其他同学没有问题就可以离开啊,如果有同学有问题,明天在线实训是什么内容,明天在线实训很简单,你我们已经把这个实训东西发给老师嗯,发给孙老师了,你就按照这个实训内容以及呃。

来来来来进行一个操作就行了啊,来进行一个操作就行,基本上是很简单的一些SKN的使用,对很简单的SK的使用,有你直直接按照这个notebook来完成就行了,哦还有同学有问题吗,那么如果没有问题。

我们今天的一个直播就到此结束了,嗯谢谢大家,如果大家有问题呢,也可以直接在群里面进行提问。

【七月在线】机器学习就业训练营16期 - P11:在线直播:2-数据分析与特征工程串讲_ev - IT自学网100 - BV1Z9T5ewEKL

好那么我们开始我们今天的一个课程内容,我们今天的课程内容呢其实嗯并不是特别难,我们主要是给大家讲,给大家讲解一下我们的一个数据分析,和我们特征工程两部分啊,一个是数据分析,一个是特征工程。

那么我们的一个具体的一个嗯时间安排呢,就是我们有四部分的一个具体的内容,首先呢给大家介绍一下数据的一个处理和分析,然后第二部分呢讲解一下特征工程的一个嗯,具体的原理和实践。

第三部分呢讲解一下具体的模型的训练和验证,第四部分是总结与回顾,好我们就开始我们的第一部分啊,数就是说我们的一个具体的数据分析的过程,在开始我们的数据分析之前呢,我们先会给大家讲解,就是说问题与建模。

这个呢其实是在我们的一个具体的一个嗯,数据挖掘,data mining的一个任务里面是非常重要的,数据的建模,它其实是嗯,决定了我们最终的一个解题的一个方法,以及我们具体的一个解决的六。

解决的一个问题的过程,我们都知道这个机器学习,它是划分为具体的一个场景的,这个场景呢就是我们是相当于是一些具体的一,些problem,或者说具体的一些task,这个task呢我们是根据在机器学习里面啊。

我们是根据分分任务对吧,我们到底是分类的回归的排序的,或者是无监督学习的对吧,我们的分类相当于是classification回归regression,排序是这种rank,无监督学习。

就是unsupervised learning对吧,那么这个地方呢,为什么我们是呃机器学习的一些具体的一些,应用场景,要做这些具体的划分呢,就是说其实本质我们的这些具体的一些场景呢。

它是都是可以对应到一个,机器学习的一个问题上面,那么我们的具体的一些,不管是在学术上面的一些问题,或者说在我们的一个互联网公司里面,遇到的一些问题呢,我们是可以根据我们的问题的一个类型按。

来完成一个划分的对吧,我们就是说遇到一个问题,我们的问题到底是有没有标签对吧,我有有没有这个label,如果有的话对吧,我们这些人是一个有监督的,有监督的,如果我们的一个label是无的话。

那么我们就是无监督的,然后在我们的一个有label的情况下,我们的label到底是什么类型的,这个label到底是它如果是离散的类型的,那么它就是一个分类的一个类别对吧,分类问题。

如果我们的label是这种数值的,那么他就是一个回归问题对吧,如果我们的一个label是这种次序的,那么就是一个排序问题,以此类推,那么这个无监督机器学习里面,也可以进行具体的划分。

我们嗯如果有基础的同学,应该知道我们在这个无监督机器学习里面,我们可以划分成什么,划,分成我们的一个就是说比较典型的PC,这种降维维度就降低,或者说这种k means,做我们的一个具体的一个聚类对吧。

这种pc a l k means都是我们的具体的一些啊,无限度地器学习方法对吧,当然还有些其他的,比如说加入了这种深度学习的,这种自编码器的一些方法对吧,那么我们在做一个具体的一个建模的时候呢。

首先是需要对我们的一个具体的一个问题,做一个大致的划分,它到底是分类的,违规的排序还排序的,还是无监督的,这是第一点,第二点呢就是说我们的一个具体的问题呢,其实我们是可以把它嗯。

就是说有一些典型的一些案例,就是下面比如说预测某个用户是不是违约的,这个呢就是一个很典型的一个金融风控的一个,二分类问题,二分类的问题很典型的一个金融风控的问题,预测房屋的或者是房价的一个热度。

或者房屋的一个价格,那么这个很典型的对吧,是一个回归的问题,因为我们的一个房屋的价格是数值的,预测我们的一个温度的走势,或者说交通拥堵的一种情况,这个呢其实它也是一个我们的一个回归的问题。

但是呢这个问题他其实更加就是说具体一点,它其实是我们的一个时间序列的问题对吧,time series时间序列,那么这一类问题呢,其实在我们的现在嗯,互联网公司的一个应用场景里面,或者说在很多的公司里面。

都是有这个相关的一个应用场景的时间序列,或者说预测我们的道路上面是不是有行人,或者说识别我们道路上面的一些具体的行车辆,对吧,这个都是个非常典型的一个应用案例,那么这个地方。

为什么我们可以从场景来进行划分,也可以从案例来进行划分呢,我们现在的一些具体的一些机器学习的,一些算法,都是在一个具体的一个案例上面,或者说一个很典型的问题上面进行使用,我们现在各位同学去找工作呢。

就是肯定就是说不是啊,什么工作都找对吧,我们肯定是非常建议大家你去呃,知道你自己适合什么样的工作,或者喜欢什么样的工作,比如说这个用户预测用户是不是违约,比较典型的。

就在这种金融风控是金融风控的一些公司里面,比如说蚂蚁啊,蚂蚂蚁花呗,蚂蚁对吧,或者说这种融融360,这种就是说金融风控的一些公司,然后呢,如果你的一个岗位是做这种,用户违约的一个预算。

那么你就去需要好好学习一下这种违约算法的,一个具体的一些原理对吧,所以说这个呢,我们是非常建议你把这个具体的案例和,能够和你自身的一个知识点,以及具体的一个就业的一个方向,能够结合起来是最好的。

其次呢我们对于一个数据集呢,我们是可以根据我们的数据集的一个类型,来做一个划分的,我们现实生活中呢我们的这个数据科学对吧,数据科学,数据挖掘,或者说我们的这个机器学习,深度学习。

它的本质就是我们的一个数据,那么在这个地方,我们的数据它其实也是可以做划分的对吧,我们的数据有这种表格类型的结构化的数据,和我们这种半结构化的数据,JASON的或者说XML的这种半结构化的数据。

或者说我们这种非结构化的数据,就是我们的一个图片类型的,视频类型的文本类型的这种非结构化的数据,这些呢都是非常三类典型的我们的数据集对吧,那么我们的不同的数据呢,我们在做建模的时候。

其实我们也是各自存在不同的一个区别的,我们在现实生活中呢,其实嗯对于初学者而言,对于初学者而言,我们比较建议嗯,就是说是学习这种嗯表格类型的数据,表格类型的数据,表格类型的数据呢就是说它是呃。

就是说我们的一个具体的数据集呢,就是这种二维的,二维的这种形式进行展开,我们的行就是我们的一个具体的样本,我们列呢就是我们的具体一个字段,比如说我们给定一个表格,这个表格里面拥有的是某个学生。

他的一个具体的一个姓名,他的一个具体的一个嗯,就是额他的一个成绩啊等等的对吧,相当于是每行是一个学生的一个记录,每一列是他具体的一个字段,那么我们这这是表格类型的数据,为什么我们这个地方会把这个数据集。

讲的这么清楚呢,因为我们不同类型的数据集,其实我们在它适用的得到的一个算法,它也是不一样的,表格类型的数据呢它可能比较适合用的数模型,就是说比使用那种charge boost,或者嗯我们NHGBM。

这个我们在上上周呢,我们的有有我们的老师给大家讲对吧,然后呢如果是非结构化的数据,我们比较适合用,那什么我们非结构化的数据,比较适合用这种deep learning的深度学习的模型对吧。

所以说我们的一个具体的数据的类型,也决定了我们最终适合用什么样的一个,具体的算法,所以说呢,我们是需要对我们的一个具体的问题啊,他的领域嗯类型啊,以及它的具体的一个数据集啊,要好好的一个了解清楚。

其实呢我们在识别到这个问题之后呢,我们并不是说是有一个完从头到尾的这种解,解决的过程,我们的一个具体的一个从头到尾的一个,解决过程呢,是我们的一个嗯就是识别问题,理解数据嗯,数据预处理建模与评估。

这个相当于是我们的一个嗯完整的一个,从数据的一个理解,然后对数据的清洗建模,然后再到再到最终的部署和评估,这是完整的,但是呢在这个解决我们的问题的过程中呢,我们的一个具体的一个。

它并不是说是一个瀑布式的这种串行的,一个开发过程,它是中间呢会需要进行反复迭代,那么如我们PPT所示的,我们在进行迭代的过程中呢,我们可能在中途呢可能是需要返返回返攻的,对吧。

反攻的这个呢其实是嗯很常见的,我们写一个程序,并不是说是一下子就能写成功的,那么类似的我们训练一个模型呢,也不是说我们一下子就能训练完成的,不是的,我们在进行一个建模的过程中呢,我们可能很有可能。

在一拿到我们的数据集的之后,拿到数据集之后呢,你可能是从我们的数据集能够找到,对我们的问题更深次更深的一个理解,那么我们就回过头来,结合我们的原始的一个问题的背景,然后再去理解我们的数据。

或者说我们在建模的时候呢,我们发现我们的建模,它的一个模型的精度不太好,那么以此类推,我们也可以反推,是不是我们的一个具体在处理数据的时候,存在某种误差,或者说出了差错对吧,所以说在我们建模的过程中呢。

它不是一个瀑布式的这种端到端的过程,它其实是有这种循环的过程的,循环的过程的一直一直循环,或者说是中途任意一个节点都会都会反攻,那么一直一直循环,循环到什么时候,能一直到我们的一个最终的一个模型的。

一个精度和模型的一个预测速度,它达到我们的要求的时候,我们才停止迭代,好在我们的建模过程中呢,其实本质啊,就是说有很多同学可能之前没有做过这种,机器学习的一个实际的一个项目部署啊,或者项目开发。

其实这个在进行建模的过程中呢,你可能是可能会对这每个步骤,它所花花费的一个时间比较感兴趣对吧,这个地方我们在进行花费时间的时候呢,可能这一部分的一个时间只占10%,机器学习建模的部分占10%。

然后做数据处理的这部分时间呢,可能是占据70%的,因为我们的数据它可能是比较脏的,我们是需要做把它做一个聚合的,也需要从我们的数据集进行一个理解,然后做一个特征工程的。

所以说实际做一个模型训练和验证的过程,其实时间很短,大部分时间都在做一个数据处理和数据清洗,数据分析的过程中,在我们建模的过程中,我们关键的要做的是什么呢,关键要做的就是。

你首先要识别出我们的问题到底是什么,它是什么类型的,以及通过我们的这个具体的一个哦数据呢,你能不能够找到数据的一个分布的规律,这个分布的规律呢,就是说其实就是我们的原始的某个字段。

它内部的一个分布的规律,这个分布的规律,其实就是需要我们对这个字段进行一个分析啊,这个分析呢可能是要画一些图,画图呢我们是呃如果是类别字段和数值字段,我们各自适合画的图不一样,画完图之后呢。

我们可以找出它内在内在的一个分布规律,其次呢我们的一个具体的一个数据集呢,它每个字段和我们的一个标签,也是存在某种规律的,也就是假如我们是一个表格类型的一个数据,我们每行是我们的一个样本,我们有两列啊。

一列是我们的一个字段,字段A还有一列呢是我们的一个label,在这个地方呢,我们是可以进行一个分析分析进分析什么呢,我们是可以分析一下,我们的一个字段和我们的一个标签,它的一个具体的一个分布的规律。

或者说我们的一个具体的一个,它们之间是不是存在什么关系啊,这个都是可以通过我们的一个分析的过程,来得到的好,那么我们在进行建模的时候呢,并会是不是存在有完完整的,或者说完美的一个解决流程呢。

或者说完美的这种解题套解决过程呢,或者解决模就是说会不会存在完美的模型呢,其实是不存在的,因为我们不同的任务呢,它的一个具体的解决方法,和建模方法都是不一样的,我们并不能一概而论,特别的呢。

特别的呢就是说我们的具体的数据,不同的情况下,我们的建模方法是不同的,我们的一个具体的一个任务,不同的情况下,我们的建模它具体的任务也不同,那么这个地方,我们的数据和我们的具体的一个任务呢。

就决定了我们最终他到底是做什么以及如何做,在我们的机器学习的一些这个领域里面呢,我们常见的应用呢就是说你可以嗯,首先可以按照我们的数据集来做一个划分,我们数据集做一个划分呢,就是我们是嗯比如果是初学者。

比较推荐你去学结构化的一个数据,因为结构化的数据呢,它的一个数据集往往都比较小,也比较适合你去做人工的特征工程,那么结构化的数据集里面,就是说我们的这个数据呢,它是使用这种表格形式来进行一个。

存储和展示的,在这个结构化的数据集里面,我们常见的这种任务,由广告搜索的推荐催电系统,金融风控最优化问题以及匿名数据挖掘的问题,然后呢我们以此类推,还有一些其他的图像的,AARP的文本的语音的这个地方。

我们就给大家稍微讲一下图像,图像的呢就是我们的一个具体的数据集呢,它是以这个image的形式进行存在的,image我们也知道它其实就是一个文件对吧,我们的一个图片呢,它的一个不同的一个文件。

可能图片尺寸有大有小,它不是一个规整的形式,它是一种非结构化的数据,那么对于我们的一个图像的领域呢,我们常见的任务有这种图像分类,物理检索我们的语义分割,超分辨率重建以及人脸识别,自带估计。

关键点检测等等的一些任务,这每类任务呢都是可以找到我们的,相应的工作岗位的啊,你去搜啊,直接在这种招聘网站上搜,都是可以找到的对应的一个岗位的,那么类似的在文本和语音里面。

我们也也是有着对应的一些特定的一个岗位,和特定的任务嗯,那么我们在进行学习的时候呢,就是说非常建议你嗯熟练掌握这其中一种,或者说两种是比较好的嗯,因为我们这个你不可能,就是说你把这个基础学完了。

然后再呃不去学这个具体的任务啊,这不太可能,因为我非常建议你去学完基础之后,然后去挑选其中的一两个具体的任务,然后进行一个深入学习啊,这样是比较适合你的,一个具体的一个职业发展的。

那么有同学可能就会问到老师,我怎么知道我选哪一个嗯,就是说是哪一种这个领域啊,或者哪一个具体的问题比较适合我,这个呢就是非常推荐你去把每一个这个地方,你可以把这个截个图啊。

或者说在我们的QQ群里面可以拿到我们的课件,然后呢你再去嗯嗯了解一下每个任务,它具体是在做什么,然后你就是可以找到你比较感兴趣的,一个愿望好,那么我们今天呢给大家在进行举例的时候呢。

都是以这个to西格玛connect,这个租房热度预测的这个数据集给大家展开,给大家展开这个数据集呢,其实是一个K哥的一个比赛啊,说我是从K哥的一个具体的一个课程里面筛选,把它抽取得到的。

那么这个具体的一个数据集呢,他在他在做什么任务呢,它是需要我们使用这个租房的一个信息,对这个房屋的一个热度做一个预测,这个房屋的一个热度呢不是它的温度啊,这个房屋的热度呢相当于是他的一个受欢迎。

受欢迎的一个程度,就是说这个房屋它受欢迎的一个程度,我们是需要使用这个房屋,它的基础信息来预测它的一个热度,那么这个地方其实本质就是对我们的一个,房屋的热度进行一个分类对吧,那么我们的一个具体的数据呢。

它拥有了我们的房屋的信息,这个房屋的经纪人信息,房屋的地理位置信息,我们在做的时候呢,其实本质需要将这些具体的字段,做一个聚合的统计,所以说他的一个具体的操作过程呢,其实是需要做大量的一个统计啊。

这个to西格玛这个具体的数据集呢,它原始来源于开口的一个具体的比赛,他总共包含了14,是四个字段,分别涵盖了啊数值类型的类别,类型的文本类型的,日期类型的和图片类型的这些字段啊,然后呢通过这个数据集。

或者通过这场比赛呢,你可以完整的掌握到我们具体的数据挖掘的,各种技能嗯,它包含的一些具体的一些数据呢,我们在这些字段呢,我们待会也会展开给大家讲解啊,你不用担心,好,这个呢我们先给大家花了一点时间。

给大家讲完了我们的这个初始部分,我们如何对我们的数据集,以及我们的问题做一个抽象对吧,我们到底如何对它进行具体划分好,我们接下来呢就开开始,正式开始我们的第一部分额数据处理和分析,这个地方啊。

就是很多同学呢觉得算法工程师做一个他的算,很多同学可能觉得算法工程师的一个工作,主要是训练模型,其实不是的,算法工程师百分,我刚才也讲了,70%或者70%以上的时间呢,都是跟数据的一个处理相关的。

比如说数据的一个清洗,数据的一个查询,70%以上的时间都是在做直线,然后还有10%的时间可能才是建模,其实建模的时间其实是非常少的,因为我们现在的一个具体的机器学习的,这些库呢都非常完备的。

你只需要把我们的数据集把它处理好,那么接下来送到我们的具体的一个模型里面,就行了对吧,所以说我们在这个地方呢,很多时间都在做一个数据的清洗,数据的查询和数据的分析,那么在去西格玛。

这个租房热度预测的比赛里面呢,其实我们遇到的一个问题是什么,在render hop,render hop呢是纽约啊,纽约new york大的一个租房的一个网站,就相当。

相当于是我们国内的这种链家的网站一样,那么在这个网站上面呢,就是说很多的一些房客,他可以在上面找到他想要的房子,那么我们在这个网站上面呢,也有一些具体的一些嗯,房屋的一个信息呢会被张贴出来。

那么我们是需要预测一下这个房屋的一个热度,这个热度呢就是这个房子它受欢迎的一个程度,或者说他的点击率在这个地方呢,就是说我我们的一个具体的任务呢,是跟预测这个房屋的热度,预测完成之后,我们能够做什么呢。

我们这个得到的一个模型呢,可以更好的去分析一下我们哪些房子,它可能是更加受欢迎的对吧,也可以对我们的这个租房的信息来进行控制,比如说嗯,我既然能够识别出我们的一个房屋的热度,那么我们可以将这个嗯。

比较受欢迎的一个房屋呢,它它均均匀的一个采样的采样进行发布对吧,不要一下子发布很多的一些比较受欢迎的房子,对吧,让它均均匀的就相当于是有一个等待一段时间,然后再发布。

或者说呢我们通过这个房屋的一个热度的预测,模型呢,也可以帮助我们的一个业主和中介,请理解我们的租客的一个偏需求偏好啊,这个呢其实是也是非常有帮助的,他的句这个地方呢我们的去西格玛呢,这个具体的一个问题。

他的评分方法呢它是用log loss来做一个评价的,他的一个具体的问题呢其实是一个分类问题啊,我们的一个热度呢就是分为我们的三个,我们的一个就是三类啊,high media和low3类。

我们接下来做一个具体的一个预测的时候呢,我们是需要预测得到,我们的一个具体的一个房屋,它是属到底属属于某一个类别,然后这个地方呢,我们其实本质是需要识别出我们的一个,它每个类别对应的概率值啊。

这个地方相当于是这一行,它的概率值相加得到等于一啊,那么这个地方呢我们嗯在进行评价的时候呢,是用我们的一个logo loss来做一个评价,好我们在这个原始数据集里面呢,其实它包含的信息还是蛮多的。

我们的一个有一个train jason和test jason,这是我们的一个原始的一个数据集,然后呢这样他还给了一个嗯image sample,点zip这个文件,这个文件里面呢就是我们的一个嗯。

就是说所包含的一些呃房屋的一个照片,这个呢就是我们的一个具体的一个嗯,房屋的一个照片的文件夹,相当于是我们在这个数据集里面,我们还给定了这个房屋的一些具体的照片信息,当然这个照片信息呢。

它就是一个非常典型的这种非结构化的数据啊,我们就可以把它利用起来,在我们讲解完这个具体的一个问题背景之后呢,那么我们接下来就可以思考一下,我们的具体的一个sin题,它到底是一个什么样的问题对吧。

首先他这肯定是一个有监督的一个问题,因为我们是有训练集,以及我们有测试集的对吧,这个地方有监督的这个问题其实很好识别,我们是有训练集的,也有测试集的,然后在训练集里面呢,我们是有这个具体的标签的好。

那么在有监督问题里面呢,它其实是一个分类问题,分类问题对吧,我们的具体的标签呢是分三类的,它是一个分类问题,然后呢是分三类的,就也就是说它是一个多分类问题好,那么这是一个问题的建模以及问题的一个抽象。

然后接下来呢,就是说我们是需要提前做一个思考的,就是说我们在做一个建模的时候呢,你首先要对我们的一个问题背景进行一个理解,然后接下来就是可以对我们的一个,具体的一个标签做一个假设。

也就是说你可以自己思考一下,我们的一个房屋的一个信息,是如何影响到它的一个热度的呢,或者说一个房屋的一个信息,如何影响到他的一个具体的受欢迎的程度的呢,有没有同学想回答一下对吧。

我们的一个具体建模的时候呢,你是就是说是需要这样思考的,类似于这样思考什么去影响到我们的标签,以及我们的标签和什么相关,有没有同学想回答一下的,就是说我们在做一个租房的时候,什么样的房子。

它的一个具体的受欢迎的程度是比较高的呢,对,因为同学讲回答的,那么这个地方呢,就是说如果大家有这个租房的一个呃,就是说曾经租过房子啊,或者说有这种租房的一个经验的话。

可能就知道什么样的房子他比较受欢迎的,首先呢它的价格比别人低的对吧,相同条件下面这个价格比别人低的,肯定比较受欢迎对吧,其次呢这个房子他的一个位置对吧,房子肯定他的一个位置信息位置比较好的。

那么他肯定也是可能比较受欢迎的对吧,然后呢这个房子它内部有什么家具对吧,这个呢也是呃就是说这种配套的一个信息啊,也是会影响到他是不是受欢迎的,所以说呢在我们建模的时候呢,你首先可以从这个角度来进行思考。

就是说我们的一个标签,它是它是如何进行一个就是说什么样的数据寻,它可以影响到我们的标签,其次呢我们还可以思考,就是说什么是我们的标签,我们的标签是如何进行定义的,这个其实也是非常关键的。

你的一个标签它到底是这个热度,到底是怎么定义的呢,你可以把它定义为这个房子,它的一个嗯在我们的网站上面被查询的次数,或者说这房子在我们的网站上面,它被点击的一个次数都是可以的对吧。

这个相当于是他被就是说这种受欢迎的,一个程度对吧,就可以视为一个热,那么我们在做一个建模的时候呢,首先可以对我们的具体的一个标签做一个理解,其次去思考一下我们的一个具体的标签。

它是如何受到我们的数据集所影响的,在我们的这个问题里面呢,我们拥有的这个具体的数据呢是这些啊,我们分别是bathroom,bedroom啊,B2dd created啊,description啊。

这些字段我们一个一个来看,bathroom呢,就是我们的具体的一个相当于是梳妆台,或者说这种洗手间的个数啊,厕所的个数,然后呢我们bedroom呢它是这个卧室的卧室,这个呢我们在这个地方其实都标示好了。

具体的一个字段的类型的啊,这个地方其实需要注意的啊,我们在进行一个建模的时候呢,其实是非常建议你把每个字段的一个,具体的一个类型给它清楚地标识出来,然后如果能够理解嗯,或者说翻译这个字段的一个哈。

它的一个含义的话呢,也可以把它那个字段的含义给他记录下来,这样呢其实是非常非常有助于你对数据集进行,一个理解的啊,然后呢我们还有个这个B0DB20id呢,它其实是一个类别类型的。

就是这个建筑物的一个id,因为我们的一个具体的一个建筑物呢,相当于是我们的到底是哪一哪一号楼对吧,这个地方你可以理解就是一个楼的一个编号,或者说我们的门牌号,然后呢还有一个created。

就是我们的这个房屋,它的一个信息被张贴的一个时间,然后description呢就是一个文本类型的,就是说这个房屋的一个描述信息,它的一个我们在做张贴一个房子的时候呢。

就是房东或者中介会用一段话去描述一下,这个具体的一个房子,他到底是什么样的一个类型,以及它的一些具体的一些描述对吧,比如说我们的房子它坐北朝南,有电梯,怎么怎么样对吧,用一个文字来做描述。

然后呢diss display address呢,就是说这个访问它的具体的地理位置,所展示的地理位置,然后还有一个features,这个features呢它是一个列表类型的。

就是说它其实是将一些具体的一些特点,这个地方呢有点像这种中文里面叫叫这个打tag,打个标签,比如说呃这个房子有电梯呃,什么什么,就是说有电梯嗯,有门铃对吧,然后哦不要不要物业费对吧。

相当于是用一个个的一些具体一些tag,去描述这个房屋,然后还有一个我们后面的是个listing id,这个呢就是一个主线id,就是说我们的这个具体的房,这每这个张贴的房子的一个唯一的标识,就是主建。

然后我们的NETITUDE和longitude呢,就是我们的具体的一个房子,它的一个具体的经纬度,然后manager id呢就是说是这个房屋的中介,他的一个信息也是类别类型的中介id。

然后photos呢是这个图片类型的,就是这个房屋的照片,price呢就是这个数值类型的,是这个房屋的一个具体价格,房屋的一个具体价格,然后这个photos呢就是我们的一个具体的一个。

房屋的一个具体的照片,price呢就是它的一个具体的一个我们的一个价格,然后street straight address呢这个街道信息,然后interest level呢就是我们的具体的一个标签。

我们具体的一个标签,那么这个就是我们的一个具体的数据集啊,他就是长这样的啊,长成这样的,那么我们这个地方,其实是把每一个具体的一个字段呢,给大家解释了一下,那么我们来看一看我们的原始的一个数据集啊。

它就长这样的,我们的每个具体的一个嗯,这个数据集每个字段,我们的bathroom有1。5个,哎,为什么有1。5,为什么有1。5个,这个地方呢其实是这样的啊,我们厕所是1。5个的话。

就是有可能是这个厕所呢是有公用的,或者说有的厕所呢只能是用来嗯,相当于是呃这种洗手的啊,就相当于是这种呃共用的厕所,或者说是嗯对半,这种厕所都是都是有的啊,因为我们租房的话,这是很常见的。

然后我们的卧室个数呢一般是整数的,然后我们B0id对吧,这种id类型的这个这个其实是一个字符串,这个其实是个字符串,但是呢其实它也是一个类别类型的好嗯,created是我们的时间对吧。

然后这个地方的features是我们的一个list,好,然后呢,如果各位同学就是说想对我们的一个,就是说我们的一个就是具具体数据集,想要进行深入的理解呢,我们的一个具体的一个额数据集也给了大家啊。

然后你可以自己一下去看好,我们在做一个数据集的一个理解的话呢,就是说我们首先嗯,也可以从我们的具体的统计值做一个判断,我们这个地方呢,就是说我们在做一个数据的一个处,理和分析的时候呢。

我们是非常建议你从一个整体的一个分布的角,度做一个啊统计以及做一个分析啊,因为我们在一个具体的一个,对于我们的具体的数据集,它基本上就是一个行列的一个形式,这个地方我们的一个列呢。

就是我们的一个具体的一个字段信息,比如说这个房屋所有房子的一个bedroom,或者说它的bathroom的一个信息,我们对于这个字段我们是可以做一个统计的,就是说可以得到它整体的一个分布。

或者说得到它整体的一个规律,得到这个规律之后呢,我们可就可以用这个统计的一个信息,去对我们这个字段进行描述,这个地方呢就是说我们在做一嗯,在数数理统计或者概率论里面。

我们是可以学习到一些具体的一个数值分布,随机分布的一些嗯,就是说常见分布的一个呃一些情况对吧,我们有这种均匀分布,被阻力分布,我们波动分布等等,那么这个地方我们的不同分布。

其实它都是可以做一个相互转换的,对吧好,那么这个呢我们就不做展开讲,因为这个其实不是我们的重点啊,我们其实就想给大家就是说说清楚,我们具体的数据集呢,我们其实是仍然建议将这一个字段,把它单独拿出来。

然后做一个具体的统计,我们在做一个具体统计的时候呢,我们经常会做这样一个统计,就是说99%的一个数据,他是怎么样的,或者说99%的同学,他的一个成绩是怎么样的,或者说我们就是说你的一个成绩。

已经进入了前1%,这个地方的一个99%和1%,他在说什么呢,其实它本质就是在说一个具体的一个嗯,分位点的一个信息,或者说是一个统计的一个分位量,在这个地方就是说你的一个具体的一个统计值。

99%的数据都处于某个范围,或者说你的一个具体的一个数,它的一个字段,它的一个你是不是位于在某个范围内,这个地方呢,我们常见的这个百分比啊,就是这种分位点的一个含义啊。

当然我们也可以做这样一个具体的一个处理,就是说我们可以统计我们的,25%的分位点,50%的分位点,这个50%的分位点,又叫我们的中位数对吧,然后我们的75%的分位点,然后就是说把某一列单独拿出来。

计算这个我们的三个分位点,然后计算完成计算这个分位点之后,然后做什么呢,我们可以得到一个IQR,I q2,其实它是等于我们的Q3减去我们的Q1,就是我们75%的分位点的一个,数值取值。

然后减去25%的分位点的一个取值,得到我们的IQ2,然后通过我们的一个IQR,可以得到一个具体的一个上界和下界,这个地方其实是这样的啊,我们的一个具体就是这样的,我们的一个上界呢就是我们的一个Q3。

加上1。5乘以IQ2,Q1呃,我们的下界呢就是Q1-1。5,1。5乘以IQ2,这就是我们的上下界,这个上下键可以用来做什么呢,我们的这个上下键可以用来做一个缺额,我们的一个离群点的一个判断。

也就是我们通过这样的一个计算,得到我们的上下界之后呢,我们的这个范围内的一个数据,就是我们认为它是合理的分布的,然后在这个范围内之外,比如说小于我们的下界,或者大于我们的上界的数据。

我们就认为是我们的一个离群点,离群点,那么我们就可以通过这个统计的方法来识别,得到我们离群点,那么这个镶嵌图它还可以用来做什么呢,它还可以用来做,就是说得到我们的具体的一个数据,它是嗯怎么分布的。

因为这个地方我们有三个分位点啊,这个相线图在这个英文名字里面叫这个box pts,对吧,箱线图它为什么叫相信图,其实就有点像那种拉杆箱的样子,我们这个地方的25%的一个位置。

和50%的位置以及75%的位置,那么我们如果这三者分布的一个位置,不一样的话,我们得到的就是它原始的一个曲线,原始的分布就是不一样的,对吧,假如说我们的具体的一个,中间的一个最核心的一个箱子。

他的100我们的中位数不一样,中位数的位置不一样对吧,那么其实我们得到的一个取原始的分布的,形态也是不一样的,这个相当于是我们的具体的一取值,我们从25%到50%的,25%的一个。

相当于是整体数据及25%的一个分布,都是位于在这个取值的范围内,就是说在这个范围内,如果这样呢,相当于是均等的,相当于是整体的一个分布是比较均衡的,就是类似于这种正态分布的,没有没有左偏。

那么如果是这种形态呢,就是有点像我们的右偏,也就是说我们的这一部分的一个数据集,它是分布的一个比较密集的对吧,相当于是一种右屏的状态,所以说呢我们通过镶嵌图呢,是可以一方面可以识别出我们的数据集。

它的是不是有离群点,另一方面呢也可以得到我们的具体的一个,数据的原始的一个分布的形态啊,那么对于我们的数据集,我们如果是想要做一个分析,我们怎么做呢,就是非常简单啊,做一个数据分析其实都是非常简单。

我们可以分析一下我们的具体的每个字段,它的一个出现的一个次数,就是我们选择得到某一列,然后算一算某一列,它具体的一个整体的分布的一个规律,比如说我们画一个bedroom的一个count pose。

就是我们画一个出现次数的一个统计的一个嗯,柱状图,我们bedrooms为零的一个房,房子有多少个,bedrooms是唯一的一个房子多少个,以此类推,这个地方呢,我们你可以画这个具体的一个直方图啊。

或者柱状图,当然也可以通过我们的一个pandas里面的,describe函数来做一个描述性的一个分析,pandas的一个describe函数呢,就是嗯可以可以很方便的计算得到某个字段。

它的一个具体的分位点的一个情况,它的一个最大值最小值25%分位点,50%分位点以及75%分位点,各自的一个取值啊,各自的一个取值,那么类似的我们也可以看一看我们的bathroom。

他的一个具体的一个嗯就是的分布的情况,在我们的bathroom,取值为一和取值为二的房子是最多的对吧,其他的就是1。52。5,3。5,4。5的房子都是比较少的,那么我们对于我们的具体的一个可视化呢。

我们也可以对我们的一个数值类型的,比如说我们的一个经纬度NTITUDE,和我们的NTITUDE做一个具体的一个可视化,那么我们这个地方是对NTU做一个可视化,这个地方其实它绘制得到的是一个密度直方图。

在英文缩写里面叫KDE,相当于是我们的一个color density的呃,我们的一个呃就是图对吧,相当于是一个密度直方图,在这个图里面呢,其实它本质绘制得到的一个形态呢。

跟我们的这种柱状图其实是差不多的,只不过这个地方我们的一个柱状图呢,它其它的一个具体的一个,这个类别的一个取值空间,它的一个相当于是取值空间比较小,类别取值空间比较小,如果是这种数值的话呢。

我们是数值的,它的一个类别取值空间就比较大,因为我们的数值,它的一个就是相当于是它可以分的比较离散,对吧,那么这个地方我们可以发现,在这个我们的这个经纬度的绘制,得到的密度直方图里面有一些位置。

它的一个房屋它可能是比较集中的对吧,在这些位置,那么在这些位置里面,就表明我们的这个有可能我们的一个房子呢,它可能是处于集中在某些位置,集中在某些位置对吧,好我们的NTITUDE和longitude。

我们可以对于数值类型的,我们可以画一个密度的密度直方图,那么类似的啊,我们对于我们的这种嗯price price呢是我们的价格,我们也可以绘制这种图图形,就是我们的这种密密度直方图,价格呢。

它就是我们的一个,相当于是跟我们的一个金钱相关的对吧,跟金钱相关的这个呢其实是这样的啊,我们的现实生活中呢,就是他有点像这种20%的人呢,掌握80%的财富,这是2080的一个原则。

或者说20%的一个房子,他都是就是说哦,80%的房子,都是在20%的一个价格区间内,它都是我们的一个这种分布啊,都是严重的左偏的,我们的价格啊,它是这种只要跟金钱相关的,它往往都是左偏的。

而且都是跟我们的2080,这种原则是匹配的啊,也就是说20%的,80%的房子,都位于20%的一个价格区间内好,那么这个地方呢就是说我们的一个价格,其实跟所有跟金钱相关的字段,它的往往都是左偏的。

那么这个左偏的呢,就是说我们如果遇到一个字段,它是跟金额相关的,而且是左偏的呢,我们是可以把它做一个处理的,我们怎么做一个处理呢,比如说我们把它做一个取log,这个就是一个很好的处理。

相当于是去除他的一个偏态的这种效果,把它尽可能转为正态分布,因为我们也知道啊,在做一个具体建模的时候,如果这个字段它是正态分布的,那么我们很容易得到这个它的一个模型的一个,无偏估计对吧。

如果我们的数据集,它的一个具体的字段是这种非正态的,那么我们得到的一个模型,就很难去得到它的一个参数的无偏估计,那么我们接下来看一下我们的BI0id,BI0D呢,就是说这个具体的一个建筑物的编号。

建筑物的编号呢其实它是一个字符串类型的,相当于是一个嗯,我们把这个具体的一个房屋的一个信息,把它进行编码的字符串,这个地方呢我们把它做一个统计的时候呢,他其实这个取值空间是蛮大的,因为这个地方。

其实他虽然说是一个类别类型的字段,但是呢这个地方的类别类型字段呢,它是加有id这种成分,在这里面id是什么,Id,就是用来标示某一个具体的一个他的一个身份,对吧,等于身份证号。

你之后看到的跟我们的这个id相关的字段,它往往的取值空间都非常大,虽然说他是一个类别字段,它的但它的取值空间是非常大的,那么我们在做一个具体的一个统计的时候呢,我们就可以统计一下。

这个地方就不建议画这个密,我们的一个柱状图啊,因为他的一个取值空间非常大啊,所以说画出来也并不是特别好看,你在做这个地方呢,我们可以统计一下它的一个具体的一个value counts。

就是他的一个次数啊,做一个统计就行了,我们可以看一下,我们b i d i id取值为零的情况下,有八千二百六十八十六套房子,这个呢其实我们很清楚的,可以看到这个地方的零,其他的一些BNNI。

一键都是这种等长的字符串,这个说明什么呢,这个地方的零它就是一个去我们的一个缺失值,缺失值我们的一个Missing value,或者说是一个默认值,天天是我们这个地方是没有填这个变量id的。

某个房子是没有填这个变量id的,这个地方呢,就是说我们通过一个数据分析,是能够找到某个字段,它到底是就是说有没有缺失值,有没有这种具体的一个啊分布的情况呢,然后呢我们对这created。

这个created就是我们的一个日期类型的,时间跟时间相关的,如果是跟时间相关的呢,我们就可以绘制类似于这种图像,我们的X轴是我们的日时期,Y轴,就是说在这一天他所发布的一个房屋的一个。

具体的一个个数对吧,也是类似于这种柱状图的这种形态,那么我们可以看出我们的具体的这种房屋,它所发布的一个时间有点儿其实有规律的啊,对吧,是有规律的,那么这个呢其实是一周一周的波动,那么类似的呢。

我们如果是遇到了这种文本类型的数据呢,我们是可以这个与文本类型的数据呢,我们是可以做一个云图,word cloud云图,云图的含义呢,就是说我们的一个具体的一个在绘制的时候呢。

如果这个文章里面这个单词出现的次数越多,那么它的它的一个字体就越大,就是这个意思,没有其他意思,云图其实很多同学都知道,我们这个地方呢,通过云图我们就知道。

大部分的房子呢可能是位于这些wall street啊,或者BDVA这些对应的一个位置对吧,那么我们也可以对我们的一个display address啊,做一个统计。

这个地方呢display address呢,其实他也是这种字符串类型的,那么对于这种字符串类型的呢,我们也可以做一个统计得到的统计,得到一个统计值啊,然后做一个可视化,比如说我们的一个具体的一个。

做这样一个可视化,就是说我们的一个具体的一个嗯房子,如果它出现了一次,他就是说对应的一个地址,类似于就是说只出现了一次的这样的地址的,一个房子,他拥有多少个对吧,其实这也是一个非常非常典型的一个。

左偏的一个分布,也就是说我们大部分的房子呢,它的一个出现地址啊都是比较独立的,都是比较独立的好,那么我们来看一看这个features,features呢就是一个list类型的,对于这种历史类型的呢。

我们可以统计一下这个房子,相当于是它是这个它的含义,就是这个房子的一个特点对吧,卖点,那么这个卖点呢你就是我们的一个tag,那么我们可以这个地方呢可以统计一下,这个features是它具体的个数。

大部分的房子的一个特点的个数,就是他的tag个数是在00~0到六之间的对吧,然后呢大于六的也有,那么对于我们的这个features呢,我们也可以画一个云图来看一看,大部分的一个tag呢。

就是说可以dog dogs aloud可以养狗对吧,elevator我们有电梯的,Dman,有门铃的对吧,然后我们还有这种什么可以养猫的,有健身房的等等等等对吧,这个就是我们的features。

然后这个地方我们有个manager id,manager id啊,这个地方就是一个中介的id啊,也是一个非常规整的一个字符串的类型的,那么我们接下来就是我们,其实刚才是将我们的这些字段。

大致给大家讲了一下,然后我现在问大家一个问题,就是说,如果大家通过我们的具体的数据集的一个理解,你会认为哪些字段对我们的具体的一个房屋的,一个热度是非常非常相关的呢,也就是我们给大家讲的。

这些具体的一些字段之后,你会认为哪些字段,会影响到我们的一个具体的房屋的热度呢。

也就会影响到我们的标签呢,对有没有同学想回答的,对呃soft的同学以及莫西莫辛同学,以及两位手机用户同学,有没有想回答的,如果你看了之后,看了我刚才给大家讲的这些字段之后,你有没有觉得。

哪些字段可能会跟我们的一些标签有相关呢,有没有同学想回答的,那么这个地方呢就是说我们刚才也讲了,在讲这个数据集之前,肯定我们的这个价格位置对吧,都跟我们的一个具体的一个呃,房屋的一个标签是相关的。

其次呢还有可能跟我们的标签强强相关的,是我们的这个B20id,以及我们的manager id,这个BDD,这个B点D呢和manager id都是这种id类型的,id类型的呢。

其实他都是很有可能跟我们的标签强相关的,比如说某个中介,他发布的房子都是比较优质的房子对吧,那么这个地方可能他的一个房子的一个,热度都比较高是吧,好那么我们就继续,那么我们在做完具体的一个可视化之后呢。

有可能有同学就觉得,可视化是不是就是我们刚才所说的这么简单啊,其实可视化并不是说是这么简单的,我们先给大家讲一讲这个可视化啊,可视化呢这个地方其实在Python环境下呢,也有非常多的一些具体的库啊。

我们可以很方便的可以进行使用,比如我个人比较喜欢的就是这个con这个库,con这个库呢它是基于matt plot lib的,然后可以很方便的用来绘制这种,就是说我们的这种数据的一个分布的。

这种可视化的图形,他在做一个画图的时候呢,我们在做一个画图的时候,其实你可能第一次看这个图觉得很难看懂,其实我们一步一步可以把它剖析一下,我们这个图呢其实它包含了三个字段。

X轴Y轴以及我们的这个clue,这相当于是smoker它的具体取值,那么这个地方我们在看图的时候,首先看一下我们的X轴,X轴是我们什么,我们X轴是对我们的一个day,做一个分类的情况下。

然后Y轴是我们的total b啊,具体的一个取值,然后这个地方呢,其实他还做了一个具体的一个分类,也就是说我们的day取值为我们的TUESDAY的情况下,我们我们的smoker取值为yes。

或者说取值为low对应的样本,然后呢我们在这个取值不同的情况下,我们在对我们的total b啊,绘制一个得到一个象限图对吧,那么我们在做一个具体的画图的时候,或者说看这个图形的时候。

你要弄清楚这个具体的画图,或者说图形里面它到底包含了多少个元素,这个其实是非常关键的啊,非常关键的好,这个呢我们的这个box blox呢,它其实在做绘制的时候,其实是不单纯的对一个字段进行绘画图啊。

相当于是这个地方哦,我们是使用两个字段进行分组之后,然后分别绘制得到了我们的一个象限图对吧,然后类似的啊,然后类似的我们再给大家找一个啊,嗯这个地方对,小提琴图也非常典型。

对我们的day和我们的一个smoker进行分组之后,然后绘制得到这种分布,这个分布呢它非常像一个小提琴,它是这种竖竖着的一个分布,然后这个分布这一部分。

这一部分是我们的day取值为TUESDAY的情况下,smoker取值为yes的情况下,我们的toto be要整体的一个分布,然后这部分呢就是我们的一个day取值为TUESDAY。

smoker取值为NO的情况下,我们TOTOBI的一个整体的一个分布,它其实是嗯,相当于是也是一种对两个字段进行分组的,情况下,然后再去看一个具体的取数值的一个,分布的情况,它比这个镶嵌图呢。

可能嗯就是说更加直观一些啊,但是呢这种小梯形图呢,它不能看出我们具体的一个数据,它有没有离心点啊,他其实是看只能看到这整体的分布的情况好,那么类似的还在simple那库里面呢。

其实有非常非常多的一些画图的函数,都可以就是很方便的用来做一个画画图啊,那么这个地方呢其实是有很多的一些库用,都可以用来做画图的,比较典型的就是说如果是学Python的话,最最嗯就是基础的画图的库呢。

是这个MATPLOTLIB,他是最为底层的我们的画图的库啊,最为底层的画图的库好,然后呢如果是基于Macbook lip呢,就是由这个我们刚才所讲的这个CBSBL呢。

这个库是基于match prolip进行二次开发的一个库,然后可以快速的绘制,得到我们的这些很漂亮的一个图标,也就是说我们他其实是调用这个match pouch live,做一个画图啊。

所以说它是一个高层的一个啊组件,然后呢还有一些其他的库啊,比如说这个我们的PLOTLINE,或者说我们的BOKEH嗯,这些库呢都是比较高阶的库,它可以嗯跟我们的浏览器啊进行集成啊。

然后做这种可就是说这种叫带有交互式的图啊,都是非常非常方便的,还有一些呢,就是我们对我们的具体的一些地理位置,做可视化的图嗯,比如我们的这个地方,FOAIUM都是这些图啊,都是可以嗯。

相当于是不同的数据类型,我们做不同的可视化好,然后还有一些对我们的缺失值,做一个可视化的啊,我们在之后的课程也会给大家讲的好,那么这个地方呢,就是说有很多同学在学了这些画图之后呢,就可能是会觉得迷糊。

或者觉得我第一次接触,你给我讲这么多图干什么,其实这个地方是这样的啊,我们的本质的可视化呢,就是在于我们如何是用一种一种图,或者合适的图,对我们的一个字段做出一个具体的一个可视化,做出个统计。

比如说我们想要对一个具体的一个数值,做一个可视化的话,其实我们是可以画出它的一个柱状图的对吧,一个数值在不同分组的情况下,它去写一个可能分布的情况,或者说你不画这个柱状图,你就画这种密度图。

其实本质是一样的,就是它展示的一个形形态啊,以及具体的一个形状是不一样的,类似的你可以画这种我们的累积分布图,现在那有点像我们的一个CDF对吧,从我们的一个相当于是,小于我们的180的一个数数据。

它大部分就是它的比例是在0。05对吧,接近0。05,然后呢,小于190的数据呢,是在0。2 20%的比例,然后一步一步增加到一,这种相当于是画会值得到我们的一个CDF对吧,我们在概率里面的CDF。

就是说我们的数数据它整体是如何进行分布的,然后呢我们也可以绘制得到这种散点图,绘制到散点图图之后呢,我们可以散点图,它是二维的对吧,我们可以绘制的它它绘制到它单维的。

相当于是它的边缘分布的密度直方图对吧,这个都是非常常见的一些画图方法,通过这些画图方法呢,我们就可以将我们的具体的一个数值,以及相关的资料呢,把它进行用合理的方法给他展示出来。

好额那么我们休息56分钟好不好,我们休息56分钟,然后继续我们休息到这个9。02,然后我们回来好不好,然后我们休息一下好,然后大家如果有什么问题的话呢,你可以在我们的一个聊天框里面打字,让我知道啊。

好我们休稍微休息几分钟好不好,好嗯然后我们准备回来额,然后各位同学对我们刚才所讲的内容,有什么问题吗,我看大家都比较沉默啊,如果大家有什么问题的话,也欢迎提问啊,因为嗯你有问题的话。

可能学的会更靠更快一些,不然如果你没有问题的话,相当于是嗯我相信呢可能你没有问题,但是呢如果你真的有问题的话,那可能就是第一时间提出来的效果会更好一些,对好,那么我们就继续好不好好,我们继续啊。

嗯然后呢,我们接下来看一看我们的一个特征,工程与实践啊,我们在做一个具体的一个嗯,具体的建模的时候呢,我们在进行具体建模的时候,其实我们是给到我们的一个数据,我们是需要构建一个具体的一个模型对吧。

那么这个具体的一个数据呢,其实我们的一个数据,它可能的一个类型呢是多种多样的,我们在这里面呢,其实我们是首先来看一看第一种数据类型,是类别类型的,类别类型的呢,就是说我们其实它是一个嗯非常常见的。

我们的数据的一个类型啊,就是说我们的数据字段它是这种类比特征嗯,比如我们常见的这种个人信息,性别,城市省份,民族户口类型,这个里面都是我们的具体的一些呃,类别类别的人,然后我们的颜色对吧。

颜色里面的取值有红色,白色等等等等,国家里面有具体的取值,中国美国对吧,然后我们的动物这个地方呢,其实我们需要注意,就是说我们的类别,它有一个具体的取值空间,这个取值空间呢就是它具体的一个。

就是说这个类别它能够取值的这个字符串,相当于是这个类别是一个set这个集合,这个取值空间呢就是它的一个具体的一个元素,类别特征呢是我们在做数据处理的时候,在我们在做建模的时候。

任何特征任何时候都要做处理的一个数据,因为类别特征它往往都是这种字符串类型的,我们对一个具体机器学习模型啊,它是只能接受这种数值类型的一个计算,我们可以回想一下我们的线性模型,我们神经网络对吧。

其实它本质只能接受我们的一个数字类型的,一个数据,所以说类别类型呢,数据呢我们在做处理的时候呢,我们肯定是要把它做一个编码的好,另一类型的数据呢,它的一个具体的一个取值空间,它有大有小,对吧有大有小。

如果是小,我们都是就是说这个没什么问题,如果是比较大的话,就有可能有问题,这个地方的大呢,就是说如果一个类别它的取值是100取值,关键是一百一千一万对吧,也就是说取值具体的取值可能性越来越大。

我们这个地方呢取值的可能性越大,并不并不一定是它的缺点啊,就是它原始的数据集就是这样的,我们再做一个具体的这个取值,就是说我们在做一个具体类别,类型的编码的时候,如果这个取值空间非常大的话。

因为他这个特征呢我们叫做高基数特征,对于这类特征呢,我们如果做处理的话呢,我们就非常容易出现离散的一个数据,离散的数据就是说他是一个稀疏的啊,会把它处理成这种稀疏的高纬的一种情况。

而且对于我们的一个类别类型的这个字段呢,我们是很难对它进行一个缺失值填充的,如果他是有这个缺失值的话,我们是很难对它做一个填充的,因为这个比如我们某个学生,它的一个具体的一个性别作,有的也就是是缺失的。

那么如果是性别是缺失的话呢,我们是很难对它做一个填充的对吧,因为我们填充的话,其实很容易就把它填充错误了,在我们的类别类型的里面呢,我们是有这两类,一类是我们的一个无序类别,一类是有序类别。

无序的呢就是我们的具体的一个取值,它的一个次序他是没有这种大小之分的,也没有这种就是说这种关系啊,就相当于是相互平等的,如果是有序的类别,就相当于它的具体的取值是有这种大小关系的,你觉得他的取决于这种。

相当于是比如说这种情感强弱,或者说这种我们的一个得分的情况对吧,嗯是我们的硕士本科硕士博士对吧,对,具体的一个学历的一个从低到高对吧,还是有序的,那么我们在做一个具体的一个编码的时候呢。

我们这个地方是给大家讲一些比较基础的啊,先给大家讲一些比较基础的编码,我们首先呢给大家创建了一个data frame,这个data frame呢就是一个我包含了这个学生的id。

学生的一个国家education教育信息,以及我们的一个目标编码,这个target就是我们的啊,这个target就是我们的目标啊,应该是我们的一个标签,其他的列就是我们的一个具体的一个。

学生的一个基础信息,然后我们就用这个表格来完成,我们的具体的一个类别特征的一个编码,对于我们类别特征的编码其实是有非常多的啊,这些具体的编码方法的,那么我们只挑选你们非常典型的给大家讲啊。

其他的呢我们其实用到的场景会很少,首先呢我们来看到看到的是这个one one hot,完后程呢它又称作叫做独热编码,独热编码就是我们对这个具体的一个嗯,一个取值。

把它转成这种one or k is hot的这种形式,这个K呢就是我们的具体的一个类别,它的一个取值的个数,取出空间的大小,比如说我们这个地方的education,对于education这一列。

我们就对它进行编码的话,如果它原始的话是有三个取值的话,我们对它进行编码之后,我们的这一这一列就把把它转成了一个三列的,这种情况,三列,那么玩hot呢。

这个地方它原始的这个学生他是一个master education,是等于master的,那么这个地方我们在做one hot之后,他就转变成了一个1×3的这一个,行向量的吧,我们相当于是增加了三列。

然后在这一列把它复制为一其他位置复制为零,那么类似的其他学生的一个信息呢,也是在某一个位置是一其他的位置是零,one hoch这种形式呢,它是相当于是把我们的一个原始的一个字段,把它展开了展开了。

相当于是每一列,每个取值做的这种二进制的编码,玩火者呢比较适合用在这种线性模型里面,它比较适合用在这种无序的类别,做一个编码的时候,因为我们在做完one horse之后,我们的一个类别的取值的一个大小。

仍然是相互平等的,比如说我们这个地方,00010001和100,这是我们的本科硕士博士,他具体在做编码之后转得到的向量,那么他之间的距离仍然是相互平等的,相同的对吧,仍然是保持着这个无序的,完后程呢。

它的一个优点,就是说他在做编码的时候是非常简单的,是能够直接将我们的类一个类别特征,进行有效编码的,但是呢它的缺点就是说,它很容易导致我们的一个维度会爆炸,假如说我们这个字段。

它的一个取值空间是100的话,我们做完完后之后,这个维度就增直接增加了100,然后呢再增加一维度,增加的同时呢,我们的具体的一个数据集呢,也会变得非常稀疏对吧,这个地方相当于是三列里面。

只有相当于是1/3的数据是非非空的,如果这个具体的取值是取值空间,非常更大的情况下,我们的这个系数性会更加稀疏,我们在这个具体实现的时候呢,我们可以从pandas的get dain函数。

或者说从SKN的one hot encoder,来做我们的一个具体的一个编码,就是one或者是编码,第二类呢是我们的label encoding,Label encoding,就我们标签编码。

标签编码呢它是将我们的一个具体的一个类别,把它用一个独立的一个数值id做一个转换,这个地方呢,就是说我们把这个具体的country china编码为零,USA编码为一,UK编码为二,JPM编码为三。

以此类推,他呢他那个方法呢,就是说我们的一个具体的一个操作呢,Nel encoding level,encoding原始的具体的一个应用场景,就是对label做的,就是对我们的一个标签做的。

这个地方呢我们的label label coding呢,它也可以对我们的一个字段做一个编码,我们字段我们可以把它编码为具体一个数值,也就是说我们用一个具体的数值,来代替它原始的字符串的一个取值的情况。

这个地方我们的一个label encoding呢,它比较适合在数模型里面进行使用啊,比较适合在数模型里面进行使用,它的一个优点,就是说它不会增加这个类别的一个维度嗯,就是说我们原始的这个具体的一个呃。

字段是一列的,我们在做一个编码之后,它仍然是一列对吧,它不会增加我们的数据的维度,LIBENCODING比较适合用在有序的类别,就是说如果是原始是这种,有有这种大小次序的话。

我们在通过label encoding编码之后,他仍然也会保留这种次序啊,Lil encoding,如果在做一个编码的时候,你没有指定它的大小次序的时候,他可能是进行随机编码的这个地方。

我们第一个出现的一个取值是china,china是零,相当于是我们把它第一个出现的这个取值,把它编码为零,第二个编码为一,使用这个出现次数,他的一个先后来求编码对吧,其实这个地方。

如果我们没有指定它的大小关系呢,这种编码方法,它就会改变我们的一个取值的一个大小关系,相当于是破坏它们之间的一个次序啊,在我们使用label encoding的时候呢。

我们可以用pandas的factorize,或者说用s client的一个label encoder来做一个操作,我们还有的呢,就是我们这种BENCODING2进制编码,二进制编码呢。

就是说我们在做一个编码的时候呢,我们可以对某个字段类似的,也非常类似我们one hot的这种操作,我们可以把它转为这种二进制,把它转,先把它转为一个编码,比如说先把它使用这种label encoder。

作为转成一个具体的数值,然后转为数值之后呢,然后把它进行一个二进制二进制的编码好,by terencoding呢,其实它的一个操作,其嗯就是说跟我们的一个one hot是非常类似的啊,他但是呢他也会。

他会也会带来这种次序的改变啊,因为one hot他其实是没有改变这种大小的关系的,但是呢这种binary coding呢,它其实是加入了这种大小关系的一个啊,就是说改编的barry encoding呢。

它的可以视为这种完后台一个替代品啊,就是整体的一个维度会变变得更加低一些,还有一类呢是我们的一个frequency encoding,或者说叫做我们的一个count encoding。

它的一个具体的操作呢,就是说我们是可以把这个具体的某一列的,一个具体的取值的一个次数,用来做它原始的一个编码,在这个地方,我们如果是对我们的这个country这一列,做一个编码的时候。

china出现了两次,我们把它变某12UC出现了两次,我们又把它编码为二,UK呢出现了一次,我们把它编码为一,就相当于是用这一列这个具体取值,它出现的一个次数,然后做一个具体的一个嗯,相当于一个替代啊。

这个就是我们的一个具体的一个操作,content encoding或者fency encoding呢,你还可以做把它换算成频率啊,就不不仅仅是次数啊,把它换算成频率也行。

content encoding呢,它的一个操作其实是嗯,有点像基于这种上帝视角,也就是说它不是基于某个样单个样本,它是基于整体的某个字段做一个统计的,所以说呢这种统计的方法呢,它比较适合我们的一个嗯。

就是说分布一致的情况下,比较适合这样进行操作嗯,这也是他的一个缺点,就是说如果分布不一致的情况下,我们的一个counting coding,他得到的结果就不一致了,比如说我们的训练集。

和我们的一个具体的测试集,如果他两个字段的一个取值的分布是不一样的,话对吧,那么你在这个地方做content encoding,其实它的一个具体的一个结果,就会存在一个冲突,就会存在一个冲突。

好抗体口令,那这个优点呢就是说它是非常简单的,不管是有序编码还是无序编码,都可以用来进行使用啊,都可以进行使用,好我们继续,那么coding coding呢在做具体的实现的时候呢。

我们就是用这个嗯就是统计它出现的次数啊,不管是用value counts啊,还是用什么方法统一到分的次数就行了,好还有一类呢就是我们的一个target encoding。

target encoding呢就是我们的一个具体的一个操作呢,就是我们是统计一下我们的具体的这个字段,它对应得到的一个标签,它的一个具体的一个取值的一个情况,这个呢。

就是说我们在做一个具体的一个操作的时候呢,比如说我们对我们的一个CTRL字段,做一个target encoding,如果是对我们的CTRL字段做一个targeting coding呢。

我们其实本质就是对我们的一个数据集呢,我们是统计一下这个country字段,它对应的一个label的一个取值的情况,比如我们的一个contest的china。

它对应的一个label就是我们的target分别是多少,一和零,我们对它取出一个均值就很好,然后就得到0。5对吧,USC0和一,然后求一个均值也是0。5,这个地方呢,其实本质就是对我们的一个类类别取值。

它对应的一个标签的一个关系,相当于是求它的一个均值啊,求一个均值,具体的一个实现呢,就是说我们对客户端我们的某一列,然后求它对应的一个标签的一个均值,然后就得到他的一个具体的一个标签编码。

标签编码其实它非常非常适合用在什么场景呢,就是说我们这个地方的标签编码,其实得到的一个结果,有点类似于一个具体的一个均值,或者说一个相应的一个概率,我们的一个具体的一个,它到底是什么含义呢。

就是说我们在做一个具体建模的时候,其实我们的模型是很难去理解他,这个china到底是什么含义的,但是如果这样说,CTRL等于china的同学,他的一个具体的一个标签,整体是等于有可能是零点,就是说0。

5的,那么这样呢是更加有意义的,这个就是我们的标签编码,它其实是让我们的一个模型来,学习起来更加容易,但是呢他给人1coding,他还有一个缺点,就是说它可能会让我们的一个标签信息。

标签信息呢给他泄露出来啊,因为这个地方我们的一个具体的一个看一看,我们这个UKUK呢,这个地方我们只有一个一位同学,这个地方我们如果是把它这种标签编码之后,其实本质我们是会将我们的一个具体的一个嗯。

标签信息给他泄露出来对吧,我们相当于是直接把他的标签给它编码进来,它其实是非常容易过滤活的,因为它其实是将我们的一个标签性,标签信息呢给它泄露出来,它的具体的实践方法,其实本质也是这种次数统计啊。

分组聚合做次数统计就行了,好那么在我们的一个具体的一个嗯,就是说类别特征的编码的时候呢,就非常建议做这种one或车啊,never encoding啊,count encoding啊。

和MENCODING,这四类编码,就基本上是可,就说可以涵盖大大部分的场景的啊,好,然后呢,如果我们是有这个具体的一个,数值类型的特征呢,其实我们也是需要做一个处理的,数值类型的特征呢。

它也是在我们的日常生活中,非常非常常见的数值类型的特征,我们有这个年龄乘积,经纬度对吧,它都是我们的一个数值类型的特征,数值类型的特征呢,它其实包含的一个信息量会更多。

因为它的取值的一个克数其实就是会更多,但是呢它会存在一个具体的一个缺点,就在于数值类型的一个字段呢,它很容易出现这个异常值和离群点,好我们对于数值类型的特征呢,我们怎么做一个编码呢。

首先是可以做一个缩放和取整,缩放和取整这个其实是非常常见的,我们如果是对于这个地方,我们新加了一列A级,这一列,A级这一列就是我们的一个嗯年龄这一列,如果对于年龄这一列,我们其实是可以把它做一个统。

具体的一个提取它的一个信息的,edge这一列它原始的取值是34。5,28。9,19。5,23。6对吧,那么这个地方我们是可以对我们的A级字段,做一个相当于是把它做一个取整,34。0,29。0对吧。

把它转变成一个整数,或者说把它除以一个十,然后把它转成整数做一个缩放对吧,那么这个地方为什么要做这样一个缩放呢,为什么要做这样一个复缩放呢,其实这样一个缩放的目的,相当于是我们是将这个具体的数值。

它的一个绝大部分的一个信息给它保留下来,零零是我们相当于是把他的一个数值的,一个主要的一个信息给他保留下来,因为这个地方我们34。五二十八。9,其实这个数值它的一个信心其实是非常多的。

在这个地方呢我们的信息越多,其实并不一定表明它的一个效,最终的效果是越好的,因为我们的一个信具体的一个信息,它是越多的情况下,我们的模型反而更难去寻找得到这些这个字段,它的一个共性。

如果我们是把它做了一个缩放之后呢,比如说这个地方34。5把它转为三,28。9,把它转为二对吧,相当于是这个地方相当于是小于20岁的,一的一个取值是小于20岁的二的一个取值呢,就是小于30岁的对吧。

那么如果是通过通过这样一个一种缩放,你就会发现我们的一个具体的一个取值,它就会更加有意义,它会,它其实本质是将我们的一个大部分的信息给它,保留下来,为何日本是零,英国是一,你嗯这位同学啊,在这吗。

UK啊,是是说的这个图是吧,japan它的一个具体的标签,它就是一个对应得到的是零啊,就一个零啊,然后他的一个均值不就是零吗,UK的话,它的一个具体的一个就是说取值就是一啊,一个一啊。

然后他的标签就是一啊,我们这个地方就是china,它有两个一和零,然后求一个均值,就是0。5嘛,就是这样的一个操作,对其实就是这样的啊,应该是group by我们的country。

对我们的country具体的取值做一个分组,然后求求它的一个对应分组,下面的target是一个均值,是这样一个含义,好,嗯然后然后我们就继续啊,对于我们的数值呢,其实我们还可以做一个非常常见的操作。

就是做一个分享,就是对于一个数值呢,我们是可以把它啊划分到大于某个取值,小于某个取值,比如说我们对我们年龄,我们可以把它划分是不是小于20岁,是不是位于20岁到25岁,是不是位于25岁到30岁。

是不是大于30岁,这样按照这些具体的逻辑把它做一个分享,这样呢其实是非常常见,也非常有效的一种操作,它其实是可以将我们的一个数值的一个特征,把它做一个离散化,但是呢他其实这样的操作呢是需要人工参与的。

需要人工进行参与的,所以说呢它其实是这个代码,其实我们需要手写的啊,就是我们的这这个具体的划分的方法,其实是需要人工智能参与的好,我们在做一个具体的数值的一个操作的时候呢。

其实我们也是需要将我们的一个也要考虑到,我们的具体的数值,是不是嗯需要做一个具体的一个缩放,这个缩放呢,其实本质呃,是可以把它视为我们的具体的一个额,数据预处理的步骤,数据预处理的步骤。

因为我们的具体的数据集呢,其实这个数值啊,它往往就是嗯不一定是我们的一个具体的一个,呃就是嗯一个比较规整的范围,我们其实呢是需要把它进行,转换到一个规整的范围内,我们在进行一个如果是把我们的具体数值。

把它转换到一个规定规整的范围内之后呢,我们可能对我们的一个模型建模也是更加方便,它就是说我们的一个模型它更容易收敛啊,以及我们的模型它更容易进行一个训练,这个地方呢我们的数据的一个归一化方法呢。

其实有很多啊,常见的就是说我们用这个最大值,最小值做一个归一化,就是说我们给定一列这个字段,给定这一列这个字段,我们给定这一列这个字段的情况下,我们是可以用这一列它的一个。

这里面的一个最大值和最小值做一个规优化,也就是也就是我们有一个这个具体取值,减去的最小值,然后除以最大值减去最小值,这是我们的一个极差对吧,整体做一个转化,我们利用这个最大值最小值做一个转换。

它的一个处理呢是比较适合,用于这种非高斯的分布,可以保留绝大部分的数值的一个信息,但是呢它非常容易容易受到这种异常值的影响,因为我们的一个最大值和最小值,往往都是我们的一个异常值对吧。

很有可能是我们的异常值好,那么如果是这种嗯,比较出比较类似于我们高斯分布用的,我们就比就比较建议是我们的这种standard scale,这种相当于是一种标准化,标准化。

就是减去我们的一个具体的一个均值,除以我们的方差,减去我们的均值除以方差,这样的处理,它比较适合用在我们的高斯分布处理之后呢,我们的数据集会更加正态化,它就就比较适合用在我们的一个高斯分布的。

这种正态分布或高斯分布的这种情况好,还有一类就是我们的max abs,这个地方是也是非高斯分布啊,这个打错了高斯,我们的max abs,就是我们的一个具体的一个数据集呢,他在做一个处理的时候呢。

是用一个绝对最大值做我们的分母,绝对最大值做我们的分母,这个具体的数据值的一个预处理的这个操作呢,在我们的sk learn里面,有非常多的一些具体的实现啊,嗯如果同学们感兴趣的话,可以在SKN里面。

SKHN里面找到更多的啊,在我们second name的一个proposition里面,模块里面,其实这里面包含了很多的一些,我们的一个数据类类别类型的一个编码,以及它的具体的一个数值类型的归一化方法。

如果你还感兴趣,或者说想学得更加深入的同学呢,可以建议把这些SK的这些具体的一些方法,他的文档好好看一下,这些文档里面都写得非常精,非常非常精简啊对吧。

Scare each feature by its maximum,Absolute value,就相当于是绝对最大值对吧,做一个除法,这个其实都是非常简单的一些就是文档啊,如果你感兴趣的话呢。

也非常建议学一下好,我们在做一个具体的一个处理的时候呢,我们其实本整本质还可以做这样一个操作,我们遇到的一个数据集呢,它很有可能是这种日期类型的,日期类型的呢,就是说我们这个具体的数据集这个字段啊。

它是带有这种时间信息的,如果是带有时间信息的话呢,我们其实是非常建议,你可以把这个具体的一个时间信息,把它抽取出来,比如我们可以统计一下这个时间信息,它当前具体的时间信息,它是哪一年的哪一个季度的。

或者说哪一个星期的哪个节假日的哪个小时了,是不是早高峰,晚高峰,以及它可以跟我们的一个历史的一个均值,做一个对比,这个历史的一个均值,就是说我们历史的一个统计值,比如说统计一下。

他跟历史的一个平均值做一个对比,历史的一个最大值做一个对比,历史等于我们的一个嗯,嗯某个分位数做个对比对吧,这个都是可以做,这些操作呢都是对于我们的一个日期类型的,一个字段可以做这样一个操作。

当然我们还有一类呢,就是说我们可以做一个交叉特征,交叉特征呢,就是我们是可以将两个字段做一个交叉构建,得到一个新的特征,这个其实也是嗯非常常见的交叉特征,其实非常常见的交叉。

就是这种加减乘除或者笛卡尔集对吧,那么这个其实可能会有一点点难度啊,因为我们在做这个交叉的时候呢,其实不同类型的特征,就是它做交叉的方法可能不一样,我们一般情况下对于相同类型的特征,相同类型的特征。

就是说他如果是具体的一个取值,假如说我们有两列,我们之前讲的数据集,一个是我们的bathroom,一个是我们的bedroom,还有一列是我们的price,这两列是我们房屋的个数。

不管是厕所的个数还是房屋的个数,这一个取值是跟金额相关,跟钱相关的对吧,这两个是类同类型的,这个跟这两个不是同类型的,那么同类型之间是可以做加减除,或者笛卡尔级的家是什么意思,就是说这个房。

这个房屋它到底包含了多少个房子,多少个房间,就是说把厕所和卧室都算上对吧,除了就相当于是平均每个卧室,可以平摊多少个厕所对吧,如果是不同类型的话呢,可以做乘或者做一个除,比如说做除法的话。

就是price除以bathroom,平均每个厕所他多少钱,平均每个卧室多少钱对吧,这都是有具体含义的对吧,当然你也可以做一个聚合的人,就是说先分组聚合再做同款,比我们在做做这个地方其实是做这样一个操作。

grp by我们的一个bedroom,然后求一个price的一个平均值,这个操作叫做什么,对我们的bedroom进行分组,然后统计一下相同bedroom下面,哪个房子的一个价格的一个平均值。

这个就是一个分组聚合,其实本质就是一个聚合特征,一个聚合特征对吧,那么我们在做一个具体统计的时候,我们可以统计一下相同房子,相同,我们的卧室个数情况下的一个价格的平均值,跟你这个当前房子的价格相比。

它到底就是说嗯价格是高的还是低的对吧,都可以做这样一些操作,这个呢就是聚合特征,那么还有一类特征呢,就是我们的link特征,就是信息泄露的特征,就是我们是个具体的数据呢,它可能嗯有一个特征呢。

是跟我们的标性强相关的,但是呢这个特征它又没有什么具体的含义,就是它是一个立特立个特征,比如我们在进行一个建模的时候呢,如果我们的数据集啊,它是按照这个嗯有这种先后次序的,这种嗯整理。

它可能是将我们的一个相当于是先去整理,我们的一个标签热度为高的样本,然后再去整理我们标签热度为中的样本,然后再去整理我们标签热度为低的样本,那么在这个地方,我们就可以从我们的一个具体的一个房屋的。

一个图片的一个创建时间,从这个维度确定,于是去反推得到我们的原始的标签的对吧,其实这样这个就是非常非常很典型的,就说我们这个这个信息,是跟我们的标签墙相关的,但是呢,其实它是由于我们构建数据集。

所带来的一个误差,它并不是我们的原始数据,它内部分布的规律对吧,这个呢就是说是一个leg特征,它是跟我们的数据集构建的过程中,强强强相关的,但是呢并不是我们的原始数据集,它嗯真实的一个分布的规律。

那么在我们讲完这个特征工程之后呢,希望各位同学能够问问一问自己这三个问题啊,就是说你真的掌握了上述的特征工程的,方法了吗对吧,到底美内特征工程具体用在什么样的场景呢,它具体具体的一个优缺点是什么呢对吧。

这是第一个思考的点,第二个就是说我们的具体的一个,我们的一个有非常多的一些具体的一些,机器学习模型,我们的具体继续学继续学习模型,它能够学习到什么特征,以及它到底能够不能学习到什么特征,对吧。

这些都是我们的一个需要思考的,因为我们在做一个具体思考的时候呢,其实我们现在有非常非常多,非常多的一些机器学习模型,我们也有非常非常多的一些特征工程的方,建模方法,那么我们是需要去思考的。

是不是所有的特征工程,在所有的模型下面都是需要做的呢,或者说什么样的模型,适合做什么样的特征工程呢,对吧,这个都是需要说清楚的,或者说我们是需要人工,是不是需要人工做的特征工程呢对吧。

这个都是我们在做具体实践的时候,要做的一些问题,第三个呢就是说如果是利民的特征,我们如何做特征工程,匿名特征就是说我们这个特征的一个具体,具体的这个含义,我们都不清楚,含义我们都不清楚。

那么这个地方我们就是如何,对于一个你都不清楚具体含义的一个字段,我们怎么做特征工程,这个也是需要你关注的,我们接下来看第三部分啊,我们的一个模型的训练与验证,然后讲完这部分呢,我们就有具体的一个代码。

然后给大家,然后来实践一下,对于我们的具体建模的时候呢,我们的具体数据集啊,其实它是需要做一个划分的,我们在之前的一个呃基础的课程里面,或者说在我们的一个机器学习的教材里面呢,我们都经常有啊。

我们是可以将我们的数据集把它划分为训练集,验证集和我们的一个测试集,训练集呢是我们是将它用于我们的一个,模型的训练和参数的更新,验证集呢是把它用在我们的一个模型的,具体的进度验证和参数的选择。

测试集呢是用来最终验证我们的模型的精度,我们的一个具体的验证集呢,其实是可以从我们的一个训练集拆分得到的,这个验证集,它是非常非常关键的,而且这个验证集呢它的一个具体的一个作用呢。

就是可以用来对于我们的验证,就是说这个模型的训练过程,实时的进行一个反馈,我们的一个模型呢其实它在进行建模的时候呢,分为两种状态啊,欠拟合过拟合过离合,就是说我们的模型在训练集上的一个精度较好。

在我们的一个泛化的时候,在我们测试集上的精度较差,欠拟合就是说在模型的训练集的一个进度较差,在我们的测试集上面的进度也较差,一般情况下,我们的欠拟合是,就是说是可以通过增加模型的复杂度来避免的。

过滤后是无法避免的,我们的具体给定一个数据集的情况下,我们的一个数据集的一个复杂度,和我们的一个模型的复杂度是要匹配上的,数据集是比较简单的,那么你的模型也尽可能比较简单,也不能过于复杂对吧。

这个地方就是过于复杂的情况好,那么我们的数据集对给定数据集的情况下,你的模型也不能过于简单,你不能不能就是说是一个线性模型,这个线这条直线就过于简单了对吧,我们这个地方这条曲线。

往往就是它能够最为满足我们要求的,那么我们在做建模的时候,我们非常建议大家做这种art stop这种操作,这个操作就是说我们在进行训练的时候,我们是可以绘制得到两条曲线。

这个地方我们相当于是不断增加数模型的深度,我们可以绘的绘制得到两条曲线,一条曲线是我们的训练集的误差,另一条曲线是我们的验证机的误差,那么在这个地方呢,我们可以得到两条曲线之后呢。

然后去可以看一看我们的一个模型,它在我们的一个,最低验证机精度的时候,这个是我们想要的一个位置,因为在这个地方我们的一个模型,它很有可能是能够取得得到最好的,泛化精度的时候对吧。

在我们的验证机上取得最好精度的时候,所以说我们在训练的时候呢,是不断不断的去观测我们的模型,在我们的一个训练集上的精度,和我们的验证集的进度,然后选择在最优精度的位置的时候停止训练。

这个呢就是我们的2stop2stop,它其实是非常非常有效的一种,缓解过滤活的方法好,当然也有其他环节固定化的方法,数据库建正则化以及增加随机性都是啊,就是也是缓解过缓解过滤好的方法。

当然alt stop是比较有效的好,我们接下来呢,然后就是嗯,看一看我们的一个具体的代码实现啊,在我们的一个机器学习的实践部分呢,是非常推荐大家用这个Python。

再加上pandas来做一个具体的实践啊,好我们来看一看,首先呢是我们的这个特征编码的这一部分啊,这一部分呢其实我们在这个嗯,我们PPT里面呢也给大家讲讲了啊,然后我们就就是大致给大家看一下啊。

对我们的这个具体的字段,我们就是传入把它传入进去啊,这个地方我们具体的就是原始数据集,就是一个data frame,把它传入进去就可以做一个具体的编码,好这个编码之后呢。

这个其实是一个data frame,这其实是一个long派的area啊,它不是一个data frame啊,然后呢我们在做一个学习的时候,其实是要关注到这个具体的数据类型的啊,这具体的编码呢。

然后大家可以自己下去看啊,我们在做一个具体的一个特征工程的时候呢,其实我们有些时候还是需要知道,我们的一个特征的重要性的特征的重要性,特征重要性是用来做什么呢,就是说我们是可以用用一个具体的一个取值。

去衡量我们的一个特征,它的一个具体是不是重要,在我们的一些数模,在我们的一些模型里面呢,其实我们可以用模型的一些具体,具体的一些统计值,用来反映我们的一个模型是不是重要的。

比如我们在这随机森林的一个回归性里面,我们如果用它训练完成之后,我们可以在我们回去森林回归器里面的,一个feature importance字段可以找到,就是说他具体它输出的就是每个字段的一个。

重要性的一个排序,这个地方如果我们绘制得到一个直方图,这个直方图就是说RM和LSTAT这两个字段,是在我们的这个模型里面认为是最为重要的,好那么这个地方特征重要性呢,其实它的一个输出结果啊。

这个地方的输出结果是一个小数,对于数模型而言,它往往都是用我们的激励指数,或者说我们的一个信息增益这个字,这个字段所带来的一个信息增进,来作为它的一个重要性的好,那么类似的一些其他的一些数模型呢。

也都是有这个feature importance的一个实现,比如我们的一个LEGBM,或者说我们的一个具体的一个嗯,这个嗯随机四零,或者说我们的x g boost。

都是有这个我们的一个特征重要性的实现的好,那么我们接下来呢来看一看我们的具体的一个,就是说to seem to西格玛这个具体的一个比赛,我们怎么做一些特征的啊,然后这一部分呢可能就是说嗯。

嗯希望各位同学跟着我的一个节奏啊,然后来看一看,我们如何把这个具体的这个这个数据集,我们一步一步做一些特征,然后才让他参与我们的一个训练,首先呢我们读取我们的数据集,这个地方读取数据集呢。

我们直接是用我们的一个pandas,然后read csv,然后完成一个读取,读取完成之后呢,我们接下来就可以完,完成一个具体的一个操作啊,这个操作我们先讲比较,就是说关键的啊,就讲这一部分啊。

对于我们的一些字段呢,其实我们是可以考虑,就是说很多角度对他进行统计啊,我们的这个呃FOTOS,其实它是原始是的这个list类型的,这个list类型呢就是说是这个图片的一个URIL。

对于这个photos我们可以统计它原始是一个list,我们可以统计到什么特征呢,就是它的一个具体的历史的一个长度,list的一个长度,那么这个list的长度呢,我们就可以相当于是视为它的具体的一个。

具体的取值这个数啊,取值个数好,然后呢,这个features其实它也是一个类似的类型的对吧,然后呢,我们这个地方,其实我们也是可以统计它具体的一个个数,然后这个description。

description它是一种文本类型的,文本类型的呢,我们这个地方就取值,统计一下它到底是拥有多少个单词,这个地方怎么做统计呢,我们就是对它进行一个使用,我们的一个空白符进行分隔。

然后统计一下到底有多少个单词就行了对吧,然后如果是这种created的,它是一个日时间类型的,那么对于时间类型的,我们怎么做,把它转为data data,data time之后。

然后提取它的一个年月日年月日对吧,这个呢就是我们的具体的一个现于是,日期类型的一个统计,当然我们也可以做这样一个统计,就是我们刚才所讲的这个交叉的一个特征,统计一下。

每个bedroom平摊的一个具体的一个价格,每个bathroom平摊下的价格,每总共有多少个房间对吧,相当于这两者相加,就是总共有多少个房间,我们bedroom和bathroom进行相加。

以及我们平摊每个房间的一个价格,每个房间的价格对吧,这些都是我们可以做的,那么这些操作都是非常有用的一些字段啊,就是它是嗯将我们的一些原始的一个数据,进行一个交叉计算,得到我们的一个新的一个字段。

那么我们在做一个交叉的时候呢,你其实是要考虑啊,并不是说所有的字段都可以做一个交叉,这个地方的交叉呢其实也是遵循咨询,就是说我们PPT的一个规律啊,就是同类之间可以做加减,同类之间可以做除法。

但是同类之间一般不做乘法啊,不同类型之间可以做一个除法好,然后呢对于我们的一个具体的数据集呢,我们其实是可以做一个target encoding,这个地方呢有target encoding呢。

可能就稍微有一点点复杂,我们在原始的数据集里面,我们有一个叫做manager id这个字段,MANAGID相当于是一个中介的,一个中介的一个编号的吧,中介的编号,这个地方。

如果我们是想要对这个manager id做一个target执行coding,我们怎么做呢,非常建议用这种五折交叉验证的方法来做,五折交叉验证,是这样一种方法啊,我们把我们的数据集划分成五份,五分。

这是我们的第一折,这是一折,这是我们的第二折,这是第三折,第四周,第五周,在第一折的时候,我们用这个做我们的验证集,然后其他当做我们的训练集,这也就是说这个地方这是我们的VAL,第二折的时候。

我们用这一折当做我们的验证器,第三折的时候,这是我们的验证期,第四折的时候,这是我们的验证器,然后第五折的时候,这是我们的验证期,在每一折我们用到的验证集不一样,然后训练集也不一样。

这是我们的交叉验证啊,相当于是我们把我们的数据集拆分成多份,然后把它进行划分成这个地方,划分成五份之后,我们就需需要迭代五次对吧,那么这个地方跟我们的这个target encoding。

有什么样的一个区别呢,或者说有什么联系呢,这个地方,我们的targeting encoding,其实是很容易出现标签泄漏的一种情况,其实是很容易出现标签泄漏的,你可以设想一下。

我们刚才在PPT里面所讲的那个例子,如果一个manager它对应的一个样本就一个的情况下,那么在这个地方我们如果是做一个target encoding,我们其实很容易的就可以将就。

很容易将我们的一个具体的一个对应的一个target,对应样本的一个标签给泄露出去对吧,那么所以说在这个地方呢,我们在做一个targeting encoding的时候呢,我们其实是可以把数据集。

把它划分成训练集和验证集,训练集的一个manager指对训练集的,就相当于是我们对训练集的数据,对它进行manager的一个统计,然后对训练集的一个数据部分对它进行编码,然后验证集的呢我们就不做编码。

或者说我们的一个测试节目不做编码,我们在是一折的时候,我们的一个验证集是这样的,然后下一折的时候对吧,如果是他是划分到中间的时候,这个就是我们的验证机,然后我们的训练集又不一样,确定器就不一样。

也就是说我们在做一个进行分组的时候呢,我们是对我们的一个数据集进行一个划分,不同折之后,然后再去统计不同折下面的一个manager的一个,具体的一个取值,这样呢其实是增加了我们的一个平均性啊。

它也不会将我们的一个原始信息给他泄露出去,这个就是我们的一个相当于是加入了这种,交叉验证的target点口令,在写的时候稍微有一点复杂,也就是说我们在做一个具体统计的时候呢。

我们是对我们的训练集划分成两部分,一部分呢就是我们的一个训练的一部分,是我们的一个验证的,然后在训练的部分呢,我们去统计一下我们的一个具体的一个manager。

它对应的一个相当于是他的interest level,然后呢对于我们的一个测试集呢,相当于是我们用我们的训练集统计得到的,manager的一个统计情况,对我们的一个测试集的结果进行一个编码对吧。

然后呢如果是下一折的话呢,我们就是用下一部分的M训练的部分,进行一个统计,然后对下一部分验证集的一部分,进行整体的编码对吧,验证就是每折的时候,我们的一个具体的一个计算,和我们的统计是不一样的啊。

再来画一下123啊,就画四折啊,不行不行不行不行不行不行不行,在第一折的时候,用这一部分计算我们的一个target encoding,对这部分进行编码,下一节的时候用这一部分计算。

我们targan coding对这部分进行编码,也就是说在进行编码的时候,没有自己对自己进行编码,原始的一个targeting in coding存在,自己对自己进行编码。

但是这样呢我们相当于是用交叉验证的方法,对,相当于是我用这部分做统计,对其他的数据集作为编码,那就不会存在这种标签泄露的情况,而且这样的操作呢,其实是非常非常建议去做的啊,也非常有效的好。

我们这个地方呢是可以对我们的有manager id,做一个target encoding,当然也可以做我们其他的一个building,building id的一个tacting coding。

这个都是可以做的,我们做完之后呢,也可以就是说统计其他的特征,比如说我们到底就是嗯我们的一个房房间,他的一个提就是说他的一个嗯发布的时间,具体的一个天数,具体的月数,以及我们将我们的一个价格。

除以我们的一个经纬度鉴定,是同相同经纬度下面我们的相同位置,下面我们的具体的一个房子的一个价格,这个都是可以做一个具体编码的,然后呢我们对于这个具体的一个特征,把它处理好之后呢。

然后如果是类别类型的特征,我们就直接把它做一个label encoder对吧,把它做一个label encoder,做一个编码,如果是其他类型的特征呢,我们尽可能是把它转为我们的一个数值类型。

转为数值类型之后呢,我们接下来就可以直接把它,用我们的一个模型进行训练了,这一部分呢其实呃是用到了TFIDF啊,我们在之后的课程会给大家讲,其实它原始的数据集呢可能是这种嗯,这种文本类型的啊。

我们是提取它的一个TFIDF特征,然后对它进行一个嗯拼接到一起好,拼接到一起之后呢,我们接下来就是有一个交叉,五折交叉的训练,这个加叉训练其实跟我们刚才讲的是一样的啊,这个地方我们是用k fold。

把我们的数据集划分成五份,用其中的四份做我们的训练,然后用其中的一份做我们的验证对吧,五折交叉验证,五折交叉验证的一个优点,就是说我们这个地方其实是最终训练,得到五个模型,我们对这五个模型呢。

我们是可以对这五个模型,分别对我们的一个测试集做一个预测,然后可以对我们的一个测试集的结果,就行进行一个求平均对吧,矩形求平均,然后就可以得到我们的一个测试及预测结果,的一个均值对吧。

这个其实整体而言都是非常简单的好,当然如果是想要对我们的这个具体的数据集,你就是说做的比较好的话呢,你也可以嗯参考我们的第二份代码啊,就是说你可以对我们的数据集,进行相关的处理啊。

这个处理操作整体都一样啊,这个地方只不过我们在这个地方呢加入嗯,一个叫做stacking的一个操作啊,stacking的操作,我们在进行模型训练的时候呢,其实我们是可以通过我们的一个五折,交叉验证嗯。

可以得到我们得到一个新的一个特征,假如说我们划分成四份啊,四份就是四折,每折的时候我们得到的用到的验证机不一样,我们训练得到四个模型,这个四个模型,它分别对我们的验证集做一个预测。

把我们的验证集我们把它拼接到一起,这个拼接到一起之后,就是我们的模型对原始训练集的一个预测结果,这个就是我们模型,对原始训练集的一个预测结果,那么类似的,我们也可以对我们的一个测试集,有一个预测结果。

我们也可以有对我们的测试机有一个预测结果,那么这样呢这个新加的一维特征,我们是可以再把它进行啊,进行一个二次训练的对吧,这个操作其实叫做一个stacking,它基于我们的五折交叉验证。

我们五折交叉验证可以得到我们的五份,这个地方其实是四份啊,四份验证集的一个结果,我们把这四份验证集的一个结果进行一个拼接,类似的,我们的四个模型,可以对我们的测试集进行一个预测。

结果也可以得到一个新的一列新的一列,那么这个地方我们的具体的数据集,我们是可以得到训练集的一个新增的一列,我们的测试集的新增的一列的一个标签,我们可以将这个标签把它进行一个二次建模。

也就是我们这个地方代码所写的,我们对我们的一个教训练的过程,代表交叉验证的过程,这个地方对我们的通过五折交叉验证,可以对我们的数据集进行一个得到,我们的一个模型,它的一个具体的一个训练集的预测结果。

以及我们测试集的预测结果,然后我们定义多个模型,那么以此类推,就可以得到多列的一个训练集的标签啊,多列的训练集的一个特征,以及多列的一个测试集的一个特征对吧,我们接下来可以把这多个模型这个地方有。

我们有这个随机森林啊,阿达boss啊,叉g boost,这具体的一些我们的一个嗯模型它的一个特征,新增的一个特征呢把它拼接到一起,然后再做一个二次训练,这个S训练,其实就相当于是有点像这种堆叠的过程。

我们这个新增的一列特征,就是我们之前的模型,对我们的一个训练集标签的一个预测结果,以及对我们的测试集标签的一个预测结果,我们接下来学习呢其实学习的是一个残差,也就是我们之前这个模型跟我们的一个。

这是我们的测试结果,和我们的一个真实标签的结果的一个差异性,它其实是一个残差,学习的一个二次的残差,这个stacking呢,有点像这种神经网络的这种思路啊,有点就像这种堆叠的思路。

但是呢stacking它其实是这种手工来实现,这种堆叠思路的这种方法,它是通过这种交叉验证,然后通过这种堆叠的方法,然后完成我们的一个具体的一个模嗯,就是说新增的特征,这个地方我们其实新增了多少列特征。

一列两列,三列,四列,五列六列,这是我们新增的第二层的,我们的输入的数据集,它是一个六列的特征,我们的标签呢仍然是原始的标签,这个标签仍然是原始的标签,我们的一个具体的一个测试集的一个特征呢。

也是我们新增了六例,然后我们的一个具体的一个测试集呢,是基于我们的一个相当于是这个新增六列,做一个预测,因为我们的一个这个地方做的一个,第二层建模呢,是我们的新增六列的特征,和我们的一个标签的一个建模。

我们这个地方的预测呢,就是对我们的新增六列的特征,然后作为我们的输入,然后预测我们的标签,这个呢就是我们的代码实践啊,然后如果各位同学想要下去仔细阅读呢,也是非常建议大家可以下课仔细阅读一下的好。

然后我们继续,首先呢,我们在做一个具体的一个特征工程的时候呢,需要进行一个思考,就是我们的一个具体的特征工程呢,它是跟我们的数据集相关的,不能一概而论啊,不能一概而论,也就是说不同类型的数据。

我们是需要做不同不同的一个特征工程的,这是第一点,第二点呢就是我们的一个具体的模型呢,我们是需要做一个具体的一个处理的,我们的一个具体的处理呢,就是如果是对于数模型,对于我们的线性模型。

其实我们各自的处理方法是不一样的,对这些代码在哪找,可以找到,在我们的一个QQ群啊,我们待会会发到QQ群里面,对待会我会发到QQ群里面,好不好,不同的模型,我们处理的一个特征方法其实也是不一样的。

也是不一样的好,然后呢我们其实在我们学习的时候,重点要学习的就是我们的一个机器学习模型,它适合用什么样的一个特征,这个是你在做学习的时候关键的一个点什么样,有有哪些继续,具体有哪些具体的机器学习模型。

我们有哪些具体的特征,工工程方法,两者之间怎么做一个匹配,这个才是我们在做动手的时候,非常非常核心的一个能力好,那么以上呢就是我们这节课的一个内容,各位同学有问题吗,对如果有问题的话。

可以提出来让我知道啊,对,好,同学们有问题吗,如果没有问题,扣个一好不好,扣个一我们就结束我们今天的课程对,好那么如果大家有问题呢,也可以在我们的QQ群里面艾特我好吧,那么我们今天的直播就到此结束了。

然后我们待会呢会把代码上传到我们的QQ群,好的谢谢各位同学,谢谢各位同学好,谢谢大家,那么我们下节课再见好吧。

posted @ 2024-10-23 18:36  绝不原创的飞龙  阅读(15)  评论(0编辑  收藏  举报