首页 > 其他分享 >七月在线公开课笔记-十三-

七月在线公开课笔记-十三-

时间:2024-10-23 18:32:39浏览次数:1  
标签:这个 在线 一个 笔记 公开课 具体 然后 我们 就是

七月在线公开课笔记(十三)

1447-七月在线-机器学习集训营15期 - P3:02-CV-2-行人重识别项目(ReID)跑通训练+评测流程 - 程序员技术手札 - BV1ASste6EuZ

好啊,各位同学大家晚上好,嗯那今天是我们的啊,COMMDIVISION里面的第二次的这个项目课程,然后在上一节课程里面中,我们其实是跟大家已经讲过了啊。

REIDENTIFICATION就是raid的这样一个任务的主要的背景,Background,以及啊它的作用啊,他能有什么样的应用的场景以及它的价值,我们可以回顾一下啊,我们说到id这件事情的本质。

它其实是图像啊,这个计算机视觉领域里面的图像搜索的问题,那特别的呢它其实是啊图像的以图搜图的问题,也就是我给定一个请求啊,query查询的一张图片,那我要求要求什么呢,要求我们在数据库里面去搜索一。

些相关的图片啊,其实本质上就是啊这个啊这样本的图片,然后呢返回出来,所以虽然我们的raid看上去它是一个识别的问题,对吧,它是识别的一个id也没错呀,如果你这么理解是非常的合理,但其实本质上呢。

它其实是通过我们检索的这样一个技术的手段,而去达到最终的这样一个recognition,识别的目的啊,所以大家一定要记住我这句话啊,我们要看透过现象看本质啊,看起来它是一个识别类的这样一个问题。

但其实呢它确实是一个这个检索的一个,技术手段来进行解决的,那么我们说了,在raid这样一个领域里面呢,嗯它很重要的是这个特征的提取嘛对吧,所以他会有一个特征库的概念。

也就是啊我们有一个底库database的这样一个概念,那这个底裤呢其实就是啊我们说是它是gallery,那它其实就是我需要事先啊知道哪些图像啊,哪些人的人体的图像,它关联了是什么样的身份的信息。

也就是我们的ID的信息啊,那只有这样的前提下,我才能通过检索的手段去达到识别的目的,不对对不对,还想想看,不然这个问题就不可解好,那你要通过检索的手段去达到识别的目的啊,没有问题,那么嗯对于特别的啊。

就是我们怎么能够通过啊这个技术的手段去解,刚才我们这个问题呢,那我们知道啊,所谓的图像的检索的问题,它本质上呢就是其实是需要知道一个图像的,这样一个特征的表达,那如果没有这个表达,我怎么去做检索。

怎么去做识别,其实都是一句空话,对不对,所以为此呢我们其实是需要什么呢,我们其实是需要知道每张图片他的feature是什么,OK所以我要知道这件事情,因为如果我一旦把database里面的图像。

和我们的查询匹配的,GARY里面的图像全部都表示成了特征向量啊,不管是feature map也好,还是fish vector也好,那么在我这个后台背后的这样一个啊计算呢。

那其实就会把它这个转化成feature和feature,之间的啊similarity的这样一个比对,那换句话说呢,其实就啊会是这个啊,你想想两个特征向量让你去算相似度,你能算吗,那肯定能算啊。

那你其实就把这两个向量的内积算一算啊,就结束了啊,就是它的相似度和相关性,对不对啊,如果是这样的话啊,那是不是问题就迎刃而解,那为了达到这样的一个目标,那我们该怎么做呢,那我们是不是需要对。

我们有一个特征提取的一个模块来搞定,这件事情,对不对,我们要有一个特征提取的模块来搞定,那这个特征提取的这个模块啊,now又是什么呢,那我们知道啊,就是在我们CN的课程里面。

是不是跟大家已经有过简单的这样一个勾兑啊,我们说特征提取的这样一个,特征提取的这样一个啊额模块,它其实本质上啊我们在CN那里面,我们可以把它抽象出来,把我们的呃那个分类的那一个head给它去掉对吧。

本身我的CNN的输入是一张图片,输出是一个soft max的概率分布图啊,概率分布,那如果我把最后的那个FCSPSS给去掉,那么我们是不是你想象一下在你的啊BGG也好,或者alex net也好。

是不是其实在你的卷积层之后会接两个啊,FC然后再接一个输出对吧,那中间的那两个2048的那个FC呢,其实就是你可以考虑到你作为这个latent,vector的这样一个表达。

就是你的这个特征的这样一个输出啊,所以如果是这样的看待这个问题的话,我们其实就已经啊知道了啊,我要去提取我们的一个图像的视觉的特征,那么我们就可以通过中间的FISHMAP,或者FC的这样一个抽出来。

那我其实就会得到他的这样一个特征表达了,所以这是一个非常显而易见的这样一个呃,思考的这样一个方式,那这个问题现在我们就转化成了,我们要去训练一个CN对吧,那这个CN后面我们要去不管是抽FC也好,抽啊。

feature map也好,那其实就是啊随我们的这样一个啊随心所欲了,所以现在的这样一个本质呢,我们就把它转换成要求解一个啊,训练一个啊特征向量啊,特征的这样一个向量,而特征向量呢其实就是一个CN对吧。

所以我们要train这么一个C,那我们怎么train呢,我们需要有类啊,标签有数据,对不对好,那我们说了,我们的REID的这个数据其实本质上是啥,本质上其实就我们说了,它是每张图像啊,他会对应一个id。

换句话说其实你应该知道的是啊,你这个id对应哪些图像对吧,比如说小明这个人啊,然后他啊今天走了一趟轨迹,那经过了这个七八个十字路口,那OK他可能就有七八张,这样一个被十字路口抓到的这样一张图像,对不对。

所以这个就是构成了我的训练数据,我就知道这若干张图像描述的是这个id,所以说如果说啊我们的啊,嗯如果说我们把每一个id,都当做一个class name的话啊,都当做一个新的一个类的话,那是不是。

其实这本质上就是一个图像分类的问题,所以再次呼应到了什么呢,前面我给大家总结的,我们的raid的这样一个问题的本质,它其实是虽然是识别的这样一个问题,但它的本质它其实是一个图像搜索的一个。

比对的一个技术手段,去来解决这么一个识别的问题,那图像搜索的技术的啊,图像搜索的这样一个比对的核心,其实就是特征对吧,刚才我们就说了,我们的这个CN,其实就是我们的这样一个训练的这样一个,核心目标。

那所以呢嗯我们现在就啊可以train这么一个,刚才我们说的这么一个CN,也就把他的id当做一个class啊,我们就可以处理出来,但这里值得注注意的是什么呢,我再提醒一下大家。

你千万不要认为所有的评测数据集的id的信息,都一定要出现在你的训练数据中啊,我再说一遍,刚才我说的这个意思,不要认为在raid这个任务任务里面嗯,或者说不要认为在图像搜索的这样一个,大类的问题里面。

你评测数据集的那些id class,就必须要出现在你的training data里面,这是一个非常非常啊容易混淆的一个误区,这是一个不切实际的啊,我再举上一次跟大家举过的这个例子。

试想一下你的IPHONE啊,或者其他的手机,有那个人脸识别和人脸解锁的一个功能,对不对,你有没有就是在你的这样一个使用的过程中,要把你的人脸的图像拍多张图像,上传给苹果的icon的服务器。

让它更新一个模型,然后再返回给你部署,你才能work,我们没有这样的功能,我没有这样的体验,对不对,我们唯一要求的体验是说,你当时在借你的face id那个隐私的时候啊,你会这个头转两下。

然后这个拍两张这样一个图像就OK了,但并没有说啊,我们可能有这么一个时间差,还要人家啊,美国的这样一个啊苹果总部串一个model为每个人,那这个代价就大了,去海了去了,对不对,就不切实际。

所以任何啊我们把这个技术点扩展一下,任何凡是未来你们在工作中或者在学习中,看到一种带库的,就是database啊的这样一个带库的,这种啊CB的这样一个任务啊,它其实的最大的好处就在于什么呢。

它的泛化性我们是预期它是足够好啊,因为我们不要求他训练,他只需要什么呢,往这个库内扔图片就OK了,大家想想看是不是这样对吧,甚至举例来说有些这个厂商啊,比如说b a at,它有很多的这种云上的这个。

开放人脸库的这样一个识别,比如说啊公众人脸库啊,或者明星人脸库或者政治人脸库,对吧啊,他有这么一个能力,那你们说假设他确认好了一个模型,那我们知道啊,就是我们现在有很多的这个途径对吧。

我们可能会会有新的一些呃,i it啊,不管是人明星也好,还是动漫也好,会层出不穷,对不对啊,哪天这个啊B站上的up主,哪天他的这个抖音上的一些呃,这个呃这个这个群演那火了。

那我可能百分百来不及训练了对吧,那我那很简单,对于产品和运营的同学来说,他搜集一些这些的case啊,百度一下,谷歌一下,然后往你的那个数据库里面一导对吧,那这样的话你模型马上就能够更新了,对不对。

我就能识别出新的这种IP的人脸信息,这就没有这个时间差,还要再训练了,所以大家记住刚才我这一点就是啊,在这样一个子任务里面啊,或者这样一个,一大类的问题你肯定不会预期什么呢。

你的测试的数据的样本必须要出现在训练数据,这是不合理的一个要求,对不对,显然就是一个不合理的要求,所以呢这你就能够理解了,在我们的testing data中,在我们的测试数据中可能会出现一些新的id。

那些新的id让你去识别,没有说让你去做分类去做识别啊,对不对啊,其实让你通过检索的目哎那个手段去做识别,所以这就很合理呀对吧,对于训练数据集,我给你1500个人啊,这个每一个人呢可能有啊几十张图片。

然后让你去train一个分类器,注意这个分类器的分类的head,classification的head,他只能分类1500个人呀,对不对,因为只有这些出现在你训练的样本好,那假设测试数据集来了。

新的50个人怎么办怎么办,这50个人的数据的图片呢,送到你这个CNN模型里去,显然他也可以走通走通一次这个前向的传递,对吧,走通一次inference,所以他最后的那个激活它的这个分类,它也会有信息的。

但是没有意义,对不对,因为它不是属于这1500个类,那我们要的是什么呢,我们要的是它中间的那个feature和特征嘛,所以我们知道他的FC或者feature map的输出,那有了这个输出。

然后我们再把这个testing data里面的那一些,它肯定会关联几个id,就塞到我的database里面去,那这样的话呢,你通过后续的vector之间的检索和比对。

和这啊这个testing data中的这样一个,数据集的检索比对,那你就有了新的这样一个啊,就是识别的这样一个结果啊,所以啊这就解释了刚才为什么啊,我一再强调说,千万不要认为testing类中。

也一定是要出现在trading数据中的,这个id是可以不overlap,甚至我们希望它不overlap,因为只有这样,你自己衬出来的模型才会觉得可信,对不对,你才会在未来的工作中有底气跟你的老板说。

我的这一套模型,这一套框架它是具有泛化性的啊,不然的话你自己心里肯定也会觉得啊,非常的这个不踏实对,所以这就是我们在review了,我们上节课的整体的这个思路啊,我们应该是已经对齐了啊,对齐了好了。

那我们来看一下,回顾一下我们上节课的这样一个代码哈,希望同学们就是在上节课之后,应该是有过一些的啊,复习和这个啊run过一遍了嗯,我们目标是要去构建我们的这样一个特征,向量的这样一个啊提取器。

所以呢我们现在的啊手段呢,其实就是训练一个CN的一个特征的抽取器,对不对,然后具体的backbone呢,我们在这里选取的是啊,任何的一个CN的backbone其实都是work的。

只不过为了让大家能够在你们的笔记本上,可能就能够快速串起来啊,如果比如说有一些GPU的时候,大家可能抢了或者有一些啊这个掉线了,那这里我考虑到这个原因,就给大家选了一个mobile net。

那事实上你选RESNET或者啊更这个啊,更heavy的一些啊,backbone啊,inception的系列的,我觉得也没有问题,啧,好,那么嗯前面是一些基本的一些超参数的一些,定义对吧。

比如说batch size啊,optimizer啊,优化迭代器啊,对吧啊,然后这里呢我们会加载我们的训练的数据啊,就是我们的这个啊image的这个data image path。

然后我们说了就在第54行里面呢,它其实是啊啊sorry,我们是在这个啊52行里面呢,啊我们上节课跟大家说过了,他的IE的信息可以通过他的name来进行解析的,对不对啊,所以这是一个啊很好的事情。

然后并且呢我们跟大家说了啊,我们有一个zip的这个命令能够帮助我去做啊,很好的一个啊解析,那解析出来这个id呢,它其实是这个啊一个字符串,那其实我们是需要在我们的嗯训练的框架里面。

我们希望我们的label是自然增增增长的对吧,01234啊,或者这个啊他是一个one hot编码的形式,所以我们就有一个label encoder,能够帮助我们干这件事情啊。

它可以通过sk learning的面里面的PREPROCESSING,可以去啊帮助我们去做这样一件事情的转换啊,非常方便,那转换完了之后,我们就可以去分五分割,分割我们的training的数据集。

使得有这个啊training data和validation的data对吧啊,能够去啊干这件事情,那我们可以通过SKN里面的try test,split这样一个函数去做这个test。

这样一个split啊,当然我们可以通过我们的test size,这样一个超参数呢来控制我的比例,比如说八二分还是好七三分,然后注意啊,我们这上节课也跟大家强调过了。

就是我们有一个random states,千万是要来进行设置的,为什么呢,是因为啧我希望我每次运行的时候,我的train test data它其实是一致的,那不然的话你每一次来进行调参。

你就不知道到底这个参数调整的好,是因为你的数据集变了,还是因为你的模型确实更好了啊对吧,然后有了之后呢,我们是不是就可以去加载我们的backbone。

我们backbone在这里选的是mobile net v2,那在之前的课程我们跟大家已经讲过了,就是这种lightweight的这种一个CN的这样一个优势,它其实是通过这种这个深度可分离卷积的。

这样一个嗯小技巧啊,能够帮助大量的减少我们的训练参数啊,如果我们的卷积核是3×3的,大家还有印象中它大概参数量能降低多少吗,还有印象吗,想想看在我们的上上节课,上上节课应该是有过啊,这个相关的讲解的啊。

我们是不是说了,它大概是K平方分之一啊,其中还有一个小的那一段呢是忽略不计是吧,所以如果我的kernel size是33的话,那我其实参数量就能够大概降低到这个啊,1/9嗯,OK我们继续。

那有了这个backbone呢,我们其实是啊这个超参数,我们选的pulling是max,所以这就意味着当然我们这个with是internet。

所以就代表着我们需要啊有一个image net pretraining,一个model,没关系,就是如果你第一次运行的话呢,啊,你的网络就会去去这个啊,服务器上自动的download这个参数。

然后呢通过pulling是max的话,给你输出一个啊max average pulling的啊,max那个global max pulling的一个feature vector。

然后后面你就会加个dance啊,就是FC的layer,因为你要去分类嘛,分类你的这个到底有多少个id,所以你会有一个经过soft max的输出,然后把整个model的输入输入,把它给接起来。

这就是你的baseline model,所以这大概就是我们整个的这个啊情况啊,整个的这样一个情况嗯,我们已经写到了这个baseline model了,对不对,所以后面的代码就非常的呃。

这个大家可以自己想象吧,所以是非常的这个直接,因为接下来呢我们就会啊可以来train这个模型,当然在train这个模型呢,我们需要有写一个data loader啊,这就是我们今天的一个重点。

当然我们先啊不用纠结这个这个工作,因为我们把整个high level的这个啊骨架,帮大家理清楚了,然后再去把它填充啊,这样大家会对整个东西啊,整个啊project整个项目会理解的更加的这个透彻。

所以我们假设我们有了一个啊这个data order啊,假设有一个data order,那这个data order大家想想看嗯,我们一般会用什么来实现呢,啊通常的大家的想法是说老师啊。

我知道我把所有的数据啊,class他的name,以及它对应的这个输入的图像都加载加载进来,没问题啊,就是你的training的data的X和Y的这样一对配啊,所有的pad都加进来,有什么问题吗。

啊没有问题啊,如果你的训练的数据,其实它是能够在被你的,显存和加载进来的情况下,内存加载进来的情况下完全没有问题,OK比如说EMINNEST的这种数据集,SA10这样的数据集。

但是大家别忘了在实际的工业界中啊,你恰恰是有大量的这种训练的数据,比如说十几万几10万的训练数据,那一下子加进来存不下你的显存呀对吧,所以你希望的是什么呢,你希望的是通过batch的形式,批量的形式。

从你的硬盘里面加载到你的显存里面去,然后训练完了之后呢,换下一批对吧,这样的话,那在我们的Python的这个啊数据结构里面呢,我们其实是要用一个叫generator的,这样一个迭代器来进行实现的啊。

希望大家应该是有一些印象,Ok,所以我们假设啊,我们的generator其实已经啊写好了,一会儿我们会啊会跟大家去写啊,假设我们已经写好了,对吧啊,有一个这个generator batch。

对于training data or而已,好假设我们有一个validation的,generator啊,然后是,啊回头,当然这里面有超三对吧,我们要来进行定义,有参数好,那有了之后呢。

呃我们还可以额对我们的这个模型啊啊,加一个checkpoint,也就是说我对每一轮呢我可能是需要什么呢,需要这个去存一下我的模型的这个位置,不然的话后面我再来呃,这个比如说追溯我当中的哪个模型好的话。

我就没有办法对吧,可能我们需要有一个checkpoint,啊来进行保存,那这个checkpoint呢我们其实可以通过啊这个,这个里面来TENSORFLOW里面的那个checkpoint的这个。

call backs来进行导入,OK那什么叫做call backs呢,还有印象的同学应该就知道,他其实也就是回调函数对吧,所谓的回调函数,你顾名思义嘛,就是从它的这个名字里也能知道啊。

他是在某种情况下来进行这个啊回调的啊,也就是你要run了某一个操作之后,它会来进行回调,那他在什么情况下回调呢,通常来说,他是在训练完一个这个epoch的数据集,下来进行,就整轮数据集结束之后。

一轮之后他会来啊回调,所以这里定义的话,比如说我们定义的一个存储的一个文件啊,然后这个monitor呢是监控的意思,监控的一个指标,那比如说我可以监控啊。

validation accuracy或者validation loss对吧,划一趟给大家,然后verbals,意思就是说啊,如果说啊,我当前的checkpoint要比之前的好啊。

然后并且我要保存下来的话,我可能会给你输出一行这个log啊,我说当前的这个参数会更好,还有一个这个save best only啊,我们可以把它设置成true,这个意思就是我每一轮在迭代完了之后呢。

我都会去看一下我是不是比之前的这个呃,在validation上,accuracy上这个指标来的更加的好,如果是的话,我就保存下来啊,就这个意思,所以这样的话我们就啊可以去train,我们的模型了。

啊fit,然后呢train generator啊,就是导入我们的这个训练数据集,然后呢,steps per epoch啊,你根据他的名字就知道了,那其实他在算那个什么呢。

number of iterations对吧,所以number of iterations是多少,是不是其实我有多少数据,然后呢去除以我的batch size对吧。

那我们的validation的这个data是什么呢,是不是就是我们的generator对吧,然后MALIDATION,那是不是其实就是number of,Wild d image pass,除以我的。

Bad size,然后我的白size就是我们的白size,然后我们的bub,刚才我们说了,可以打印出来,Shuffle,我们是不是需要啊,让我们的training data来进行一些random。

shuffling啊,问题可以,然后number of ebox,我们之前定义好了100个对吧,好然后我们的call backs,call back x呢,它其实可以有一个什么呢。

有一个list就是我会有一个列表,我都可以用啊这个回调函数来进行这个链接的,那通常来说呢啊在我们这里定义好的,我们可能定义了是一个啊checkpoint,就是去存在每一个训练的epoch,完了之后呢。

我们就会去存我们的啊,啧这个呃checkpoint就我们的model的weight,那大家想想看还有什么样的呃,可能的回调函数会存在这里呢,大家想想看,那我们在每一轮结束之后。

是不是有可能会要调整我们的学习率,比如说呃每十轮啊,或者每20轮,我可能会要降一下我的学习率对吧,这是很合理的一个啊调参的一个经验嘛,那所以对于调整学习率呢,啊这样的一个回调函数呢。

也可能是放在我们的什么呢,我们的这个呃call back x里面可以去进行实现,好啦,那这样的话就是我们整个框架已经搭完了对吧,架子都已经有了,那唯一的这个呢就是缺什么呢,generator啊。

缺generator好,那不着急啊不着急,我们就回到这个啊generator的这部分的这个代码,我们来把它实现完就OK了,好,大家有没有觉得在前面,我们的内容有什么样的问题。

我们给我们停大概半分钟的时间啊,没有同学问问题的话,我们就继续了,这块有没有一些疑问好,看起来暂时没有问题,OK很好,然后那我们就继续了啊,我们继续,好那我们定义好。

定义一下我们的generator的batch,那在定义的这个时候呢,大家想想看可能有哪些参数啊,我们会需要用到呢,那其中第一个参数非常容易想的两个,其实就是X和Y嘛。

其实这里的X不就是image pass list,情况就是image path list和image label的意思吗,诶不好意思,然后呢还有number of classes,吧我有多少类。

还有很合理的呢,那我的尺度吗,这两个对吧,batch size也很显而易见,比如说我们给他一个默认的32啊,我64shuffle啊,比如说我们也可以给他,然后呢,还有一个呢。

就是有时候啊我们可能需要去啊看一下哦,我们一会儿要用的数据扩增的一些数据,增强的中间的结果啊,或者存一些其他的东西,我们可以给一个目录啊,我们前面说过了,就是啊在计算机视觉领域里面啊。

在training的时候,我们通过数据扩增的方式呢,我们会去实现什么呢,去去降低我们过拟合的风险对吧,所以就是啊,这个呃我们一会快要来进行实现,那这里给大家啊两个例子啊。

就是这个image label list和image past list会长什么样子呢,啊我们预期是这样的,啊,那可能他长得这个样子呢是啊,比如说他的目录是可能杠home杠。

比如说data下面的一点JPG啊,然后他可能是长这个样子啊,一个pass list,然后这个image的,label list长什么样子呢,可能是七二十三八十等等等等啊,他可能会长这个样子。

那我们output是什么东西呢,大家想想看,For output,而对于这个generator generator的batch而言,我输出会是什么样子的,显然我肯定是都叫是一个batch的数据的加载了。

那我肯定是要加载什么呢,加载我们的,X batch,I batch,对吧,我肯定要加载这个嘛,那是不是我要return呢,是return这个吗,大家想想看,我最后一行就是我的这个函数的代码,的最后一行。

我是不是return这个,如果回答是return的同学呢,那就是啊这个编码的基础是稍微啊,我们在需要再好好回顾一下了啊,就对于generator迭代器而言,我们的关键词是yield。

啊不是return啊,好,那除了是返回x batch和y batch,这样的一个X和Y的这样一组配,那还会有什么样的形式呢,还会有什么样的形式,其实是取决于什么呢,取决于。

我们想要让我们的generator干什么,但我不想让他干什么,我们希望我们的generator batch的这个东西,不仅是能够在什么呢,在我们的训练的数据中会用到。

我们是不是在evaluation的时候,或者在inference时候也会要用到,因为我都要读数据啊,只不过在训练数据中啊,我们需要用到的X和Y,而对于做evaluation的时候。

或者做inference的时候,我们就没有了那个Y对吧,我们是要预测Y有X,大家想想看是不是这样子,所以这样的话啊,这样的话我们就希望什么呢,我们希望我们的这个这样一个函数,是能够兼容什么呢。

兼容我们的训练的过程,和我们的160ATION的过程,大家有没有get到啊,我的这样一个想法的布局啊,就是你在编码的时候呢,你就应该有这么一个想法了,因为这两个过程非常接近,只不过呢对于我们的呃啊。

只不过对于我们的这个呃influence的过程而言,我是少一点东西而已对吧,所以这两部分的代码是大部分啊,是很多程度上可以来复用的,所以如果你说老师啊,我就是想要新写一个函数,我就不让他们复用,可以吗。

哎可以的啊,没问题是OK的啊,就是功能上的这个实现完全没有问题啊,只不过啊你可能会显得,如果你的同事以后来review的代码,可能会对这部分好抽象的一个呢,这个可能会有些许的这个小小的这个建议啊。

就是这个意思啊,如果能精益求精啊会更好,所以呢我们也希望什么呢,我们能不仅能够返回这个XY啊,也干脆就返回我们的x batch也是OK的,那这个取决于什么呢,大家想想看。

是不是取决于你的image label list有没有提供啊,那如果我没有提供,那当然我就认为我是在influence阶段,没有任何的问题啊,啊如果我提供了,那OK我可能是在training的阶段啊。

所以这也很好理解对吧好,那么如果一旦有我们的这个啊,image label list和image这个pass list呢,其实我们大概率是希望什么呢,希望我们两者是啊就是啊划等号的对吧。

我们是希望这两者是一致的,好OK啦,所以我们可以先定义我们的这个batch size啊,大概有多少,其实就是我们的image path list了,好如果if shuffle,啊如果要shuffle。

那我就可以直接在image path list和image label list,直接shuffle,那注意就是这里的shuffle啊,你需要来保证什么呢。

shuffle前后的pass和label是要一一对应的,不然的话就有问题端,千万不要比较这个意思,这个想都没有想就开始什么呢,想都没有想就直接对什么呢,对呃先shuffle我们的label。

再shuffle,我们pass啊,那就有问题,你要带着他俩一起shuffle,那当然可以写一段这个自定义的函数,去干这件事情啊,只不过呢我们有一些这个能够帮助我们,就是啊。

有一些这个呃现成的函数能帮我们干这件事情,比如说,我们就可以用这个shuffle啊,来帮助我们去shuffle啊,同时shuffle这俩玩意,好他输入也很简单啊,就这两玩意,好让我们继续。

然后我们从设定一个index吧,我们从零开始,然后while true啊,这个是老套路了,因为我要去不断的循环我的啊,取我们的数据集嘛,在我们的batch里面来进行啊,循环好,While tru。

那我们来看看current的index在哪了啊,current index在哪在哪呢,是不是你当前的batch index去乘上什么呢,你的batch size,然后我们磨一下我们的大N。

啊就完了对吧啊,为什么要磨呢,因为有可能我们后面我们下一个迭代的时候,对吧,我超过了我的那个当前的这整个啊,depot的这样一个数据啊对吧,所以如果说if大N大于等于,Current index。

加上我的白痴size,那说明什么呢,说明我现在还没有到头啊对吧,所以我的current,C u r current,batch size就可以,为什么呢,我们的batch size没有问题。

嗯batch index加一就好了对吧,否则的话什么呢,Create by ch size,最后一个batch size就等于,对吧,因为我就等于他俩的差嘛,因为如果我再加上整个白痴size的话。

那我就超过了它啊,那我就是下一个轮迭代了,那下一轮迭代呢,那不就又置零了吗,对吧,又置零了,好所以这样的话额我们就写了这么一个啊循环,在这里啊就是我给大家提一个小小的思考,大家想想看。

就是后面这一点我处理,如果偷懒不处理,可不可以,可不可以,我们说是可以的,因为你想啊,就是你想想看是为什么,因为,如果说,我不处理的话,那无非就意味着什么呢,最后那一小撮数据。

它不出现在我当前的训练数据中而已,准确的说,我纠正一下,是并不出现在我当前1poke的数据中,唉这句话你承认了,你认可了,为什么我说是不出现在当前epoch的呢,有同学能想出来吗,为什么呢,因为什么呀。

因为刚才在我们training的那个文件里面,那个代码里面,我们写了一个回调函数,还记得吧,这个回调函数我们说了,他是做checkpoint的,对不对,但是在那个回调函数上面是不是还shuffle了。

对吧,我们还shuffle了,所以呢很简单,我当前可能不出现,但是不代表我以后不会出现了呀,因为我下一轮就shuffle了,那可能大概率啊,我本轮遗漏的那一小撮数据。

并且那一小撮数据还没到我的白痴size,对不对,这么一小数据,我觉得我下一个会出现,就算我下一轮不出现,我下下一轮也会出现,对不对,那你想想看你有多大的概率,你每次shuffle都没有sh不到任何一个。

那假设你有100轮的话,那你有二的100次方,你都没有杀不到这个,那这个概率就很小了,对不对啊,所以这个就啊解决大家疑惑了,甚至我就再给你算的严格一点,就算你有啊很小的概率都没有杀不到。

但是呢那又怎么样呢,我的数据集可能是十几万的数据集,我少那么几十个数据就不行了,你想想看不至于对吧啊不至于啊,所以从这两个观点呢就能解决,刚才啊我给大家提的这样一个小思考好了,现在呢就是啊总而言之。

我们就已经啊啧,由我们的这个啊当前的这个两个index,那么我们希望要做的是什么事情呢,我们希望是根据这些index能够读到什么呢,我的training的数据集X和当然批量的啊,分批的啊batch。

然后x batch和这个y batch,所以呢我希望有这么一个函数啊,叫load image batch,这个函数能够帮助我来加载啊,我的这些数据数据集,比如说。

我当前知道我的image的pass list对吧,我当前的index是current index对吧,那我要读到哪呢,我是不是要读到current index加上current batch size。

对吧,然后我的image label list是什么呢,是不是current index读到哪呢,current index加上current batch size。

当然我还希望有一些简单的其他的超参数对吧,可能可以来进行传递,Number of classes,以及你要读进来的image的wise和image的height,对吧,很合理吧。

所以我希望有这么一个函数,能够帮助我干这件事情好,那我们就回到前面来,我们来实现一下这个函数哈,它有什么样的啊,话筒,好啦,这个就是应该,嗯能够理解了啊,能够理解了,好我们把它的超参数写一下。

刚才我们写过了,那首先呢我们可以解析一下我们的batch size,为什么呢,因为这里面啊我都是load image batch,所以很显而易见就是我的,image pass list length啊。

其实就是我的当前的batch size,毫无疑问对吧,没有任何问题,然后呢,我们可以初始化一下x batch和y batch的形式来,expect的形式,答案是什么,是读入图像呀,对不对,读入图像。

那读入图像是不是,其实我们知道图像是三通道的一个cancer对吧,所以就是我们的bash size in height image base,还有一个什么呢,三呢对不对,RGB3通道呀,没问题吧。

YBH呢,200是什么,没大家想想看WIFH是啥,显然WIFH是,这玩意,后面怎么写,关键的来了,后面怎么写,是不是想想就知道应该是什么呢,Number of classes,为什么。

因为我希望我的label,是one hot in coding的形式,对不对,所以自然而然我们就有了,当然后面我们加一个,能想通不,是不是应能抢通,因为啊我需要one hot encoding。

那所以自然而然呢我number of classes啊,我就知道诶哪一个是一,哪一个其他是零,好了,那这样的话呢我们就有了x batch和y batch啊,它的初始的定义,那接下来的问题就在哪呢。

接下来的问题其实就在,我怎么把x batch和y batch给填满来,注意是正确的,填满来,那我的问题就解决了,因为这样的话,我就把我的data从黎从这个硬盘里面,加载在我的显存里面。

因为它我都已经读进来了,然后我就扔到我的深度学习的框架里面,让他去training就好了啊,我的任务就完成了啊,所以我整个逻辑呢就这么一个思路,大家看看这有什么问题啊,如果没有问题的话,我们就继续。

那接下来就是我们刚才说到对它进行填满对吧,那填满很简单啊,我写个for循环对吧,啊然后我们解析一下image的has就等于我们的,pass list i咯对吧。

好那接下来呢我们要去解析我的这个image path,读进来是不是就OK了,好那我们中间到时间休息一下,然后大家可以去喝点水上个厕所,然后迷惑回过头来继续写,好啊,那我们继续。

额如果我们要去解析这个pass的话,那我们其实会要用到open CV的一个命令啊,就是像CV two点immigrate,然后我用这个CV two点EMIRAID这个函数来读,进来的时候呢。

它的通道是BG2的通道啊,就是啊不是RGB的,所以这个需要需要大家给稍微留点啊,留心点,啊这个时候呢我们的image shape是这一个,128啊,6643,那如果什么呢。

如果说我的这个shape是不不是啊,就不等于我之前定义好的这个,那我肯定要resize一下,But hin uh resistar,这个,那我要把它再调回到RGB的话,我该怎么操作嘞。

因为我后面的一些normalization啊,或者一些啊这个先验的一些超参数啊,我可能都是根据RGB的对吧,最大想想该咋办呢,很简单,不要想复杂了,因为我的长和宽它是不动的对吧。

因为我只有depth的那个维度,是RGB到BG啊,RB加到RGB,那很简单,是不是直接让他反一反就好了对吧,这个就很简单了,然后呢,是不是就这个东西,我们就x batch的第I个就已经写完了对吧。

都已经写完了,可以吧,很合理啊很合理,那接下来呢我提醒大家,接下来我们可能要考虑一下,image label list这个东西了,大家想想看该怎么来处理,怎么来处理呢。

我们前面在刚开始的课程我们就讲过了,我们说我们希望我们写的这一坨函数,是能够同时满足于training和influence的,而对于inference而言,我的image label list是缺失的。

所以自然而然我们就希望什么呢,我们就希望我们可以通过image label list这个东西,来判断我到底现在是处在training的阶段,还是处于在inference阶段的对吧。

这样的话我的可操作性就强多了嘛,所以很简单啊,我就可以这样干了,所以if image的label,List is not n,那这样的话如果不是OK,那我就直接把我label list的第I个取过来了。

然后呢我要把我的why batch给赋值填充完了呀,对吧,也就是我的那个one hot encoding,那我该怎么写呢,因为我们的one hoencoding是只有一个一,其他都为零啊,那该咋写。

是不是其实很简单,直接就是一就好了,能想通吗,如果能想通的话,这个其实就是呃,这个其实就是我们的这个y batch,就把它给构造好了,好啦嗯,那接下来呢,接下来我们是不是就return了,对吧。

我们要到return什么呢,return x batch和y batch没问题,但对于这是对于training的情况下,那对于inference evaluation的情况下呢。

我是不是只需要return我的x batch就OK了就OK了,大家想想看是不是这回事情,所以如果是这个情况下,我们是不是要return x,batch和y batch,如果不是的情况下。

是不是我们就就直接return我们的x x batch结束了,想想看,这样的话,我们就把整个load image batch的这个函数写完了,我把它都放在这里啊,我把整个都放在这里。

大家来看看有没有问题,好有问题提出来没问题,一会我们继续走,上面的这些超参数都是传入的,不管是past list还是image able list,这个东西怎么来的,参看上一节课程对吧,我们已经说过了。

在上一节课程里面,我们是不是都已经解析好了,他的啊,class name啊啊past list,label list对吧啊,Training image,Pass,Original ideas。

这些我们都已经解析好了,那还有问题吗,看起来应该OK,好那看下OK的话,那我们就继续了啊,那load image啊,batch我们就已经有的话,那OK我们就可以回到我们前面。

我们这个中断的这个部分了对吧,就是x batch,Y batch,我们就可以好,回到这儿来了啊,回到这来了,然后我们通过刚才我们实现的这个load image batch,这个函数是不是就。

就可以读到我们的这两个X和Y的这样一,个数据集到数据了,好那我们已经快接入尾声了啊,接入尾声了啊,如果说我们前面argument的这个设置是true的,啊就在这里面,我们是不是有一个AUG写错了。

啊我们写了argument是true的,那我们其实是需要什么呢,需要做数据增强的,这个数据增强怎么做呢,啊我建议大家用这么一个包啊来做,就是在这个之前呢,你可能要做一个准备啊。

我建议大家用这个数据增强的报,好就是这个吧,你也应该可以通过pip install一下这个啊,问题不太大啊,问题不太大,所以也可以,然后呢嗯你进入这个,刚才我给你的这个链接的这个主页啊。

然后他就会给你嗯啊,这个给一个show的一个example的一个例子,然后你把那个例子啊拷贝下来就好了,这个例子就是他会给你设定一个sequence,这个sequence呢,啊他会给你这坨啊帮你写好啊。

比如说啊随机翻转啊,然后这个是不是要加一些这个椒盐噪声啊,然后是不是加一些旋转啊,会不会有一些,这个啊随机的一些平移呀啊等等啊,就是他会给你,你就直接用这些标准的操作啊,就OK了啊。

就他其实会定义很多的一些嗯,可能几十种,上百种的这样一个数据增强的一个操作,你进入这个主页,你看一下呃,你就呃非常的这个明确了啊,你就非常的就他的这个非常非常的多啊,好那我们就回到刚才我们的。

if augment啊,If augment,那首先就是啊,我们可以对batch这个数据呢确认一下,把它转成,Int,啊如果不做这个可能会报错啊,我只能说可能也许不会报错,如果报错了。

他可能就会提示你需要是INT8,刚才我们定义好的那个sequence,就是你从主页上可以啊,抄作业抄下来的,就OK了啊,它的使用操作非常的便捷啊,因为他都已经帮你啊,接口化了。

OK然后如果if safe,啊那刚才这里啊,你就直接去啊,用那个啊自己写了,就是你可以把当前的这个image给存下来了啊,就是直接下image点save什么东西啊,自己可以把它实现啊,或者不用啊。

如果你不想把它save下来,那你直接这个注释掉啊,没什么问题好,我们继续啊继续,呃X的batch好,我们说啊我们通常会做一些啊normalization对吧,比如说,除以二五,这很正常吧,啊。

然后事实上啊,通过我们对那个image net这个数据集的一些啊,经验啊,就是这是我们经验归纳出来的啊,就统计出来的,然后他有一个均值减去均值除以方差,然后这个统计的经验值呢,我们会把它放在这里。

所以大家后面不要再问了,就怎么来的,他就是统计大量的数据得到的,仅此而已,那直接就x batch,Y batch,那看看有没有什么问题,我来回的给大家切几遍啊,好那如果这里没有问题的话。

我们就可以回到我们今天课上啊,刚开始讲的最后的那个,就是我们就可以串起来了对吧,但只不过在这里呢,我们啊要把刚才那个generator啊,这个batch可以把它写完了,对我们要把它写完。

比如说我们就暂时不需要画了,这样的话我们就把我们的train generator,实现完AB了,大家看有没有问题,啊没有问题的话就很简单,那后面的validation的generator。

我们基本上很多参数是一致的对吧,为什么这里的argument是false,而上面的是true呢,大家想想看,为什么,是我写错了还是有意为之的,很显然,这里的false是,因为我们这个时候。

我们加载的的是validation的data,是我们的验证的数据集,那如果是验证的数据集,我们是不预期,并不预期它需要经过数据增强的东西,想想看是不是这一点,是不是我并不预期它会经过数据增强。

因为没有意义,因为我要知道我的每一次的好指标的上升,我的validation的评价的这个数据集是不变的,对吧,我要知道呃,我的数据是不变的,而是由于其他的这个带来的提升导致的。

这才证明我的参数是啊合理的,所以这样的argument我是要把它固定,而是固定住,是不要去动它的训练的,那这样的话呢,我们就把我们整个的训练的框架拉通了吧,完全可以run起来啊,我们再回扫一下,对吧。

数据读入,然后啊模型的构建修改,哦sorry,不好意思,差一步啊,我刚刚还好,我回扫一遍,差一个,大家有没有看出来我差哪里,他还不不能够站起来,它会报错,有没有看出来是在哪。

是不是我们还没有配置损失函数,想想看是不是这样,我并没有在哪里直,那个指明我们要用什么损失函数对,所以是在98行下面的这个我们需要有一个,baseline model点。

compile一下我们的loss,啊时间,啊这里的matrix指的是什么呢,就是你到底需要什么样的accurate,这个啊ACC啊或者accuracy啊,这样的指标,啊大概就这样。

所以这样的话我们就把我们的loss函数指定啊,这样是能够run起来的,好吧对,好然后下一节课呢我们就会啊,我们训练跑出来了,那理论上面有模型了对吧,有些模型我们怎么来进行评测呢,那下节课就是我们的重点。

OK嗯,大家看看对今天的内容还有什么样的问题吗,OK如果没有其他的问题的话,我们今天的内容就先到这。

1447-七月在线-机器学习集训营15期 - P4:02-数据分析与特征工程串讲 - 程序员技术手札 - BV1ASste6EuZ

好那么我们开始我们今天的一个课程内容,我们今天的课程内容呢其实嗯并不是特别难,我们主要是给大家讲,给大家讲解一下我们的一个数据分析,和我们特征工程两部分啊,一个是数据分析,一个是特征工程。

那么我们的一个具体的一个嗯时间安排呢,就是我们有四部分的一个具体的内容,首先呢给大家介绍一下数据的一个处理和分析,然后第二部分呢讲解一下特征工程的一个嗯,具体的原理和实践。

第三部分呢讲解一下具体的模型的训练和验证,第四部分是总结与回顾,好我们就开始我们的第一部分啊,数就是说我们的一个具体的数据分析的过程,在开始我们的数据分析之前呢,我们先会给大家讲解,就是说问题与建模。

这个呢其实是在我们的一个具体的一个嗯,数据挖掘,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的这种半结构化的数据。

或者说我们这种非结构化的数据,就是我们的一个图片类型的,视频类型的文本类型的这种非结构化的数据,这些呢都是非常三类典型的我们的数据集对吧,那么我们的不同的数据呢,我们在做建模的时候。

其实我们也是各自存在不同的一个区别的,我们在现实生活中呢,其实嗯对于初学者而言,对于初学者而言,我们比较建议嗯,就是说是学习这种嗯表格类型的数据,表格类型的数据,表格类型的数据呢就是说它是呃。

就是说我们的一个具体的数据集呢,就是这种二维的,二维的这种形式进行展开,我们的行就是我们的一个具体的样本,我们列呢就是我们的具体一个字段,比如说我们给定一个表格,这个表格里面拥有的是某个学生。

他的一个具体的一个姓名,他的一个具体的一个嗯,就是额他的一个成绩啊等等的对吧,相当于是每行是一个学生的一个记录,每一列是他具体的一个字段,那么我们这这是表格类型的数据,为什么我们这个地方会把这个数据集。

讲的这么清楚呢,因为我们不同类型的数据集,其实我们在它适用的得到的一个算法,它也是不一样的,表格类型的数据呢它可能比较适合用的数模型,就是说比使用那种x g boost,或者嗯我们NH级BM。

这个我们在上上周呢,我们的有有我们的老师给大家讲对吧,然后呢如果是非结构化的数据,我们比较适合用,那什么我们非结构化的数据,比较适合用这种deep learning的深度学习的模型对吧。

所以说我们的一个具体的数据的类型,也决定了我们最终适合用什么样的一个,具体的算法,所以说呢,我们是需要对我们的一个具体的问题啊,他的领域嗯类型啊,以及它的具体的一个数据集啊,要好好的一个了解清楚。

其实呢我们在识别到这个问题之后呢,我们并不是说是有一个完从头到尾的这种解,解决的过程,我们的一个具体的一个从头到尾的一个,解决过程呢,是我们的一个嗯就是识别问题,理解数据嗯,数据预处理建模与评估。

这个相当于是我们的一个嗯完整的一个,从数据的一个理解,然后对数据的清洗建模,然后再到再到最终的部署和评估,这是完整的,但是呢在这个解决我们的问题的过程中呢,我们的一个具体的一个。

它并不是说是一个瀑布式的这种串行的,一个开发过程,它是中间呢会需要进行反复迭代,那么如我们PPT所示的,我们在进行迭代的过程中呢,我们可能在中途呢可能是需要返返回返攻的,对吧。

反攻的这个呢其实是嗯很常见的,我们写一个程序,并不是说是一下子就能写成功的,那么类似的我们训练一个模型呢,也不是说我们一下子就能训练完成的,不是的,我们在进行一个建模的过程中呢,我们可能很有可能。

在一拿到我们的数据集的之后,拿到数据集之后呢,你可能是从我们的数据集能够找到,对我们的问题更深次更深的一个理解,那么我们就回过头来,结合我们的原始的一个问题的背景,然后再去理解我们的数据。

或者说我们在建模的时候呢,我们发现我们的建模,它的一个模型的精度不太好,那么以此类推,我们也可以反推,是不是我们的一个具体在处理数据的时候,存在某种误差,或者说出了差错对吧,所以说在我们建模的过程中呢。

它不是一个瀑布式的这种端到端的过程,它其实是有这种循环的过程的,循环的过程的一直一直循环,或者说是中途任意一个节点都会都会反攻,那么一直一直循环,循环到什么时候,能一直到我们的一个最终的一个模型的。

一个精度和模型的一个预测速度,它达到我们的要求的时候,我们才停止迭代,好在我们的建模过程中呢,其实本质啊,就是说有很多同学可能之前没有做过这种,机器学习的一个实际的一个项目部署啊,或者项目开发。

其实这个在进行建模的过程中呢,你可能是可能会对这每个步骤,它所花花费的一个时间比较感兴趣对吧,这个地方我们在进行花费时间的时候呢,可能这一部分的一个时间只占10%,机器学习建模的部分占10%。

然后做数据处理的这部分时间呢,可能是占据70%的,因为我们的数据它可能是比较脏的,我们是需要做把它做一个聚合的,也需要从我们的数据集进行一个理解,然后做一个特征工程的。

所以说实际做一个模型训练和验证的过程,其实时间很短,大部分时间都在做一个数据处理和数据清洗,数据分析的过程中,在我们建模的过程中,我们关键的要做的是什么呢,关键要做的就是。

你首先要识别出我们的问题到底是什么,它是什么类型的,以及通过我们的这个具体的一个哦数据呢,你能不能够找到数据的一个分布的规律,这个分布的规律呢,就是说其实就是我们的原始的某个字段。

它内部的一个分布的规律,这个分布的规律,其实就是需要我们对这个字段进行一个分析啊,这个分析呢可能是要画一些图,画图呢我们是呃如果是类别字段和数值字段,我们各自适合画的图不一样,画完图之后呢。

我们可以找出它内在内在的一个分布规律,其次呢我们的一个具体的一个数据集呢,它每个字段和我们的一个标签,也是存在某种规律的,也就是假如我们是一个表格类型的一个数据,我们每行是我们的一个样本,我们有两列啊。

一列是我们的一个字段,字段A还有一列呢是我们的一个label,在这个地方呢,我们是可以进行一个分析分析进分析什么呢,我们是可以分析一下,我们的一个字段和我们的一个标签,它的一个具体的一个分布的规律。

或者说我们的一个具体的一个,它们之间是不是存在什么关系啊,这个都是可以通过我们的一个分析的过程,来得到的好,那么我们在进行建模的时候呢,B会是不是存在有关完整的,或者说完美的一个解决流程呢。

或者说完美的这种解题套解决过程呢,或者解决模就是说会不会存在完美的模型呢,其实是不存在的,因为我们不同的任务呢,它的一个具体的解决方法,和建模方法都是不一样的,我们并不能一概而论,特别的呢。

特别的呢就是说我们的具体的数据,不同的情况下,我们的建模方法是不同的,我们的一个具体的一个任务,不同的情况下,我们的建模它具体的任务也不同,那么这个地方,我们的数据和我们的具体的一个任务呢。

就决定了我们最终他到底是做什么以及如何做,在我们的机器学习的一些这个领域里面呢,我们常见的应用呢就是说你可以嗯,首先可以按照我们的数据集来做一个划分,我们数据集做一个划分呢,就是我们是嗯比如果是初学者。

比较推荐你去学结构化的一个数据,因为结构化的数据呢,它的一个数据集往往都比较小,也比较适合你去做人工的特征工程,那么结构化的数据集里面,就是说我们的这个数据呢,它是使用这种表格形式来进行一个。

存储和展示的,在这个结构化的数据集里面,我们常见的这种任务,由广告搜索的推荐催电系统,金融风控最优化问题以及匿名数据挖掘的问题,然后呢我们以此类推,还有一些其他的图像的,AARP的文本的语音的这个地方。

我们就给大家稍微讲一下图像,图像的呢就是我们的一个具体的数据集呢,它是以这个image的形式进行存在的,image我们也知道它其实就是一个文件对吧,我们的一个图片呢,它的一个不可能的一个文件。

可能图片尺寸有大有小,它不是一个规整的形式,它是一种非结构化的数据,那么对于我们的一个图像的领域呢,我们常见的任务有这种图像分类,物理检索我们的语义分割,超分辨率重建以及人脸识别,自带估计。

关键点检测等等的一些任务,这每类任务呢都是可以找到我们的,相应的工作岗位的啊,你去搜啊,直接在这种招聘网站上搜,都是可以找到的对应的一个岗位的,那么类似的在文本和语音里面。

我们也也是有着对应的一些特定的一个岗位,和特定的任务嗯,那么我们在进行学习的时候呢,就是说非常建议你嗯熟练掌握这其中一种,或者说两种是比较好的嗯,因为我们这个你不可能,就是说你把这个基础学完了。

然后再呃不去学这个具体的任务啊,这不太可能,因为我非常建议你去学完基础之后,然后去挑选其中的一两个具体的任务,然后进行一个深入学习啊,这样是比较适合你的,一个具体的一个职业发展的。

那么有同学可能就会问到老师,我怎么知道我选哪一个嗯,就是说是哪一种这个领域啊,或者哪一个具体的问题比较适合我,这个呢就是非常推荐你去把每一个这个地方,你可以把这个截个图啊。

或者说在我们的QQ群里面可以拿到我们的课件,然后呢你再去嗯嗯了解一下每个任务,它具体是在做什么,然后你就是可以找到你比较感兴趣的,一个愿望好,那么我们今天呢给大家在进行举例的时候呢。

都是以这个to sigma connect,这个租房热度预测的这个数据集给大家展开,给大家展开,这个数据集呢其实是一个K哥的一个比赛啊,说我是从K哥的一个具体的一个课程里面筛选,把它抽取得到的。

那么这个具体的一个数据集呢,他在他在做什么任务呢,它是需要我们使用这个租房的一个信息,对这个房屋的一个热度做一个预测,这个房屋的一个热度呢不是它的温度啊,这个房屋的热度呢相当于是它的一个受欢迎。

受欢迎的一个程度,就是说这个房屋它受欢迎的一个程度,我们是需要使用这个房屋,它的基础信息来预测它的一个热度,那么这个地方其实本质就是对我们的一个,房屋的热度进行一个分类对吧,那么我们的一个具体的数据呢。

它拥有了我们的房屋的信息,这个房屋的经纪人信息,房屋的地理位置信息,我们在做的时候呢,其实本质需要将这些具体的字段,做一个聚合的统计,所以说他的一个具体的操作过程呢,其实是需要做大量的一个统计啊。

这个to西格玛这个具体的数据集呢,它原始来源于KO的一个具体的比赛,他总共包含了十四十四个字段,分别涵盖了啊数值类型的类别,类型的文本类型的,日期类型的和图片类型的这些字段啊,然后呢通过这个数据集。

或者通过这场比赛呢,你可以完整的掌握到我们具体的数据挖掘的,各种技能嗯,它包含的一些具体的一些数据呢,我们在这些字段呢,我们待会也会展开给大家讲解啊,你不用担心,好,这个呢我们先给大家花了一点时间。

给大家讲完了我们的这个初始部分,我们如何对我们的数据集,以及我们的问题做一个抽象对吧,我们到底如何对它进行具体划分好,我们接下来呢就开开始,正式开始我们的第一部分额数据处理和分析,这个地方啊。

就是很多同学呢觉得算法工程师做一个他的算,很多同学可能觉得算法工程师的一个工作,主要是训练模型,其实不是的,算法工程师百分,我刚才也讲了,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个的话。

就是有可能是这个厕所呢是有公用的,或者说有的厕所呢只能是用来嗯,相当于是呃这种洗手的啊,就相当于是这种呃共用的厕手,或者说是嗯对半,这种厕所都是都是有的啊,因为我们租房的话,这是很常见的。

然后我们的卧室个数呢一般是整数的,然后我们变0id对吧,这种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。

就是他的一个次数啊,做一个统计就行了,我们可以看一下,我们BIDID取值为零的情况下,有八千二百六十八十六套房子,这个呢其实我们很清楚的,可以看到这个地方的零,其他的一些变量I1键都是这种等长的字符串。

这个说明什么呢,这个地方的零它就是一个去我们的一个缺失值,缺失值我们的一个Missing value,或者说是一个默认值,天天是我们这个地方是没有填这个变量id的,某个房子是没有填这个变量id的。

这个地方呢,就是说我们通过一个数据分析,是能够找到某个字段,它到底是就是说有没有缺失值,有没有这种具体的一个额分布的情况呢,然后呢我们对这created,这个created就是我们的一个日期类型的。

时间跟时间相关的,如果是跟时间相关的呢,我们就可以绘制类似于这种图像,我们的X轴是我们的日时期,Y轴,就是说在这一天他所发布的一个房屋的一个,具体的一个个数对吧,也是类似于这种柱状图的这种形态。

那么我们可以看出我们的具体的这种房屋,它所发布的一个时间有点儿其实有规律的啊,对吧,是有规律的,那么这个呢其实是一周一周的波动,那么类似的呢,我们如果是遇到了这种文本类型的数据呢。

我们是可以这个与文本类型的数据呢,我们是可以做一个云图,Wordcloud,云图,云图的含义呢,就是说我们的一个具体的一个在绘制的时候呢,如果这个文章里面这个单词出现的次数越多。

那么它的它的一个字体就越大,就是这个意思,没有其他意思,云图其实很多同学都知道,我们这个地方呢,通过云图,我们就知道,大部分的房子呢可能是位于这些wall street啊。

或者BDVA这些对应的一个位置对吧,那么我们也可以对我们的一个display address啊,做一个统计,这个地方呢display address呢,其实他也是这种字符串类型的。

那么对于这种字符串类型的呢,我们也可以做一个统计得到的统计,得到一个统计值啊,然后做一个可视化,比如说我们的一个具体的一个,做这样一个可视化,就是说我们的一个具体的一个嗯房子,如果它出现了一次。

他就是说对应的一个地址,类似于就是说只出现了一次的这样的地址的,一个房子,他拥有多少个对吧,其实这也是一个非常非常典型的一个,左偏的一个分布,也就是说我们大部分的房子呢。

它的一个出现地址啊都是比较独立的,都是比较独立的好,那么我们来看一看这个features,features呢就是一个list类型的,对于这种历史类型的呢,我们可以统计一下这个房子。

相当于是它是这个它的含义,就是这个房子的一个特点对吧卖点,那么这个卖点呢你就是我们的一个tag,那么我们可以这个地方呢可以统计一下,这个features是它具体的个数,大部分的房子的一个特点的个数。

就是他的tag个数是在00~0到六之间的对吧,然后呢大于六的也有,那么对于我们的这个features呢,我们也可以画一个云图来看一看,大部分的一个tag呢,就是说可以dog dogs aloud。

可以养狗对吧,elevator我们有电梯的,Door man,有门铃的对吧,然后我们还有这种什么可以养猫的,有健身房的等等等等对吧,这个就是我们的features。

然后这个地方我们有个manager id,manager id啊,这个地方就是一个中介的id啊,也是一个非常规整的一个字符串的类型的,那么我们接下来就是我们,其实刚才是将我们的这些字段。

大致给大家讲了一下,然后我现在问大家一个问题,就是说,如果大家通过我们的具体的数据集的一个理解,你会认为哪些字段对我们的具体的一个房屋的,一个热度是非常非常相关的呢,也就是我们给大家讲的。

这些具体的一些字段之后,你会认为哪些字段,会影响到我们的一个具体的房屋的热度呢。

也就会影响到我们的标签呢,对有没有同学想回答的,对呃soft的同学以及莫西莫辛同学,以及两位手机用户同学,有没有想回答的,如果你看了之后,看了我刚才给大家讲的这些字段之后,你有没有觉得。

哪些字段可能会跟我们的一些标签有相关呢,有没有同学想回答的,那么这个地方呢就是说我们刚才也讲了,在讲这个数据集之前,肯定我们的这个价格位置对吧,都跟我们的一个具体的一个呃,房屋的一个标签是相关的。

其次呢还有可能跟我们的标签强强相关的,是我们的这个B20id,以及我们的manager id,这个BADID,这个BDD呢和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的情况下,我们toto bi的一个整体的一个分布,它其实是嗯,相当于是也是一种对两个字段进行分组的,情况下,然后再去看一个具体的数值的一个分布的情况,它比这个镶嵌图呢。

可能嗯就是说更加直观一些啊,但是呢这种小梯形图呢,它不能看出我们具体的一个数据,它有没有离心点啊,他其实是看只能看到这整体的分布的情况好,那么类似的啊,在simple的库里面呢。

其实有非常非常多的一些画图的函数,都可以就是很方便的用来做一个画画图啊,那么这个地方呢其实是有很多的一些库用,都可以用来做画图的,比较典型的就是说如果是学Python的话。

最最嗯就是基础的画图的库呢是这个MATTPLEAP,它是最为底层的我们的画图的库啊,最为底层的画图的库好,然后呢如果是基于Macbook lip呢,就是由这个我们刚才所讲的这个CBSBL呢。

这个库是基于match prolip进行二次开发的一个库,然后可以快速的绘制,得到我们的这些很漂亮的一个图标,也就是说我们他其实是调用这个match pch lib,做一个画图啊。

所以说它是一个高层的一个啊组件,然后呢还有一些其他的库啊,比如说这个我们的PLOTLINE,或者说我们的BOKEH嗯,这些库呢都是比较高阶的库,它可以嗯跟我们的浏览器啊进行集成啊。

然后做这种可就是说这种叫带有交互式的图啊,都是非常非常方便的,还有一些呢,就是我们对我们的具体的一些地理位置,做可视化的图嗯,比如我们的这个地方,FOAIUM都是这些图啊,都是可以嗯。

相当于是不同的数据类型,我们做不同的可视化好,然后还有一些对我们的缺失值,做一个可视化的啊,我们在之后的课程也会给大家讲的好,那么这个地方呢,就是说有很多同学在学了这些画图之后呢,就可能是会觉得迷糊。

或者觉得我第一次接触,你给我讲这么多图干什么,其实这个地方是这样的啊,我们的本质的可视化呢,就是在于我们如何是用一种一种图,或者合适的图,对我们的一个字段做出一个具体的一个可视化,做出个统计。

比如说我们想要对一个具体的一个数值,做一个可视化的话,其实我们是可以画出它的一个柱状图的对吧,一个数值在不同分组的情况下,它去写一个可能分布的情况,或者说你不画这个柱状图,你就画这种密度图。

其实本质是一样的,就是它展示的一个形形态啊,以及具体的一个形状是不一样的,类似的你可以画这种我们的累计分布图,现在有点像我们的一个CDF对吧,从我们的一个相当于是,小于我们的180的一个数数据。

它大部分就是它的比例是在0。05对吧,接近0。05,然后呢,小于190的数据呢,是在0。2 20%的比例,然后一步一步增加到一,这种相当于是画会值得到我们的一个CDF对吧,我们在概率里面的CDF。

就是说我们的数数据它整体是如何进行分布的,然后呢我们也可以绘制得到这种散点图,绘制得到散点图图之后呢,我们可以散点图,它是二维的对吧,我们可以绘制的它它绘制到它单维的。

相当于是它的边缘分布的密度直方图对吧,这个都是非常常见的一些画图方法,通过这些画图方法呢,我们就可以将我们的具体的一个数值,以及相关的资料呢,把它进行用合理的方法给他展示出来。

好额那么我们休息56分钟好不好,我们休息56分钟,然后继续我们休息到这个9。02,然后我们回来好不好,然后我们休息一下好,然后大家如果有什么问题的话呢,你可以在我们的一个聊天框里面打字,让我知道啊。

好我们休稍微休息几分钟好不好,好嗯然后我们准备回来额,然后各位同学对我们刚才所讲的内容,有什么问题吗,我看大家都比较沉默啊,如果大家有什么问题的话,也欢迎提问啊,因为嗯你有问题的话。

可能学的会更靠更快一些,不然如果你没有问题的话,相当于是嗯我相信呢可能你没有问题,但是呢如果你真的有问题的话,那可能就是第一时间提出来的效果会更好一些,对好,那么我们就继续好不好好,我们继续啊。

嗯然后呢,我们接下来看一看我们的一个特征,工程与实践啊,我们在做一个具体的一个嗯,具体的建模的时候呢,我们在进行具体建模的时候,其实我们是给到我们的一个数据,我们是需要构建一个具体的一个模型对吧。

那么这个具体的一个数据呢,其实我们的一个数据,它可能的一个类型呢是多种多样的,我们在这里面呢,其实我们是首先来看一看第一种数据类型,是类别类型的,类别类型的呢,就是说我们其实它是一个嗯非常常见的。

我们的数据的一个类型啊,就是说我们的数据字段它是这种类比特征嗯,比如我们常见的这种个人信息,性别,城市省份,民族户口类型,这个里面都是我们的具体的一些呃,类别类别的人,然后我们的颜色对吧。

颜色里面的取值有红色,白色等等等等,国家里面有具体的取值,中国美国对吧,然后我们的动物这个地方呢,其实我们需要注意,就是说我们的类别,它有一个具体的取值空间,这个取值空间呢就是它具体的一个。

就是说这个类别它能够取值的这个字符串,相当于是这个类别是一个sage这个集合,这个取值空间呢就是它的一个具体的一个元素,类别特征呢是我们在做数据处理的时候,在我们在做建模的时候。

任何特征任何时候都要做处理的一个数据,因为类别特征它往往都是这种字符串类型的,我们对一个具体机器学习模型啊,它是只能接受这种数值类型的一个计算,我们可以回想一下我们的线性模型,我们神经网络对吧。

其实它本质只能接受我们的一个数字类型的,一个数据,所以说类别类型呢,数据呢我们在做处理的时候呢,我们肯定是要把它做一个编码的好,另一类型的数据呢,它的一个具体的一个取值空间,它有大有小,对吧有大有小。

如果是小,我们都是就是说这个没什么问题,如果是比较大的话,就有可能有问题,这个地方的大呢,就是说如果一个类别它的取值是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 damain函数。

或者说从SKN的one hot encoder,来做我们的一个具体的一个编码,就是one hot编码,第二类呢是我们的label encoding,Label encoding,就我们标签编码。

标签编码呢它是将我们的一个具体的一个类别,把它用一个独立的一个数值id做一个转换,这个地方呢就是说我们把这个具体的country china,编码为零,USA编码为一,UK编码为二,JPM编码为三。

以此类推,他呢他那个方法呢,就是说我们的一个具体的一个操作呢,Nel encoding level encoding,原始的具体的一个应用场景,就是对labor做的,就是对我们的一个标签做的。

这个地方呢我们的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。

作为转成一个具体的数值,然后转为数值之后呢,然后把它进行一个二进制二进制的编码,好,binary encoding呢,其实它的一个操作,其嗯就是说跟我们的一个one hot是非常类似的啊。

他但是呢他也会,他会也会带来这种次序的改变啊,因为one hot他其实是没有改变这种大小的关系的,但是呢这种binary coding呢,它其实是加入了这种大小关系的一个嗯。

就是说改变的barry encoding呢,它的可以视为这种完后台一个替代品啊,就是整体的一个维度会变变得更加低一些,还有一类呢是我们的一个frequency encoding。

或者说叫做我们的一个count encoding,它的一个具体的操作呢,就是说我们是可以把这个具体的某一列的,一个具体的取值的一个次数,用来做它原始的一个编码,在这个地方。

我们如果是对我们的这个country,这一列做一个编码的时候,china出现了两次,我们把它变某一二,UC出现了两次,我们也把它编码为二,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呢,我们其实本质就是对我们的一个数据集呢,我们是统计一下这个count字段,它对应的一个label的一个取值的情况。

比如我们的一个contest的china,它对应的一个label对我们的大get it分别是多少,一和零,我们对它取出一个均值就完了,然后就得到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里面找到更多的啊。

在我们的secret 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类型呢就是说是这个图片的一个URL,对于这个photos我们可以统计它原始是一个list。

我们可以统计到什么特征呢,就是它的一个具体的历史的一个长度,list的一个长度,那么这个list的长度呢,我们就可以相当于是视为它的具体的一个,具体的取值这个数啊,取值个数好,然后呢。

这个features其实它也是一个类似的类型的对吧,然后呢,我们这个地方,其实我们也是可以统计它具体的一个个数,然后这个description,description它是一种文本类型的,文本类型的呢。

我们这个地方就取值,统计一下它到底是拥有多少个单词,这个地方怎么做统计呢,我们就是对它进行一个使用,我们的一个空白符进行分隔,然后统计一下到底有多少个单词就行了对吧,然后如果是这种created的。

它是一个时日时间类型的,那么对于时间类型的我们怎么做,把它转为data data,data time之后,然后提取它的一个年月日年月日对吧,这个呢就是我们的具体的一个相当于是,日期类型的一个统计。

当然我们也可以做这样一个统计,就是我们刚才所讲的这个交叉的一个特征,统计一下,每个bedroom平摊的一个具体的一个价格,每个bathroom平摊下的价格,每总共有多少个房间对吧,等于是这两者相加。

就是总共有多少个房间,我们bedroom和bathroom进行相加,以及我们平摊每个房间的一个价格,每个房间的价格对吧,这些都是我们可以做的,那么这些操作都是非常有用的一些字段啊。

就是它是嗯将我们的一些原始的一个数据,进行一个交叉计算,得到我们的一个新的一个字段,那么我们在做一个交叉的时候呢,你其实是要考虑啊,并不是说所有的字段都可以做一个交叉,这个地方的交叉呢其实也是遵循咨询。

就是说我们PPT的一个规律啊,就是同类之间可以做加减,同类之间可以做除法,但是同类之间一般不做乘法啊,不同类型之间可以做一个除法好,然后呢对于我们的一个具体的数据集呢。

我们其实是可以做一个target encoding,这个地方呢一个target encoding呢,可能就稍微有一点点复杂,我们在原始的数据集里面,我们有一个叫做manager id这个字段。

mani id相当于是一个中介的,一个中介的一个编号的吧,中介的编号,这个地方,如果我们是想要对这个manager id做一个target进行coding,我们怎么做呢。

非常建议用这种五折交叉验证的方法来做,五折交叉验证,是这样一种方法啊,我们把我们的数据集划分成五份,五分,这是我们的第一折,这是一折,这是我们的第二折,这是第三折,第四周,第五周,在第一折的时候。

我们用这个做我们的验证集,然后其他当做我们的训练集,这也就是说这个地方这是我们的VAL,第二折的时候,我们用这一折当做我们的验证器,第三折的时候,这是我们的验证期,第四折的时候,这是我们的验证器。

然后第五折的时候,这是我们的验证期,在每一折我们用到的验证集不一样,然后训练集也不一样,这是我们的交叉验证啊,相当于是我们把我们的数据集拆分成多份,然后把它进行划分成这个地方,划分成五份之后。

我们就需需要迭代五次对吧,那么这个地方跟我们的这个target encoding,有什么样的一个区别呢,或者说有什么联系呢,这个地方,我们的targeting encoding。

其实是很容易出现标签泄漏的一种情况,其实是很容易出现标签泄漏的,你可以设想一下,我们刚才在PPT里面所讲的那个例子,如果一个manager它对应的一个样本就一个的情况下。

那么在这个地方我们如果是做一个targeting coding,我们其实很容易的就可以将就,很容易将我们的一个具体的一个对应的一个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呢,有点像这种神经网络的这种思路啊,有点像这种堆叠的思路,但是呢std它其实是这种手工来实现。

这种堆叠思路的这种方法,它是通过这种交叉验证,然后通过这种堆叠的方法,然后完成我们的一个具体的一个模嗯,就是说新增的特征,这个地方我们其实新增了多少列特征,一列两列,三列,四列,五列六列。

这是我们新增的第二层的,我们的输入的数据集,它是一个六列的特征,我们的标签呢仍然是原始的标签,这个标签仍然是原始的标签,我们的一个具体的一个测试集的一个特征呢,也是我们新增了六例。

然后我们的一个具体的一个测试集呢,是基于我们的一个相当于是这个新增六列,做一个预测,因为我们的一个这个地方做的一个,第二层建模呢,是我们的新增六列的特征,和我们的一个标签的一个建模。

我们这个地方的预测呢,就是对我们的新增六列的特征,然后作为我们的输入,然后预测我们的标签,这个呢就是我们的代码实践啊,然后如果各位同学想要下去仔细阅读呢,也是非常建议大家可以下课仔细阅读一下的好。

然后我们继续,首先呢,我们在做一个具体的一个特征工程的时候呢,需要进行一个思考,就是我们的一个具体的特征工程呢,它是跟我们的数据集相关的,不能一概而论啊,不能一概而论,也就是说不同类型的数据。

我们是需要做不同不同的一个特征工程的,这是第一点,第二点呢就是我们的一个具体的模型呢,我们是需要做一个具体的一个处理的,我们的一个具体的处理呢,就是如果是对于数模型,对于我们的线性模型。

其实我们各自的处理方法是不一样的,对这些代码在哪找,可以找到,在我们的一个QQ群啊,我们待会会发到QQ群里面,对待会我会发到QQ群里面,好不好,不同的模型,我们处理的一个特征方法其实也是不一样的。

也是不一样的好,然后呢我们其实在我们学习的时候,重点要学习的就是我们的一个机器学习模型,它适合用什么样的一个特征,这个是你在做学习的时候关键的一个点,什么样有有哪些继续,具体有哪些具体的机器学习模型。

我们有哪些具体的特征,工工程方法,两者之间怎么做一个匹配,这个才是我们在做动手的时候,非常非常核心的一个能力好,那么以上呢就是我们这节课的一个内容,各位同学有问题吗,对如果有问题的话。

可以提出来让我知道啊,对,好,同学们有问题吗,如果没有问题,扣个一好不好,扣个一我们就结束我们今天的课程对,好那么如果大家有问题呢,也可以在我们的QQ群里面艾特我好吧,那么我们今天的直播就到此结束了。

然后我们待会呢会把代码上传到我们的QQ群,好的谢谢各位同学,谢谢各位同学好,谢谢大家,那么我们下节课再见好吧。

1447-七月在线-机器学习集训营15期 - P5:2-决策树、随机森林、GBDT - 程序员技术手札 - BV1ASste6EuZ

好的好的,那那个大家晚上好啊,我们今天上咱们的第二次课,在今天的课程当中呢,我会给大家介绍到另外一类非常独特的模型呃,我们昨天的模型和今天的模型,是工业界当中最爱使用的模型。

而今天介绍的模型相比于昨天的模型,有它自己的一些独特的优势,使得啊工业界当然在工业界的话,我们是两类模型都会用,但是如果大家去看一看各式各样的,近几年各式各样的数据科学比赛,你会看到。

今天我们讲到这一类模型占据了半壁江山,于是无论如何,大家在解决任何问题的时候,都会第一第一时间想到说,我要用数模型去试一下,所以这个地方树模型,包括我们说到的决策树,以及决策树的一些集成模型。

包括今天会提到的随机森林,Random forest,Ok,这个模型相对于昨天的模型有它自己独特之处,它在数据的预处理的部分啊,我的声音大小OK吗,声音小不小吧,那我在具体讲内容之前。

我再跟大家确认一下我的声音大小是OK的吗,没有问题吧,啊所以我觉得说声音小的同学,可能是自己那边声音调的不够大啊,所以调大一点,好吧啊,好没问题,那我们今天提到这个模型非常非常重要啊。

就是数模型的基础啊,叫做决策树,decision tree啊,那基于这个决策树呢,我可以用一些集成的方法,去得到各式各样的高级模型,比如说其中的一个高级模型叫做随机森林,这是我们今天要给大家讲到的模型。

这个模型呢在于它自己独特的特点,我们上节课讲这个模型,做分类的模型叫做逻辑回归,逻辑回归完成的,完成预估的这个方法是,你可以对它做一个WX加B这样的运算,在送到一个sigma的函数当中去。

拿到一个概所谓的概率P,而今天的数模型是另外一类处理的模型,所以这类模型在解决问题的时候,会有它自己的独特之处,而这类模型由于它非常非常友好的,一些数据预处理上面的一些特性,使得它在工业界被广泛的应用。

所以这是我们今天给大家讲到的内容,我们会给大家讲到从逻辑回归,上节课讲到的模型,我们简单的过渡一下,提到今天这个模型叫做decision tree,决策树,我们会告诉大家它总体的流程和核心的问题。

而这一部分也是大家在去参加各式各样的,机器学习工程师面试的时候,公司面试的时候最爱问到的问题,所以希望大家一会儿在我讲到这个部分的时候,能够好好的理解一下,有问题也可以提出来,大家一起讨论一下呃。

我会告诉大家,这类决策树它不仅能完成分类问题,它同样可以完成回归的问题,所以我们会给大家讲到回归数,Requesting tree,我会告诉大家说你回归树是如何去构建的,你如何去生长出来一棵这样的树。

以及你如何去最优化一个回归树,那N科的数单科的角色树,它可能会有他自己的一些问题,我们可以用一些模型集成的方法,去把单科的决策树集成一个集成模型,所以最终这个地方有一个很重要的集成模型。

叫做random forest,叫做随机森林,OK所以我们会给大家介绍到这样的一类模型,好的,所以这个是我们今天我给大家提到的,三个主要的内容,以及他的一些更细的二级大纲,所以大家有一个大题的印象。

我们就开始给大家做一个介绍了,我们思考一下这个地方有一个这样的问题啊,有一个妈妈在这个小姐姐到了24岁的时候,很着急啊,觉得女孩子年纪大了啊,如果没有出价,可能会有一些问题,于是他要去做一个事情。

他又去相亲啊,小姐姐长得不错,所以来相亲的人很多,于是他需要需要去做一个决定,说今天这个人来了之后,或者说今天这个人的条件下,我要不要去参加这次相亲对吧,因为出了门我还得化个妆好。

所以这个地方的问题就是,我是否要去相亲这样的一个问题,我们上节课讲到这个模型叫做逻辑回归好,这个logic的关系是一个很棒的模型,在这个模型的场景底下呢,我可以去完成一个是或者是否这样的一个。

二分类的问题,所以如果我们用logistic regression,去解决这样的一个问题,我们可以找一些需要思考的因素过来,比如说这个不要和我相亲的,这个小哥哥或者大叔,他是否长得足够的高。

他是否足够的有钱,他是否长得比较帅呃,还是说它是一个很有潜力的这样的一个人,或者说他的品德是什么样的一个程度,OK所以我找了这样的一些X1X2X三,X4和X5过来,然后我可以基于上节课的内容。

给定W1W2W3W4W五,当然你可以加一个偏执项啊,OK于是我们做了一个事情叫做WX啊,你可以加一个偏置项给B,然后你可以送到一个什么对SIGMOID函数当中,对你可以送到SM的函数当中去。

拿到一个概率P,找到一个概率P,这就是我们上节课讲到的内容对吧,我们还是给大家讲到了,到我们有用这样一个模型的时候,我们会有一个损失函数叫做log loss,然后我们会对这个logo los。

基于比如说gradient descent,梯度下降去完成一个优化,拿到最好的那样一组WOK好。

这是逻辑回归,我们今天讲完的模型就很有意思了,所以这个小姐姐在发现啊,前面这个东西要有这么多的数学知识。

这是一个很头疼的事情,还要去做数学计算,所以这个事情就变得很boring,所以有没有其他的方法呢。

他想了一下,他说哎好多场景下我有一票否决否决权,如果今天这个小哥哥的年龄大于30岁了啊,不好意思,你就不是小哥哥了,你可能是一个小叔叔了,所以年龄大于30岁呢,有一票否决权,不好意思,就完全不去了啊。

就不用考虑其他的因素了啊,然后呢如果他年龄小于等于30岁呢,我再看看其他条件,哎呀这个这个呃有一点点丑啊,所以呢这个时候哎这个条件也不行,也一票否决了,唉如果现在唉年龄也还还适中,长相也还不错。

那再看一看他的收入状况啊,所以如果要收入状况非常非常穷啊,买个冰淇淋都买不起,不好意思啊,一票否决权取不了了,如果他今天诶收入状况很高,那不就是高富帅吗,好去所以就去了,对吧好,如果他的收入中等。

我要看一看有没有时间陪我对吧,所以是不是公务员好,如果是公务员的话,好建,不是公务员的话不建,而这个很符合大家的日常生活,做决策的这样的一个过程对吗,所以人做决策的时候,有时候是这样一种更直观的过程。

我我才不会去做什么数学计算呢,我就是一些规则,这个东西翻译成程序语言是什么,对呀,它就是if else if什么什么什么,我怎么怎么样,else啊,if啊,怎么怎么怎么怎么样啊。

那else再不是的话怎么怎么样,OK所以他是这样的一个诶,如果怎么怎么样就怎么怎么样,如果再怎么怎么样,就怎么怎么样,如果都不是我怎么怎么样,是这样的一个房事,去判断这个小姐姐是否去参加这次相亲好。

所以我们把这个东西做一个抽象呢,大概是这样的,我们会拿,我们会从左边这个小姐姐和妈妈对话当中,去得到这样的一个决策树啊,这就是一个决策树,所以这棵决策树实际上很清晰,他给了他的每一个分支。

实际上就是你会根据一个,你会根据这个条件的取值去做一个判断,OK顺着这本书往下走,走到叶子节点,你就可以拿到你要的结果,所以这个模型是,这显然也是一个可以用于决定,我到底去不去参加相亲的。

这样一个二分类的一个模型,这个模型是有它独特的特点,它的特点是什么呢,它很简单很简单吧,它甚至不需要去做数学的计算啊,我就是一堆的规则,我做预测的时候就是顺着这个规则往下走,我就拿到结果了。

第二个他的逻辑非常清晰,对不对,它相对于我前面数学自动的那种模型,它的逻辑非常清晰,我就是去做一个条件判断他的年龄怎么样啊,大于小于他的长相是什么样的水平,OK她的收入是什么样的水平。

OK他的可解释性非常好,对不对,如果今天小姐姐告诉你说,OK这个人我去见,那你就可以知道他为什么去见,你就可以基于这些条件去判断说为什么他见哦,是因为这个人收入很高,然后他的年龄和长相也还OK。

所以他们把这种模型叫做透明的,叫做叫做transparent,透明的,所谓透明的意思就是,它它对用户而言是直接可见的,你是知道他为什么去做这样一个角色。

为什么做了这样一个判断好了,所以大家已经见到了这样的一个结构,那么我们来我们现在来给这棵树,这个决策树这个模型做一点小小的定义,决策树是一个基于树的结构进行角色,这样的一个model。

那这个模型它有它自己的特点哦,大家仔细看一下,每个内部节点就是这个地方绿色节点,OK那这个地方的内部节点,就是这个地方的绿色节点,大家看到了啊,这些绿色节点啊,那它是什么呢,每个例子。

节点是不是针对某一个条件去做了一个判断的,就是针对某个属性去做了一个判断呢,所以我上最上面的类似节点,对年龄做了一个判断,第二个类似的节点对长相做了一个判断,第三个绿色节点对收入做了一个判断。

在下面一个绿色节点针对公务员做了一个判断,那我们再看一下每个分支,是不是对应这个判断的一种可能的结果呀,如果它小于30岁,他就走左分支了,他大于30岁,他就走六分制了。

所以这个地方的每一个分支实际上是一种取值,对不对,他要不在这个范围内,要么就是说OK他的收入,他的长相是什么样的程度,所以某每个分支都是一种可能的结果,或者说这个属性的取值。

然后这个地方的每个叶子节点是什么呀,我们说了,顺着这棵树往下走,他如果走到了叶子节点,他拿到结果了,所以叶子节点就是结果呀,就是你的预测结果好,所以这棵树就长成这样,但是这棵树它不是平白无故出现的呀。

这个小姐姐一定是根据自己多年的这个,这个追剧的这些经验对吧,看了不少的韩剧,OK所以就养成了这样的,不不是养成了,就是培养起来这样的一种判断的标准,所以说所以说唉当我有一个小哥哥来的时候。

我可以去做一个判断好,所以这个学习的过程,实际上就是通过不断的去看韩剧,去通过这个训练样本的分析,来确定说我划分属性到底是什么,我最看重什么,我最看重的是帅不帅,是高不高,是有没有钱还是高。

是有没有钱还是高,是有没有钱还是年龄怎么样,所以这棵树是慢慢长出来的,你得去看看他最关注什么,然后看他在关注什么,再看他关注什么,OK好,那预测预测的过程当然非常简单了。

预测的过程就是直接顺着根节点往下走就好了,你是有一个条件就走哪个分支呗,你往下走,直到你碰到叶子节点,结果都取出来了,这里就叫做叫做决策树,好了,说了半天,你知道这个东西长什么样了,你知道这个东西呢。

呃我怎么去完成它的预测,诶,我好像不知道这个东西怎么得到对吧,所以所以我怎么知道小姐姐,她对哪个东西最最最看重了。

这个就是我们需要去了解的信息啊,所以这棵树的生长的这个过程呢,总总体的流程是这样的,大家先建立一个基本的概念,它有一个总体的流程,它总体流程是一个分而治之的一个流程啊。

一个divide and conqueror分支的一个流程,我会自根节点至叶子节点去做一个递归,所以这个地方自根节点和带叶子节点,去做一个递归,去做一个递归,然后,大家看到这个地方呢在每个中间节点。

实际上他会去寻找一个划分的属性,然后这个地方有三种终止的条件,就是这棵树它会一直生长对吧,但它不能一直长下去啊,你总得涨到什么时候,这个小姐姐总得在判断若干个条件之后,就知道我到底去不去参加相亲对吧。

去不去参加这个相亲,对不对对啊,大家能听到我声音吗,大家能听到我声音吗,啊不卡对吧,那个大家切换一下路线啊,我这边我这边是没有问题的,我这边的掉帧率是没没有掉帧率的,我的我这边是百兆的啊宽带。

所以大家那个那个切换一下自己的线路,有可能是这个切换一下自己的线路,有可能是这个直播平台的这个线路的问题,对OK好,所以这个地方呢我这个地方的这一行,说的事情是我需要去了解什么时候停止。

就是这棵树什么时候停止生长啊。

你总得长成一棵这样的树,这个小姐姐才知道说我如何去,做预估吧或者做预测吧,啊现在大家能听到我声音吗,我再问一遍,能听到我声音吗,啊你们切换一下线路好不好,你们切换一下线路好不好。

对我这边的话做不了什么东西啊,因为我这边显示是OK的状态好不好,好那个啊,对我我我我知道您反映的情况啊,你们切换下线路试试看,因为我这边做不了调整,Ok,我这边我这边的带宽和掉帧率,是没有任何问题的。

所以我不知道怎么去调这个东西好吗,好不好,好那个大家先听啊,如果你在听的过程中实在忍不了了,你跟我说,我我再看一看是不是用流量给大家讲个课,好不好,因为我家WIFI应该是没有问题的,好的好。

所以这个地方呢其实像我们要做的事情,是这样的,我知道了,这棵树长成这样,我下面要解决两个问题是第一怎么长,OK第一怎么长好,第二涨到什么时候停,Ok,对不对,我需要去解决这样的问题,对吗好。

所以我需要解决两个核心的问题是诶,我知道这棵树长成这样了,但是请告诉我怎么去长出这样的一棵树,我已经有一堆的数据给你了,我有一堆的韩剧准备好了,小姐姐去看好,但我我我得知道这一堆的韩剧看完之后。

它的判定依据是什么,就是这棵树的怎么去得到啊,怎么找,以及涨到什么时候去停啊,因为你不能说你让他一直涨对吧,你总得说你总得告诉我说,你满足某些条件的时候,你到底去不去参加这次相亲啊。

对吧嗯好的,所以这个地方有三种终止的条件,第一种条件是当前节点包含的样本,全属于同一个类别。

意思是什么呢,我看了这么多的韩剧,所有韩剧都告诉我说,如果这是这个小哥哥是一个年轻有为,长得帅,然后收入又高的这样的一个小哥哥一定要建好,所以所有的韩剧都告诉你这件事情说要建好,所以那就不用。

那就大家都达成了统一的意见啊,我不需要我不需要再去做做什么呃,这个别的条件判断了,所以这样的情况下又高又高又不是高啊,就说这个年又年轻,长得又好又帅,收入高频,我没见对吧,大家都见啊。

所以这个时候大家意见一致,OK那我就拿到了一个结果,不需要再不需要再往下涨了,结果一致好。

那第二种情况是什么呢,当前的属性即为空,或者所有样本在属性上的取值相同。

无法无法划分,什么意思,就是这个是这样的,他今天看韩剧了,他发现一个很纠结的问题,这个很纠结的问题就是男2号也很年轻,也很帅,也很有钱,但是韩剧里头的很多小姐姐不见了,这个就有点小尴尬了啊。

所以这就是你找了好多韩剧过来,你发现诶都是这样的情况,走到这了,有些建了,有些没有见,我好像这个都是一样的条件,有些建了,有些没有见对吧,可能就不好判断了,这时候我就没有办法。

我就我就我所有条件都一模一样,这个时候你还有些看,有些不看,有些贱,有些不见,那我也找不到其他的条件去做区分了。

对吧,所以这个时候你就要停,那个大家听这个课的时候,跟着我的思路来好吗,你们你们现在有疑问是正常的,因为你第一次见到这个东西,等往后讲你的疑问就没了,所以你们可以先提问。

但是我不一定会马上解答你的问题好吧,所以记住了,第一种条件是说所有的韩剧都告诉你说,要去见他,第二种条件通常情况下是告诉你说,哎我所有条件都一模一样,这两个人的这两个人的条件完全都一模一样啊。

你说的没呃,我不好意思,我看到大家提问这个问题,但我们没有理解大家的意思是什么,第二条的属性取值相同,和第一条有什么区别,第一条告诉大家的是,我只要满足有钱,所有韩剧告诉你,只要满足有钱全都要满足。

有钱全都要满足,有钱全是它的属性,我不用考虑了,明白吗,就是这种终止条件,意思是说,如果今天韩韩剧里头告诉我大于30岁,我就不见了,我其他东西都不用看,明白吗,就是只要满足这样的属性。

满足这样的条件全都一模一样,结果全都一模一样,我就不需要去区分了,我这个时候就终结了,OK我有这个条件,一票否决,我就终结了,我不看去不去看有没有钱,不去看是不是公务员不用看了,你能力这么大。

我叫你干嘛,OK所以这是第一个条件说的事情,第二个条件说的事情是,我把所有的属性全都取出来了,这些所有条件都一模一样,这个时候还是有时候见,有时候不见,它,是不是没有办法再往下生长了呀,你要往下长长。

总要去找到一些不同的条件去做区分吧,要不就是这个高那个矮,所以你不你你去见高的,不去见矮的,那如果他都有钱对吧。

他都都有钱,都年轻,都很高,都很帅,还是有些小姐姐不去见,有些小姐姐去见了。

这个时候你告诉我,你还能找到什么条件去做区分,你找不到了,所以这是第二个条件,告诉我们说所有样本所有属性上的取值都相同,我找不到属性,找不到其他的判定标准去区分它了,我说明白了吗,这是一和二的区别。

对有人总结的很,有同学总结的不错,一个意思是说我在这个条件下,所有标签都一样,二是我所有属性全用完了,或者说所有属性都一模一样,但是它的结果还是不一样,啊这这个叫什么OOOIS的,这位同学不要太着急。

呃,我没我还没有给大家讲到如何去做预估,我现在在讲什么时候停,至于停到了之后选什么还没有讲到,不要着急好不好好吗,所以不要跳啊,就是大家稳一点啊,好的,所以我说清楚了吗,第一种情况和第二种情况。

我有我我给大家说清楚了吗,好那第三种情况是当前节点包含的样本即为空,就是呃就是没没有没有样本了,所以这种情况下你是没有办法去划分的。

所以记住了这个地方,当出现这种情况的时候啊,这个小姐姐看韩剧总结到这些情况的时候。

她就有心里有数了,就说OK这个看这个不看,或者说这个不能再分了啊,不能再区分了,请大家条件都一样好。

所以记住大家了解的第一件事情是什么啊,就是这两件事情啊。

涨到什么时候停啊,已经知道了,涨到什么时候停,嗯对下面这这这页有点有点懵,好看的对吧啊,这个地方是从周志华老师的西瓜书里摘出来的,一段伪代码,听清楚啊,是一段伪代码,然后看代码大家都很头疼对吧。

所以我也不需要大家去看,我嘴里头框出来的一些东西,大家看清楚了,我框出来了一些东西,我框出来了一些东西,所以这个时候框出来的东西是,你,什么时候停。

同学说第三个终止条件没有看懂,三是没有输入数据啊,没错有同学说的对,就是你这个店里头有红色,有蓝色,有紫色的衣服,OK我要决定他买不买,本来是衣服是有这三种颜色的,今天紫色卖光了,不好意思。

我到这个地方去做分叉的时候,有三种颜色,紫色的,今天店里头卖光了就没有了,你不能甩这个东西就停掉了,这肯定肯定是没有的,然后另外两个你是可以继续往下找,OK没有对应的样本了。

然后大家往下看呢,这个地方是一段伪代码,伪代码呢其实那个大家要读也读得懂啊,大家要读是读得懂的,我就是把刚才的三个终止条件写到这,这是对应第一类的终止终止条件,这是对于第二类的终止条件。

这是对应第三类的终止条件,好这个我不给大家念,你们自己去对好,现在这里头有个我用红色加粗的部分,在这红色加粗加粗的部分,这个家最近在说了一件事情,小姐今天得判断一下我,我到底现在最看重的是什么。

比如说你今天要在北京或者在上海买个房子,你手头上的钱有限,那你手头上的钱有限,肯定不能所有所有条件都满足,对吧哦,我要学区房,我要房子要大,我要防止新,我要防止这个采光好,户型好,交通便利啊。

哪来那么多钱,所以你钱有限的情况下,我们要怎么样要取舍嘛对吧,所以你要举手的话,他就问你一件事情,说,那你买这个房子,老哥你买这个房子,你最看重什么,你最看重什么对吧,什么样的东西是你完全接受不了的。

你看都不会看的,那有些人会说这个房子朝北的,完全不看,而有些人会说这个房子的年龄啊,这个房龄是他的房子,这个建造时间是在90年以前的,完全不会看,OK好,所以这个地方这个我用红色的这个底色加粗的。

这个部分是很重要的一点,他告诉我们说,我必须要去决定,小姐姐现在去做这件事情,最关注的点是什么,当前最关注的点是什么,这是最重要的点,大家听清楚啊,一会儿我们会讲到三种决策树,这是决策树算法的核心。

你之所以会有三种不同的决策树,很大程度上是因为他们在做做这件事情的时候,有不同的方法,但他们都达到了这样一个目的,所以记清楚啊,终止条件我说完了,那如果他不终止,要怎么样,不终止的话,这棵树要涨怎么涨。

你得去判断你现在看重什么好。

我们来到这个问题,你现在看重什么,插播一点小小的数学知识啊,不要害怕,这个地方有一些公式,我来给大家,以比较直接的方式来给大家介绍一下,这个地方的数学公式,你见到的第一个概念叫做熵。

这个概念是一个物理概念,所以物理老师会告诉你说,整个宇宙是在朝着熵变大的方向去发展的好,这个东西听起来逼格就很高了对吧,那什么叫做商,其实啊一点也不高级,这个东西是一个一个度量标准。

这个东西信息上所谓的entropy,它度量呢就是一堆的样本,它的纯度纯度什么叫做纯度,没有杂质就纯了对吧,有不同的东西混在一起,它就不纯了对吗,所以它是用来衡量纯度的一个概念,然后这个时候一个指标。

这个时候呢大家先看怎么算,我一会给大家解释,假定当前的样本当中,集合当中第K类所占的比例是pk,听清楚啊,今天有一个蛋,这个蛋里头有三种颜色的球,分别是蓝色的,红色的和黄色的,好,我们举这样一个例子好。

所以这种小袋里头就有很多很多的球,他们有三种不同的颜色,蓝色红色和黄色,那个这句话的意思就是说我告诉你说,我的蓝色啊取值是对他的这个比例是P1啊,红色比例是P2,黄色黄色比例是P3。

那大家告诉我这个西格玛P等于多少,西格玛I等于一到,不知道有多少类啊,假设它有N类,那一到N的这个PPI它应该等于多少,大家告诉我这个东西等于多少,你所有东西加在一起的比例当然是一啦,有问题吗。

没有问题啊,就是加在一起概率等于是一,好好问大家一个问题,问大家一个问题,哎我今天问你伸手进去摸球,然后我问你一个问题,我说哎小哥哥,你伸手进去摸这个球,你能告诉我你你你猜一下,你摸出来的是什么球吗。

然后我问你一下诶,如果你现在有你这三种颜色里头,有90%的球都是蓝色,你伸手进这个大眼睛去摸这个球,你会告诉我是什么颜色,你当然会告诉我是蓝色了,因为90%的球都是蓝色,我当然猜最多的那个了。

而且什么时候最不肯定啊,我问大家什么时候这个事情是最不肯定的,是不是三种球的,这这个袋里头这三种球的数量一模一样,你你猜不出来,你没有办法去取一个最大的,你新手进去摸它就是一个随机的啊,我说的三种球啊。

不要和0。5没有关系啊,就是大家那个跟着我的节奏来,有三种球,那我应该是,那我应该是什么样,三种球都是一样多,1/3,对不对,如果他是1/3,我伸手进去摸,我现在就很很懵。

他跟我说小哥哥小哥哥现在这里头最你,你觉得摸出来的这个球概率最高的是什么球,我不知道,因为这三种球居然数量也一样,所以这个地方的信息熵度量的是一种啊,不纯度就是这个值越大,它的纯度越低,这个值越小。

它的纯度越高,那大家告诉我,这个信息熵在什么时候去取到它的最大值啊,什么时候我的纯度是最低,我的不确定度是最高的呀,听清楚我的描述啊,纯度润最低,不确定度最高,对没错,在你每个类别的比例都一样的时候。

哎大家大家高中的时候就学过不等式对吧,我问大家那个不等式哦,不等式它的它的它的这个不等式的,它的一般什么时候取到等号啊,不准是他什么时候取到等号啊,通常情况下是相等的时候对吧,是那几个东西相等的时候。

比如说A等于B等于C,对不对,所以这个地方的entropy取到了极值,取到最大值的时候,也是这个地方的pk相等的时候,能能明白我意思吗,如果这个东西衡量的是一个不,一个一个混乱程度。

或者说它的一个不纯度的话,他什么时候取到最大,什么时候最混乱,是不是所有的pk都相等,是不是所有的pk都相等,是不是伸手尽力了,带头去摸球,所有球队所有颜色的球数量相等,有问题吗,这个地方有问题吗。

没有问题,对不对,好记住了,记住了,有这样一个概念,它叫做安全比,叫做西,它叫做安全比叫做西,它叫做安全比叫做细,他这样去算,他这样去算这个东西在所有的pk相等的时候,取到的值是最大的。

这个时候你最不肯定最不肯定,你完全你完全,你完全不知道自己摸出来的是什么样的颜色,这个东西叫做信息熵,好记住了,信息熵描述的是什么,是不纯度,就是他描述的是它的一个不纯的程度。

所以这个东西越大,它的不纯度越高,它越小,它的不纯度越低,它的纯度越高,OK听清楚了啊,那你想决策树如果要去完成一个判断。

我是希望我的肯定度越来越高,对不对,而我是希望这棵树,你你希望这个规则产出以后,我能更肯定一点点,我能更肯定一点点有问题吗,啊我我说一下,我说一下,这个地方表示的是它表示的是Y的类别数量,听清楚啊。

这个东西不是Y的绝对值啊,它是Y的类别数量,它是一个标记,它表示我有多少种不同的label,有问题吗,所以K等于一到底有多少种不同的label,比如说红黄蓝是三种,所以就是从1~3。

这不是什么Y的绝对值啊,这个绝对值没有关系,这个东西就是一个标记,它表示有多少种不同的label哦,说到就就就点到这好吧,然后你想想啊,诶为什么我需要机器学习的模型啊,机器学习模型是为了干嘛呀。

为了做预估诶,预估是为了为了怎么样,为了提前去拿到一个可以去猜出来的一个答案,或者是提前去预估出来一个答案,所以如果你这个模型构建的足够好,是不是去把我的这个地方的不确定度,降得足够低啊。

这句话有问题吗,你的机器学,你想想机器学习这些模型的本,他希望做什么样的事情啊,他是不是希望去让我提前拿到一个,预估的结果呀,是不是提前拿到一个预估的结果呀,是不是让我未来的不确定性尽量的低啊。

所以我希望这棵树在生长的过程当中,能让现在我对于我训练的数据,它的不确定度越低越好,你最好能让我现在很肯定的,就根据你这个规则就知道这是哪一类,根据另外一个规则就知道是另外一类。

所以这是机器学习模型想要做到的事情,他想让这个不纯度往下降,他想让这个不纯度往下降,他想让这个纯度往上升,他想让我去做预估的时候,这个事情足够的肯定,所以这个时候我有了一个东西去度量,我现在的不确定度。

度量我现在的不纯度对啊,我现在的不纯度,我是不是在每一次生长的时候。

我希望我基于这个规则,可以让这个不纯度往下降啊,好来这个地方又有公式好,不要怕公式,我给大家解释一下,他说了一件事情,他说嗯这样这样这样,现在电商里头这些,现在电商里面有这样一些衣服的颜色啊。

衣服颜色分别是什么呢,OK分别是这个这个啊黄色啊,蓝色,哎呦那大家等我,大家等我半分钟好不好,等等我半分钟好吧,现在OK了是吗,好的可能是直播平台的问题好吗,好所以我接着往下讲了。

记住我刚才记得我刚才说什么吗,我刚才说了一个东西叫做不纯度,叫做不确定性,不纯度机器学习模型,为了干嘛把不确定性往下降,我希望这个东西越来越纯,我希望越来越肯定,所以我们来看看怎么做。

假设我现在有一个属性取值叫做红黄蓝好,所以一个小姐姐来买衣服了啊,红黄蓝啊,红黄蓝号那个小姐姐,一个小姐姐来买衣服了,诶诶那个如果我现在不确定这件衣服颜色啊,我就告诉你说OK有一件这样的衣服。

那肯定是有一些小姐姐买了,有些小姐姐没有买嘛对吧,所以呢哎这个地方呢,就是在我没有根据这个属性往下生长之前,大家听清楚啊,肯定是对于这件衣服呢,肯定是有些有些小姐姐买了,有些小姐姐没有买。

所以这个时候他是不是在这个数据集上,我可以基于买和不买计算出来一个不确定度啊,不纯度啊,是不是可以计算出来一个信息熵啊,告诉我这个有问题吗,比如说有十个小姐姐过来,这十个小姐姐当中有啊。

那个四个小姐姐买了,有六个小姐姐没有买,是不是可以基于这个东西去计算出来,一个不确定性啊,有问题吗,没有问题对吧好,那如果现在新加了颜色,颜色有三个分支,所以这个地方是蓝色,这个地方是红色啊。

衣服的颜色啊,这个地方是黄色,OK那这些小姐姐是不是可根据这些衣服啊,就是她最后有没有买件衣服,衣和衣服的颜色有关系吧,所以我根据衣服是不是颜色,是不是可以把它分到几个不同的袋里头啊。

我是不是可以把它分到几个不同的袋里头啊,所以这个地方有几个不同的袋里面的话,每个袋里头都会有一些样本,但是因为我把我按照这个东西去区分了,所以它的肯定度有可能会变高对吗,所以这个时候这个东西就是。

我在基于现在的这个属性取值,划分之前的这个地方,它的交叉熵,而我说也不是交叉商,他的信息熵,他的信息熵是划分以前的信息熵,后面这个东西是什么呢,对后面这个东西是分成的,每个代理头新分成了三个蛋。

每个蛋里头它的不确定性,但是因为我的样本量减少了呀,所以我要给他做一个加权,我在前面这个地方不是绝对值,我重复一遍,这个东西不是绝对值,这个东西表示这个集合的数量,这个集合的数量。

我总共说了多少个小姐姐去买这件衣服啊,总共有十个小姐姐,我记忆不同颜色区分以后会有多少个小姐姐,对,在这里头也许是啊,我随便举个例子,也许它是5+3加二。

所以这个东西是数量好,所以我在我给大家说一下,这个事情实际上是什么样的呢,是说诶我在做划分之前,我可以计算出来一个不确定度。

不纯度我可以确定出来的不纯度,我在划分以后,我基于某一个东西去做判断了,我基于这个人的年龄大小,我去判断一下我要不要去要不要去和他相亲,我记得他是不是有钱,我去判断一下他是不是要相亲。

所以这个时候它会被分到不同的同类,而每个同类里头都可以算出来一个不纯度,这个时候我会用它这个桶中的数量比例,数量比例去做一个加权,我用这个东西去衡量说,当我用这个离散的属性去做区分的时候。

我的不确定度有没有往下降,我的不纯度有没有再往下降,降了多少啊,所以听懵了是吧。

听懵了是吧,好没关系,听懵了,我们来找个例子,这个地方的例子来源于周志华老师的机器学习,西瓜书的数据集,好的,所以这个问题很简单,我们最终的目标是为了去判断一个西瓜,到底是好西瓜还是坏西瓜。

最开始啊把西瓜什么各种都把西瓜包起来,你不准你去碰,不准你去看我,我只知道最终的结果诶是这样的好,最终的结果呢有有总共会有17个西瓜,这实习西瓜当中有八个是好西瓜,有九个是坏西瓜。

哎你告诉我能算他的信息商吗,就是如果我现在给你17个西瓜,这17个西瓜当中有八个九八个好西瓜,九个烂西瓜,然后把它一起放到这个袋里头,让去摸,你能知道你的不纯度是多少吗。

有公式的嘛,带进去算就好了,所以往里面一代是不是就算出来,信息上长这样啊,0。998,这个值挺大的,你想一想为什么挺大的,八个好瓜,九个坏瓜差不多呢对吧,一半一半一半一半,对吧是吗是吗。

是不是有一半一半,所以这种情况下不确定度肯定很高啊,所以这个0。998,实际上就代表说不确定度还挺高的,诶,那我能不能去找一些其他东西来做,做一些判断的,所以他就找了。

他说前面不是有些信息吗,诶那那不如取下颜色好了,我把颜色取过来总行吧,所以他把颜色调过来了,他就把颜色调过来,他一看。

他说啊那个有多少种不同的颜色啊,好我来看一下,有青绿,有乌黑,有浅白,好,好像就这三种,诶我记得这个颜色色泽等于青绿和乌黑和浅白。

我可不可以把这些西瓜分到三个袋里呀,我可不可以现在把它们分到不同的桶里头啊,我找三个桶过来,我把这些细胞按照颜色分到不同的桶里,可不可以,OK所以你把它分到不同的桶里,我问大家一下,你分到不同的桶里。

是不是桶里还是有好瓜和坏瓜呀,对啊所以这个时候我们来看一下这个地方。

盐分为亲密的瓜,有这么六个瓜,这六个瓜里头有三个好瓜,三个坏瓜,所以我算了一下,在第一个桶里面,它的不确定度是一在第二个桶里面呢,在颜色是乌黑的桶里面呢,在颜色是乌黑的桶里头,我算了一遍,它是0。

918,在颜色为浅白的,同理呢对颜色为浅白,同理我算了一下,它的大小是0。722,所以我基于刚才的公式去算一下,大家看到的这个地方,0。998,0。99998,实际上是原来的不确定度或者原来的不纯度。

听清楚啊,原来的不纯度,那我现在后面这个东西呢,对后面这东西是我现在的不纯度,就是我基于颜色已经分到三个桶里面,我积分到三个桶里面以后,我这三个桶里面的数据,我算出来的一个平均的近似的。

平均的加权平均的这样的一个不确定度,是不是不确定度降了多少啊,你看他说老师老师这个我明白了,他不确定度降了0。0。109呗,对呀不确定度降了0。109啊,哎这是我唯一的属性吗,这不是唯一的属性啊。

还有好多其他的属性呢,好那我把其他属性拿过来,我是不是我在前面这个数据集当中。

是不是还有这个属性啊,是不是还有敲的声音啊,是不是还有纹理啊,是不是还有起步,是不是还有触感呢,对我把每个都拿过来算一遍。

按照一模一样的方式,大家告诉我有多少种取值,我就把它分到几个桶里,我按照一样的方式去算,分桶之前的不确定度和分桶之后的不确定度,我就看看这个不确定度下降了多少,这个东西能够提供多少的信息。

让这个不确定度下降,这是决策树想做的事情,所以你用同样的方式,你按照耕地去做风筒,你按照敲的声音去做风筒,你按照纹理做风筒,你按照起步做风筒,你按照触感去做风筒,它都可以算出来一个不确定度,下降的程度。

你发现哪个下降的最大呀,哪个下降的最大呀,纹理下降的最大嘛,所以是不是基于纹理先去做区分呢,是不是基于纹理先去做区分呢,OK好啊,所以记清楚了,这个时候呢,你的你的这些西瓜已经被分到了三个桶里。

你的西瓜已经被分到了三个桶里,结束了吗,没有结束,继续往下涨。

分到左边这个桶里头的西瓜,可不可以再基于其他的东西去做区分,用一模一样的方式啊。

听清楚啊,你这棵树涨到这一步以后,这个又是一个数据集合,这个数据集合还是不确定还是有好瓜还是坏瓜,所以再往下找,接着去判断,到底哪个东西能让我现在这个桶里头的西瓜,能够不确定度下降。

最多我再去扫描一遍这个地方的耕地,敲声起步,触感和色泽,所以大家能感受到这棵树是怎么生长的吗,我说清楚它的过程了吗,它每一次分桶,每一次的生长,都是希望让我现在的不确定度下降,最多朝着这个方向去找。

好我希望大家没有问题,OK好,所以这棵树就会一直往下涨,涨到什么时候停,涨到什么时候停,是不是说终止条件1231233个终止条件,是不是说只要满足任何一个终止条件就停掉,它就停掉它,然后给一个结论。

OK好好。

这个这个很伟大的模型呢。

或者说这个很伟大的这个决策决策树的模型呢,叫做IP3啊,叫做D3对,它是一个递归的,没错它是一个递归的这个算法啊,就D3K好吧,他这个id3记住了ID3是基于什么,是基于信息增益,记住了啊。

这个东西是会会考考试,那个面试的时候会问的啊,ID3是基于信息增益去挑我最优的划分属性,去挑哪个条件对我现在而言是最重要的,记清楚了。

好诶诶这个信息分析有他的问题哦,信息分析有他的问题啊,为什么会有他的问题啊,我给大家举个例子,班上有45位同学,但这个45的同学,每个同学都会有一个学号,一号2号三号,一直到45号。

老师今天说哎呀我想研究一下,我想研究一下这个呃,这些同学到底成绩好还是不好啊,有没有办法呀,你说老师老师我知道用决策树呗,然后决策树的话,老师说,那那就把他的这些所有的因素都拿出来吧。

每天花多长时间学习,对吧啊,父母亲是什么样的学历状况,OK然后平时的这个听讲的这个程度等等,都拿进来诶,他不小心拿了一个另外一个东西进来,叫做学号,他把学号拿进来了。

哎大家想一想学号有多少种不同的取值啊,学号有多少种不同的取值啊,45种对吧,我分45个叉,我分到45个桶里头,每个桶里头有多少个同学,每个桶里面有多少个同学,你告诉我,每个桶里面一个同学对吧。

分45个差,每个每个桶里面一个同学,一个同学,我还不好判断它好不好吗,我直接告诉你答案了,我直接告诉你说,43号同学是一个超级牛逼的一个学霸啊,2号同学是一个学渣,唉,但拜托啊,这个东西有用吗。

你新来一个同学,他的学号是46诶,46往哪走啊,他没有用吧,所以这是这是T3的问题,T3的问题就是说它它对于这种有特别多取值,特别的取值的这种属性有特别强的偏好,因为你想一想,分叉分的越多。

他是不是越开心,每个桶里面的数量越少吧,因为少他有可能越肯定嘛,所以他特别喜欢去挑这种数目非常非常多,分叉非常非常多的这种属性,这是他的一个问题,T3刚才用信息增益就有这个问题,所以怎么办呢。

他思考了一下,他说这个根本原因,说这个时候有好多分叉的,有好多分叉的,所以有好多分叉,那有好多分叉,带来的这个信息增益的绝对值很大,绝对值很大,绝对值很大,我们说的绝对值是不可靠的对吧。

就是我们我们昨天给大家讲到课里头,我说我用线性回归加阈值,我们阈值定不下来的,所以我一直定不下来的时候,我怎么办呢,绝对绝对值没有用的时候用相对值呗,所以他这个地方给了一个分母,他给了一个分母,诶。

你刚才哪个桶里面一个同学啊,你45个学号,45个桶里头,每个桶里头一个同学啊,哎我问你哦,这个分母是什么,大家告诉大家,现在告诉我这个分母是什么啊,这个这个不是绝对值啊,再说一遍,这不是铜里面的数量。

你们告诉我你们现在看的这个IVA,你们告诉我这个东西是什么,我们记得那个公式吗,负的sigma啊,p log p这个东西叫什么,这个是什么的信息商,这个是不是我刚才这个属性的信息熵啊,是不是我这个属性。

我基于这个属性去看它的分散程度,它的一个伤啊,哎你告诉我刚才分45个分支,这个值有多大,哎45种颜色啊,进去都一模一样啊,我进去伸手进去摸球,它的概率它的不确定度有多高啊,高的很,你别看你的分子大啊。

你别告诉我说你别告诉我说你的分子大没有用,我的分母也大,我的分母也大,所以这是叫做信息增益,听明白了吗,信息增益加了一个分母,这个分母呢会随着你的分差不多啊,我直观的这样说啊,这个表述是不精准的。

但但但对大家的理解可能是有帮助的,就是它分叉多的情况下,它的分母也多,把分母也大,但分母也大,有问题吗,所以这个地方的gun ratio这个信息增益率,他加了一个分母,他说不好意思,你啊。

取那个信息增益大的不够,我得看一看,原来这个属性有多分散,原来这个属性有多分散,OK所以记住啊,这个地方是第二种决策树的模型叫做C4。5,C4。5和D3很像,差别就在于说他选了信息增益率。

他选了信息增益率去作为我的一个判定的,作为我一个特征,我的属性选择的一个判定标准,属性选择的一个判定标准好,我希望我给大家说清楚了,所以到目前为止,我们学了两种不同的角色数,一种叫做D3,一组叫做C4。

5,他们都会往下涨,涨到什么时候体验对这个条件吗,123,那怎么涨去挑最重要的属性,怎么去挑最重要的属性。

信息增益,信息增益率好往下走,这是唯一的思路吗,当然不是,这个地方有另外一个有另外一个数学的指标,叫做DEMIDEX,基因系数,基尼指数这个东西又来数学公式了,看着就烦对吧,没关系。

我给大家解释一下这个是怎么得到的,诶我还问大家啊,这个地方这个地方有小球啊,有两种颜色的小球,黑和白的小球,黑白啊,黑和白色小球诶,我怎么去判断它的纯度怎么样啊。

就是因为有个袋袋里头有有黑色和白色两种球,然后伸手进去摸对吧啊,伸那个伸手不见五指啊,然后你看不到,所以你进你进去,你进去去去摸,你定义序幕,哎,这个时候我除掉我刚才说的方式,去衡量它的纯度。

我有没有其他的方式,所以这DINDEX从你他做了一件这样的事情,大家仔细听啊,他做了一件这样的事情,他伸手进去,摸了一个球,他伸手进去摸了一个球,他又伸手进去摸了一个球,他他在小本本上记下来了。

他摸了第一个球,大家听清楚了,他摸了第一个球,他在小本本上记录一下,说OK这是第一种颜色,他摸到第二个球,他把他放回去了,他把他放回去了,他又摸到第二个球,他摸出来以后,他又记录一下这个颜色叫做C2诶。

我问大家那个纯度高的时候,摸到我摸出来的这两个球,颜色一致的概率是不是会很高啊,如果全是黑色的球,我连摸两次,我摸这个球是不是都是黑色啊,有问题吗,什么时候我摸出来的球。

它的颜色不一致的可能性会比较高啊,哎是不是说我这里头两种颜色都一样,那我去约的时候都是1/2的,可能是不是这个时候不一致的概率就高了,有问题吗,好没问题好,所以我们再来看看公式。

告诉我告诉我取到DK类的概率是多少,取到第K类的概率是多少,是不是pk,我摸一个球的概率是不是pk嗯,我再去摸第二次概率是多少,是不是还是pk,我是不是用一减去摸到所有摸出来的两次。

都是黑球和摸出来的两次都是白球的概率啊,这个公式看懂了吗,这个公式我这么讲,看懂了吗,是不是相当于我摸两次全是黑球,可以摸两次全是白球的概率,我要把它剪掉,我要用一减掉,它是不是要用一减掉。

西格玛所有的不同的类别,以及两次摸出来的都是这个类别的概率,那两次摸出来的就是不一样的,对不对,好没问题好,很聪明啊,大家都很聪明,所以你们理解了,说哎这个东西好像也能衡量它的不,它的这个纯度对不对。

好像也是可以去衡量它是纯度的啊,他的这个不纯度的sorry,他的不纯度的OK好,所以我是不是要去找到不纯度最小的属性啊,我是不是需要去找到使得划分以后,所以你看数学这个东西很神奇对吧。

他换了一个角度去解释这个问题,他换了一个角度去解释这个问题,但是你发现它依旧是合理的,你想这个事情你说太合理了,这个事情对吧,我连摸球都有这么多种这么多种不同的玩法,好接着往下走。

这个地方诞生的这个算法叫做cards cut,是一种二叉树,听清楚啊,cut和D3和C4。5的C4。5的差别在于,它是一个二叉树,它是二叉树,然后这个二叉树它用于选择属性。

选择现代划分属性的方法叫做他的不是方法,它的评估的指标叫做GUIDEX,看你翻译啊,这个东西是偶然吗,他是偶然吗,他不是偶然,数学真的是一个很神奇的东西哦。

所以如果大家来看一下负的PROGP,p log p啊,所以这个地方的负log p4p log p4的log p,它可以做一个什么,泰勒展开它的菜单展开约等于一减X,把高阶无穷小忽略掉。

把高阶无穷小忽略掉,它只只保留一阶的,所以这个时候约等于一减X,这个公式我不想多说啊,泰勒展开,我真的不想多说,他要展开也不想多说,那个有有同学没有看前面的数学课的吗,为什么要补那个数学课。

就是因为在后面的部分,我会涉及到一些数学知识点,但我并不想把这个课讲成一个数学课,所以大家最好有一点点的数学基础,包括微积分,包括这个地方的啊,后面的一些矩阵相关的一些知识。

所以这个地方就用到了一个数学的知识,叫做泰勒展开,叫做泰勒展开,所以如果你作为一个泰勒展开,你发现什么这俩货其实是一模一样的,你你不要以为是什么,DINDEX和和,现在这个我的这个信息商去去做这个呃。

是这个这个取法要求的这个取法是一致的,它是一种偶然,它不是偶然,它在数学上证明,这两个东西就是约等于基本上就是一致的,所以这个东西你用泰勒一展开,它的展开就变成这个,我再给大家写一下这个东西。

K等于一到大K它相当于pk对不对,减去pk的平方,对不对,好这个东西大家告诉我,K等于一取到小,K等于一取到大k pk这个东西等于什么,这个东西等于什么,这个东西等于什么,大家告诉我,对这个东西等于一。

所以发现了吗,这俩玩意儿长得就是一模一样的,我用它要展开以后,发现他就是约的鱼的,发现了吗,这个东西是什么啊,这个东西是什么,这个东西是不是give me dex啊,这个东西是什么啊。

这个东西是不是信息熵啊,你在数学上证明了这俩玩意儿,这两个玩意儿,其实就是一样的对吧,他们两个趋势完全一样吧,对不对,好吧好吧,所以截止目前为止了解了三种不同的决策树,叫做D3C4。5和cut。

然后你发现说这三货,这仨货好像用于最优属性划分的时候,评估的准则是不一样的,但是都好合理啊,然后你在数学上找到了一个方式,就把它们统一起来,你说就是这样的,这个东西本来就是趋势就是一样的好呃。

学过逻辑回归对吧,学过逻辑回归对吧,好我就回归输出的是一个概率P对不对,好P是一个0~1之间的一个一个概率对吧,所以我们告诉大家说,我用一个mod可以把这个东西叫变变成这样。

我用SIGMMD可以把概率变成这样,哎那你讲一下决策树是什么呀,对呀类比一下决策树是这样的哦,决策树可不像你那么平滑,角色数据是个跳票哦,今天是一个小叔叔来找我,今天这是一个小叔叔去找我相亲。

我就不去哦,所以我就直接跳成零哦,如果今天是一个这个这个什么样的人找我去,我有可能就会去哦,高富帅哦,我就是一哦,所以这个地方呢它就是一个跳变啊,这是一个平滑的方式,我给大家对比一下。

因为我们刚学过逻辑回归,你学了这个模型,所以我就用它做对比啊。

这是从二分类的视角去看一下cart呃,有有有有同学是学那个电子或者通信出身的吗,有同学是学电子或者通信出身的吗,那这个地方呢针对于我们的这个问题,你你有其他的一些解释。

比如说它是可以从信息论的角度来来解释的,所以这个地方呢啊这个没关系啊,这个只是我给大家拓展一下知识,我给大家拓展一下知识,所以那个你的你的信源经过一个发射器,发射信号以后,经过信道接收器以后去做解码啊。

达到限速,OK所以这个地方如果大家去看你的X你的特征,你的标签实际上对应的它会有对应啊。

所以大家可以看后面它,它实际上是有一些对应的啊,这个是一个拓展,没有关系,这个部分呢不影响大家理解这个模型,只是我为了让大家对这个理解,对这个模型的理解更加的透彻,所以我做了一个类比这个东西啊。

我会给大家,我会给大家完全展开来说,等到大家积累了一些知识之后,你回来看,你会发现这个地方说的东西是有道理的,你发现所有的这些知识他都是有关联的,它都是可以类比的,它很像。

OK总结一下总结一下总结一下啊。

那个我学了三种不同的决策树,我我再强调一遍,决策树的核心是,第一这棵树长什么样,大家已经知道了啊,就是它是一个这种规则式的往下生长,然后去拿到结果的这样的模型,第二这棵树什么时候停,记清楚了什么时候停。

有三种不同的条件,一定得记清楚什么时候停,第三你这棵树生长的过程当中,每个时间点我最关注的东西到底是什么,我最关注的当前最关注的属性到底是什么,就是这样一个东西,它的不同诞生了三种不同的决策树。

应该说那个有其他的区别啊,但是这是最大的区别,这是最大的区别,所以我们有了D3,我们有了C4。5,我们有了cut,我们希望通过信息增益这样的方式去衡量,什么样的东西能让它变得更纯。

能让我现在的肯定度更高啊,所以我选择了信息增益,得到了T3,我选择信息增益,我得到了B3,我选择了信息分辨率,我得到C4。5,我选择了这个地方的GMMDEX,我得到了cut。

OK相信大家都有一些概念了对吧,好很好啊,然后我再讲一遍,我再讲一个问题,然后我们休息几分钟,我再给大家讲后面的部分好吧,有同学刚才提到的一个点说,老师老师你你你这没讲清楚啊,你这个地方没讲清楚啊。

那个那个你这个地方谁告诉你,说一定是离散的属性啊,哎今天如果有一个有一个字段,它是一个比如说销量这个东西是不是连续值啊,连续值你怎么去分叉呀,哎连续值怎么去分叉呀,你没讲诶,对我没讲。

所以我现在要给大家讲啊,这个事情是这样的,那个要去相亲对吧,来了一群小哥哥,好小哥哥里头有一个有个字叫做啊,很可怕AJ哦,哎A级可能有些同学说哎,有些同学说老师老师你这个A级这个东西哎。

其实东西很好办的,年龄人最小是一岁,最大是那个100,所以我就假定是这样啊,可能100多岁吧,那相亲不可能有100岁啊,那相亲就更小,更更更约束一下,我们约束到那个呃,比如说22岁吧,我们约束一下。

22岁到到这个这个60岁好不好,22岁到60岁啊,所以在这样的一个区间内,那他那你告诉我说吧,邵师二十二十二岁到60岁,不就这么几个曲师吗,你每个取值当一个分叉不就好了吗,可是可以。

但是我总觉得有点怪怪的啊,其实我们实际在做决策的时候,好像不是因为一个岁数而去对吧,我是因为一段岁数,他好像是在这个小哥哥是在24岁到这个呃,比如说28岁之间诶,我觉得挺好的,OK啊。

或者说24岁到30岁之间,我觉得挺好的,那可能大于30岁,我觉得说哦不OK了,所以好像不是单个的年龄吧,好像是一个对吧,这个就尴尬了,所以怎么办呢啊大家听清楚怎么办啊,年龄是一个字段。

首先啊听清楚年龄是一个属性,是一个字段啊,先明确一下啊,年龄是一个属性,一个字段好,先明确这样一个东西,哎我把所有小哥哥找过来,我把所有小哥哥找过来,我把所有小哥哥从年龄从小到大排列。

OK这是一号小哥哥,他年龄只有21岁,就是2号小哥哥,他的年龄有这个23岁啊,这是3号小哥哥和4号小哥哥,5号小哥哥,他们年龄分别是20,都是26岁,OK我在这上面呢,就我就把这个年龄列到一条数轴上。

然后怎么办呢,哎,呃你只能处理离散值对吧,你刚才告诉我说你只能处理离散值对吧,OK那我就我就用同样的方式来处理一下了,所以我在21~23之间取一个值好不好,我在这里取一个值,我我另一个另一个栏杆在这。

我在这个地方再取一个值,我在这里取个值,我在另一个栏杆,我在另一方再取一个值,我再立一个栏杆好,每两个点之间我们取一个值,我去另一个另一个这个泥巴,另一个这个柱子立在这,然后我怎么办呢,哎可以这样哦。

这个时候小于啊,比如说这个地方是22,小于22,是一个分支,大于22,是一个分支哦,哎所以这个地方有一个字段,叫做是否小于22,这个时候是不是一个类别的属性,大家告诉我是否小于22。

是不是一个类别的属性,告诉我是否小于22,是不是一个类别性的属性,哎他就两个结果哎,要不就小压杀,要不就大压杀了,是不是一个类别性,是不是一个离散的属性,哎这个这个是不是小于24或者小于25。

是一个分支,大于25是一个分支,别着急啊,我在讲着呢,怎么去分段,我在讲啊,OK我刚才给大家强调了一个问题,我说我说age它是一个属性,听清楚啊,age是一个属性,但是我这个处理把拉成了很多个属性。

听清楚啊,第一个属性叫做是否小于22,第二个属性叫做是否小于25,第三个24啊,是是否小小于24啊,第三个属性叫做是否小于,比如说啊27,所以我把年龄由一个连续值的属性,分拆成了若干个二值属性。

有问题吗,这个分之二值属性的值我怎么得到的,我是不是任取两个连续值的点在中间,在这个数轴的中间去取到一个东西,所以请大家把你现在的想法变一变,你不是拿着年龄这样一个属性去做选择啦。

你是拿了一堆和年龄相关的,这样的离散的属性去做选择啦,所以这个时候是不是变成我要从这个属性,这个属性,这个属性当中去挑出来最可靠的属性啊,是不是回到了刚才那个问题啊,告诉我你们听懂了吗,我说明白了吗。

我把一个连续值的年龄变成了很多个零散的,零散的这样的二分的属性,二只属性,然后我对这一堆的二只属性用同样的方式去选,我把每一个都当做不同的属性去做选择,明白了吗,好呃还有个问题啊。

我知道我知道有些同学没问题,说老师老师哎,你刚才还说24岁到28岁呢,你这个地方只能小于28,大于28,哪来的24~28呀,哪还当是死的是吧,诶你这棵树要长着,你这棵树现在长了左分支。

你说是小于28岁的,小于28岁的,你确定他后面不会再长出来一个分支,是大于啊那个24岁吗,你确定他不会再长出来一个分支,是大于24岁吗,这就是年龄段就出现了,听明白我的意思了吗。

这些属性是可以重复被选择的,他在下一轮的时候,他还是会扫描这些属性,所以这个年龄段是怎么来的,年龄段是这样来的,你先判断来说小于28这个最有用,然后到小于28以后,你又扫了一遍,发现说乐趣大于24岁。

这个东西也有用,所以你就把它长出来了,所以这条分支就变成了小于大于24,小于28,听明白了吗,你要的段就出现了,所以我说明白了吗,好诶有个问题啊,同学有同学说,老师老师我听明白了,我听明白了。

但是那个呃那个那个感觉计算量好大呀,感觉计算量好大呀,哎但是那个你知道这些属性之间的选择,它是不相关的吧,我可以并行去做计算的吧,所以明白我的意思了吗,唉我干嘛要去等另外一个算完,我再算呢。

我另外有16个和我同时跑着呗,OK好,所以所以大概这么个意思啊,我我我就说到这儿,然后那个咱们休息5分钟,我们休息5分钟,一会回来,我给大家讲后面的部分,好吧好,呃我来回答几个问题啊,大家听好了。

大家大家先不要先不要刷屏,挺好,我给大家解释一下问题,第一位同学问到说,是不是只有在做决策树回归的时候,才会将连续值这样做,不是你今天去不去相亲,你就不看年龄了吗,年龄就是一个连续值。

做分类的时候一样要用数值型的属性好,我们就问第二个问题,刚才有同学说老师老师你没有讲怎么去掉,确定这个分界啊,哎22~60是不是要取38个属性啊,NO不是听懂听清楚啊,我一开始就给大家说,我列一条数轴。

为什么要列数轴,我要去看一看我有哪些取值,如果今天你的数据集当中只有22岁,23,26岁和60岁三种取值,我we啊,或者说可以更多一点啊,就是不是每隔一岁都有取值的话,为什么要取这38个属性啊。

所以他正确的做法是什么样的,我给大家说一遍啊,我放慢语速说一遍,我希望大家能听明白,我把我整个数据集取过来,我拉了一条数轴,我把我整个数据集上出现过的年龄,从小到大排在这条数轴上。

所以我把我出现过的年龄从小到大排到数轴上,我在任意两个相邻的年龄之间取得它的均值,去作为向它的中间这个均值去作为它的分界点,听明白了吗,大家对于分段对于这个地方的切分的阈值,切分的这个值还有疑问吗。

不一定是38个候选点啊,因为你22岁到60岁之间,并不一定每个年龄都会有取值,所以我拉了一条数轴,把有年龄的值标在上面,在任意的两个连续的对中间,取它的均值作为切分点,还有问题吗,这是分界值的取法。

说明白吗,好嗯其他的问题回头再说。

我们先往下走好了,大家心心念念的回归出来了,呃,决策树这么这么牛逼的模型只能做分类,整个分类太可惜了吧,那不如用它来做一下回归了,所以回归怎么做呢,回归是这样的,呃,这个地方有个例子,在这个例子当中呢。

我要根据一个运动员的从业年限和表现,去问一下这货值多少钱对吧,你知道很多球员踢俱乐部,那他比如说转会或者什么样,他值多少钱,你肯定要根据他的这个呃这个年龄啊,或者是他的这个表现状况啊,去判断一下。

比如说那个C罗啊,大家看他年龄其实已经超过了,大家一般情况下认为最佳的这个年龄了对吧,T嗯最佳的这个踢球踢足球的这个年龄了,但是他表现依旧很好对吧,所以这个时候呢。

我假设我要通过那个从业年限和表现两个维度,去预估他的工资的高低,我把它列到这个上面,然后在这个上面呢大家可以看到有两种不同,有不同的颜色啊,这个地方的那个深色表示说这个地方的深色。

表示说这个这个地方的深色,或者说暖色调表示说很高的收入,冷色调表示说很低的收入,所以大家看到的是诶从业年限比较低,同时表现也不太好的钱就很少啊,从业年限不错,然后表现很好的这些啊。

这些暖色调他实际上他的工资就很高对吧,就是红色和黄色就表示高收入啊,然后蓝色和绿色就表示低收入啊。

这样哎先别管它怎么来的,大家先别管它怎么来的嗯,我们假设有这样的一棵树,这棵树是这样的年龄,从业的年限小于45,四点5年的时候,小于四点5年的时候,全都预估成5。11,大于45年呢,我要再做个判断。

判断一下他的表现,如果他的某一个积分小于117。5,我认为他的工资应该是这样的,如果他的年龄,他的他的表现或他积分是大于117。5,我认为是这样的,决策树最妙的地方就在于说,如果大家去看一看。

这个地方的这样的一个卷回归数,你仔细去看一下这样的一颗回归数,你会发现它实际上是在做什么样的事情啊,它实际上是不是在做这样的事情啊,去把整个平面切分成了三个区域,大家看一下三个region。

这是第一个region,这是第二个region,这是第三个region,告诉我你们看得明白这个东西吗,是不是年限小于4。5的都在这一侧有问题吗,数值大于4。5,要看分,看表现,表现好的在这表现不好的。

在这,告诉我有问题吗,所以大家记住一件事情,大家记住一件事情呃,决策树这种模型啊,它有它自己很独特的地方,还有他自己很独特的地方,这种很独特的地方就在于说,如果说如果说逻辑回归是产出一条决策边界。

去完成分类,回决策树做什么,不管是回归数还是分类数啊,听清楚,不管是回归数还是分类数,就是你拿起一把刀垂直于坐标轴去砍一刀,再垂直于坐标轴再砍一刀,把整个空间砍成一堆的小矩形,能理解我说的意思吗。

回想一下刚才小于30岁和大于30岁,是不是在年龄这个字段上,拿起那把刀,沿着30那个轴砍下去的那一刀,明白我说的意思吗,所以决策树是一种很妙的模型,他做的事情是他不断的对这个空间去做细分。

他拿起那把刀垂直于坐标轴砍这么一刀,觉得不够砍的再去补一刀,垂直于另外一个坐标轴,或者再垂直于某个坐标轴再砍一刀好,你先知道这个东西如何去做预估,以及它的物理含义是什么,我们再往下看。

有人就会说老师老师我知道这个东西长这样了,告诉我吧,怎么长,告诉我这个这棵树怎么长出来的吧。

OK好呃,这是一个回归类的问题,所以回归类的问题呢,预测结果一定是一个连续值,特征向量是这样的,我有很多个维度,X1这个维度X2这个维度X3,这个维度一直到XP这样一个维度对吧。

所以回归数的两个步骤是什么呢,回归数的两个步骤是说,我把整个空间切成这个没有重叠的区域,我拿起那把刀咔咔咔一顿砍,就只能垂直于坐标轴砍,不能斜着砍,呃,我们认为这个地方的决策树啊。

我们常常讲到的决策树是不可以斜着砍的,它一定是垂直于坐标轴一刀一刀的砍,所以改完了以后会生成N个区域。

哎你说N个区域里头会有不同的取值对吧,哎这个区域里面有不好的取值呢,我我怎么去做预估啊,我问大家,我问大家,我问大家一个很有意思的问题啊,就是哎我现在我现在有ABCDEFG,巴拉巴拉巴拉这样一堆的数。

我我要去找到一个数,这个数据和这一堆数的啊,这个均方误差这样的和是最小的,我取我取多少啊,哎你学过不等式吗,我要去找到一个X让X减A的平方,再加上X减B的平方,再加上X减C的平方。

再加上布拉布拉布拉一直往下加,哎我希望这个东西最小我取多少,哎学过均值不等式吗,什么时候去,什么时候取到,什么时候取到最小值,唉说志新的这个同学不错,啊有同学问到说为什么只能垂直于坐标轴哎。

Come on,小于4。5和大于等于4。5,是不是小于4。5,是不是这个这个平面的这一侧呀,大于等于4。5,是不是右边这一侧呀,你怎么斜着砍呢,哎那个刚才那位同学听明白了吗,这垂直于坐标轴是你小于4。

5和,大于等于4。5,是不是只能是垂直的呀,你还能斜着,你还能斜着跑,呃我不知道那个同学有没有听到过这个解释啊,所以那个那个尾号是什么384的同学啊,OK那我就假定你听到了啊,OK好。

然后刚才我问了个问题啊,那个问的问题有同学答出来,答出来了啊,说老师老师,我知道高中所有的不等式,都告诉我们一件事情啊,如果今天这道选择题做不出来。

我就猜答案,不等式的题目,我一定猜他们的均值对了,这个时候呢为了让我和所有的样本点,我的y predict和我的Y啊之间的这个差距最小,我在每个区域里头取什么,我在每个区域里头就取所有预估值的均值。

我就去取所有预估值的均值,哎但是这个东西还是没有告诉我怎么长啊,老师你你你你这个我等了半天,你告诉我怎么找你,告诉我说我划分成这个区域以后,我怎么去,我怎么去给这个预估的结果值,你长在哪儿呢。

别着急别着急,先再想一个问题,这个地方有一个东西叫RSS,这个东西衡量了我预估的结果的一个好坏,告诉我能看看明白吗,第一层CDMA是什么意思,我要遍历整个这个空间,我要遍历整个这个块儿,明白吗。

我要去遍历整个这个块,每个块里头我去求它的误差,是不是这样去计算呢,啊这个公式大家能看明白吗,能看明白,这个东西求出来的是一个总体的误差吗,左边那个sigma是对每一个你划分,你用刀砍出来的小块。

右边那个西格玛是每个小块当中的误差加一起,是不是所有的误差全体的误差有问题吗,我是不是我的回归我的回归我的问题,我想让它尽量的小,我是不是要让这个地方的RS尽量的小。

我是不是要让这个地方的rs尽量的小啊,怎么做怎么做。

马上来了,首先这是一种自顶向下的贪婪式的递归方案,听清楚啊,就是这个问题是没有,你是没有办法用穷尽的方式去拿到最优解的,对,你是没有办法通过穷尽的方式去拿到最优解的,你肯定做不了啊。

这个因为它是它的切分方式,是无穷无尽种的,无穷无无尽种,所以这个时候呢,我们只能用一些启发式的方式去做,所以启发式的方式,这个实际上启发式的方式是一个自顶向下的,贪婪式的递归方案。

所谓的自顶向上是什么意思,自顶向下什么意思呢,是说我从当前的位置开始往那一刀砍下去,只能把已经有的这个区域已经生成出来的区域,再砍成两个区域,听清楚我意思了吗,就是今天如果有这样一个方块。

你第一刀砍了这么一刀,不好意思,第二刀你只能在这个区域,或者这个区域去砍刀了,当然你可以这样砍,也可以这样砍啊,这是随意,你也可以砍在这啊,你砍在哪是随你随意,但是你只能在我新的区域里头去砍。

你不能再回头了啊,你不能说我之前那刀砍的不算,我重新砍诶,这个没有重新砍的,就这样一回事,你砍下去了就砍下去了,你下一步你就是想着呃,你就想着你打这副扑克牌,你牌已经拿到手上了,你就不要想着去换牌了。

你就想着说我现在有这副牌,我怎么打好这副牌,明白了,所以这个就是自顶向下的意思,就是说你一刀砍下去了,你下一刀只能砍在,你只能砍在生成的那个新的小区域里头啊,你别再想把之前的刀再怎么磨掉。

或者怎么样做不了,然后贪婪的意思就是每一次划分,我只我只考虑当前最优,我只考虑当前作用啊,这个没有没有太大意义啊,我只是告诉大家是这样做的,最关键的点在哪,最关键的点在哪,在这个位置,这是最关键的点啊。

这是最关键的点,对有同学提到动态规划,因为这是一个NP问题啊,你你没有办法,你没有办法穷尽了,所以它确实是启发式的方式,诶我问大家一个问题啊,我现在有这样一个区域,我这个区域呢这条轴上有一些取值。

就是我连续值嘛,但跟刚才一样连续值嘛,我画一下树桩,连续值,我画一些树桩,OK那个我有我有多少种不同的砍刀方式啊,这个大家谁告诉我说,如果我选定这个地方这条轴,如果我选定这条轴。

我现在有多少种不同的砍刀方式啊,诶我是不是我是不是可以卡在这,我是不是可以砍在砍在砍在这都可以砍的,啊甚至你在左右也可以砍对吧,哎左右其实没有意义了,因为你砍下去都没有样本了啊,所以左右我先把它忽略掉。

是不是中间每个位置都可以砍呢,哎所以你以为这个算法,你以为这个算法很牛逼吗,这个算法就是一个很常规的算法,它就是把这个地方每一个分裂点,哪一个切分点啊,看清楚啊,这个地方能切的所有的都能落下去的。

所有点啊,每个点都去算一个rs,每个点都去算一个,每个点切下去了之后,他都去算一个rs,这个东西,算的是切出来的左区区域或者是上区域,这个切出来的右区域或者下区域有问题吗,想象一下吧。

拿着刀砍下去了以后不就变成两块了吗,它的误差不是左右两块的误差之和吗,有问题吗,就砍你,你砍下一刀不是左右或者上下吗,不是两块之合吗,现在这个地方的sigma不就是对左对两不同。

对这个砍刀这一刀落下去的两块分别去求吗,没问题吧。

好那我再解释一下什么叫做我,什么叫做递归的砍刀哦,递归的这个这个这个砍这些刀哦,递归的意思是什么,递归的意思是像这样的,这是二分的递归的方式,这个不是递归啊,这个你看不出来啊,这你看不出来。

你不要把一个砍哦,对你不能歪着砍了,所以你只能说唉我砍这一刀,然后我下一次怎么办,下次砍这一刀,我再下次怎么办,我砍这一刀,我再下次怎么办,砍这一刀,这个叫做这个叫做二分的递归切分。

OK那个有同学问到这个问题,说老师,老师这个地方是针对一个特征进行切分的,对吧对,是针对一个特征,我刚才已经告诉大家说,如果我就针对水平的那一位做切分,听清楚啊,我就针对我水平的那一位去做切分。

所以大家看到这个地方确实是,就是他的这个方式很粗暴,听清楚啊,他还会把所有水平上能切分的点全都试一遍,再把数值垂直的这个方向上能切分的,所有的点全试一遍,全试一遍,听清楚了,全是一遍。

Y的值怎么去确定呢,我刚才刚说完的,我说给定理一个区域,这个区域里头的Y怎么去预测啊,我说这个区域里头有一堆的数,ABCDEFG巴拉巴拉巴拉,这个区域里头有一堆不同的数,我怎么去预估一个值。

你所有这些数的平方和最小啊,对吧,我说的是均值,对不对,所以你告诉我,你把所有能砍刀的方式全都试一遍,你是不是可以挑出来那个最好的砍刀的方式了,而且最小的那个方式有问题吗,我这么说,大家有问题吗。

啊有同学说老师老师这个计算量好大的呃,你从人的角度上来说,这个计算量当然很大了,但对计算机而言还好啊,就是计算机而言还好,同时又考虑到这个地方的问题,实际上是可以并行的对。

所以大家先不要纠结这样的问题啊,就是不要去纠结这样的问题,你以为你以为逻辑回归计算量就不大了吗,你输入的维度高的时候,逻辑回归一样,计算量很大,所以那个计算量呢它主要是这个算法,他也没有。

他没有太多可以去做,更非常非常非常牛逼的优化的这样的操作,所以它总是会有一些计算量的,你为了去找到这个比较优的这个结果,还是要付出一些代价。

OK好诶,这个地方还有一个问题,就是有同学提到说老师老师诶,你你这个你你这个数一直往下长就完蛋了,那那那我,我今天我想去预估班上的每个同学的得分,我想去预测预估每个同学的得分,我诶那我岂不是可以。

每每一个,我最后这个数可以生长在每个同学,都在我的叶子节点上对吧,这有什么意义啊,每个同学都在我的叶子节点上,这个有什么意义啊,这里有什么意义啊,所以他可能会过你喝啊。

一会儿我们再说混拟合怎么去处理,我先回到刚才这个问题,有同学问了一个很好的问题,说老师你每切一次,都要对全部的样本去计算一次对吗,诶我问大家一个问题啊,你诶你在这样的情况下,你想一想啊。

你已经切了这一刀,你下次切这一刀唯一变化的是不是这个区域啊,是不是说只需要去管一管这个区域,原来的rs是多少,现在切完这一刀以后,新的rs是多少,RS1S二S二是多少,我是不是算一下这个东西的一个增量。

就可以了呀,我感觉这个地方也是,我只需要算左边这个区域的增量就可以了,我需要把全部都算一遍吗,我这么说能明白我的意思吗,我只关心我砍的那个小区域,我没有砍到的地方,我不管它,它没有动。

所以我只关注我砍下去的那个小区那一刀,他有没有变小,变小了多少,有问题吗,不是不是全部算一遍了,他只他只算我,我砍那一刀的那个区域哦,OK好吧好。

所以我希望我说明白了呃,下一页图中间的那个图也是二分吗,中间这个图就是二分吗,中间这个图就叫做二分递归啊,不是二分啊,二分递归,所以什么叫做递归,递归的意思是我先砍这一刀,我再看这一刀。

我再去看这一刀和这一招,这叫做递归,就是不断的去把区域切成两个区域,这个叫做递归,这叫做递归,OK所以它是它是二分递归,没错。

OK我回到这个地方啊,我刚才说了一个很很可怕的一个问题,叫做过拟合,哎,这棵树可牛逼了,你知道你在这个区域里头有好多散的点对吧,有好多散的点,它都有取值,然后这棵树如果真的牛逼,他可以牛逼到什么程度。

我这些刀你反让我砍呗,我砍的足够多的刀的时候,诶,我今天可不可以把每个样本点,卡在一个小格子里啊,我把每个样本点都砍到一个小格子里对吧,我每个小格子里头就一个就一个样本。

好无比的取均值就是自己误差就是零,好开心的,分分钟就全拟合出来了,哎这有用吗,这有用吗,这有点可怕吧,每个样本都是在一个小格子里,这个对我新样本的预估有什么用啊,这就过拟合了,你就把答案记下来。

你就告诉他说这个是加分点,就在这个小格子里,它取值就是这个没用的,所以怎么办,别让他切这么多刀,谁让你一直切一直切的,所以我们之前在逻辑回归以后,我告诉大家说,我们控制过拟合用什么,我控制过拟合用什么。

用正则化,我们加一个正则化,像我们去惩罚他,我们说哎不能切哦,你这你你你不不是不能弃啊,不能用那个甩甩棍,那么厉害的方式去拟合样本点了,你再甩你再甩,我要我要跟你那个扣分了啊。

所以所以他就他就他就不敢甩对吧,好,这个地方也一样,这个地方我要加一个惩罚项,我加什么惩罚项呃,大家告诉我一个问题,我这棵树刀切的越多,我刀切的越多,是不是越积累越多,我刀切的越多。

我是不是叶子节点越多,我那一刀一刀砍下去,我刀切的越多,是不是叶子节点会越多,所以我把这个叶子节点的数量,以某一个超超参数夹到尾巴上,意思就是我想让rs尽量的小,但是你不能让这个地方尽量的把。

如果这个鬼东西,这个叶子节点太多了,不好意思啊,你这个东西不合格,你回去重做,你这个刀砍太多了,所以所以这个地方的损失,实际上这个地方的误差或者说损失,它实际上在这种情况下。

它在RSS的基础上加入了乘法项,这个乘法项是什么,对叶子节点的数量,乘以阿尔法,你可以学,你可以砍刀,要不要砍太多刀,看多了重做不合格,好,所以这个地方呢大家知道,知道一下它的形式就好了。

哎这里头可能会有一些你没有听过的名词啊,比如说交叉验证,这个我们在后面会给大家讲到,所以大家先不用先听一下就好了啊,不用着急,好那个回归数我就给大家讲到这好吧,所以回归数是一种启发式,它会一直生长。

刚才有同学说千分会穷尽X1和X2的组合吗,它不需要穷尽X1和X组合,它只需要穷尽所有X1的划分点,和所有X2的划分点啊,不是组合不需要组合啊,他每次只砍一刀,只能垂直于某一个坐标轴砍一刀。

所以它只尝试一条轴的所有情况,和另外一条轴的所有情况,但不是一个pair,不是一个组合。

下面介绍一个很牛逼的思想,叫做begin,然后这一页写了一大坨啊,我决定给他个tap,这一页,我今天给大家跳舞这一页。

为什么呢,因为我马上要告诉大家,什么是在我们的机器学习当中,什么是bg bi是一个缩写啊,BEI这个缩写叫做boots trap like rigating,Aggregating。

所以就用了一个叫做boost chapter的一个思想,他他长了这样一件事情,叫做人多力量大,然后呢,这个事情是这样的,如果你要去构建一个模型,这个模型可能是不太准的,OK啊抱歉,这个地方呢写笔误啊。

大家听到这个课的时候呢,你要知道这个地方是T啊,这个地方是T不是M,所以他想了一件这样的事情,诶诶刚才我很很很很害怕一个东西啊,很害怕那个东西叫做过拟合,所以过拟合产生的本质是什么。

过拟合产生的本质是会有一些noise,会有一些噪声点,这些噪声点你怎么你怎么着啊,噪声点你以为他是你,你买了一本课外练习题回来,你以为课外练习题所有答案都是对的,唉拜托他印刷错了,这道题错了。

但是你不知道你把它学下来了,下次你再考到这道题写错了,所以这就是过拟合学太贵了,你们太适合这本参考书了,拿出那本5年高考3年模拟,说我去我把它做完,分分钟上上清北复交,然后那本书里就提错了啊。

然后你就写错了,所以这个地方过敏和相机的原因,实际上很多时候是,因为我们这个地方会有很多的噪声,我们会有一些错误的题,我们有些答案错了的题,但是我不知道,我并不知道这个东西是错的,所以我就拼命的学我。

我我就拼命的学,然后你把你你也不管答案对不对,我觉得这个答案印刷是这样,他肯定是对的,我拼命的去记这个东西,我是按照他的思路去理解,错误的思路去理解,然后将来你去做高考的时候就就很可惜,对吧好。

所以怎么去防止这样一个问题呢,哎你要你要是没有看到这道错题,你不就不会学这道错题了吗,那你看不到这道错题说明什么,说明你要把这道错题,这个这个呃你你你你这一次就不要看到它,所以在这个时候呢。

我们有一个思想是这样的,我们总共会有1000道题,我们总共会有1000道题,我们在这1000道题的基础上,我们把它切成,我们每次从1000道题当中去抽取出来,其中的800道题,每次都取800道题。

当然每次800道题可能不一样啊,就是那个无放回的随机去抽抽800道题,我抽出来以后,我每次都在800道题上去学习出来一个模型,比如说用决策树去学习出来一个决策树的模型。

然后我再对最后的这个结果去做什么呢,如果它是分类问题,我去做投票,少数服从多数,如果他是一个回归问题呢,对回归问题我就求平均,啊大家理解了这个思想吗,begin就是从总的样本当中。

每次抽取出来一部分样本,从总的样本当中每次抽取出来一部分样本,去构建学习器,然后再把这些学习器拿过来去做投票,或者是求平均,因为我只抽800道题,我很可能看不到那道错的题哦。

所以我可能学不到这道错的题啊,所以很有可能会有一些学习期学的是不错的哦,所以比我一个人瞎学可能需要好的,所以这个叫做白点好。

所以这是bedroom对吧,好BGIN的话有另外一个非常牛逼的模型,叫做random forest,叫做随机森林,第二个随机森林啊,随机森林做什么样的事情呢,随机森林做什么事,是做什么样的事情呢。

随机森林是一种基于数模型改进的begin的版本,刚才我只对刚才我只对数据去做采样,听清楚了,我刚才只对我的1000道题当中去抽800道题,数据去做采样,现在在随机分明里面,每一个模型还需要对这个地方的。

还需要对这个地方的特征或者属性去做采样,就是原本可能会有时有有100列,我每次自己取出来,其中的70列,明白吗,就是有些列我也不用,我也不知道哪一列是不是都有用,所以我在构建每一个子模型的时候。

只取了一部分的样本,一部分的样本数据我也只取了一部分的特征,一部分的属性,听明白了吗,其他的东西和刚才的白点是一样的,我说清楚了吗,能理解这个地方的意思,写了一堆文字啊,就是我说的意思。

就是我只每个模型在构建的时候,我只取了其中的一部分样本,同时呢我也只取了其中的一部分特征,就是我没有所有的属性全取,我每次只能挡住一部分属性,我只当你从剩下的属性里头去选,我为了增加它的随机性。

不让它受噪声去干扰。

好,所以你们已经学会了最牛逼的random forest,这个模型,所以这个地方呢给大家看到这个,OK这就是单科决策树,单科决策树啊,单棵决策树在这个场景里面,大家看到单棵决策树很有可能会过拟合。

他会因为这个地方有两个小的样本点,会拉出来一个板,一个区块给他,也因为这个地方的两个样本点,两个样本点去拉出来,这个地方的一个区区块给他,但你看当你用五颗决策树,25棵决策树。

100棵决策树去构建随机森林的时候,它的边缘会变得非常的平滑,他不会那么容易受到noise噪声的干扰,他不会那么容易受到噪声的干扰,这个叫random forest,诶,我来回答几个问题。

有同学说老师呃,那个之前听说有人用了100多个模型去做集成,是这个方法吗,呃他集集成方法有很多种方法,有很多种方式,bin只是其中的一种,它还有一些其他的ending。

那些waiting那些呃stacking都有啊,这个我我后面会给大家讲,这个我后面会给大家讲,然后有同学问到说是有放回还是无放回的,对是有放回的,是有放回的,OK就是在对样本采样的时候是有放回的。

有同学说老师老师没有案例吗,我又没有说要下课着急吗,马上来了案例等我一下,对有些样本没有抽到,有些样本没有抽到,这个同学问到的问题是说到的问题是对的。

啊选择多少个,选择多少个学习器,诶我回答不了你哦,因为如果我能告诉你这个东西的话,诶你还调什么参数啊,你这个模型可牛逼了,你直接往上一怼,比其他模型效果都好,这是一个要调节的参数。

后面我会给大家讲到调参的方法好吧,所以我回答不了你这个问题,选多少个学习期,最好,也没有任何一个数学公式可以回答你这个问题,好吗啊,没有任何一个那个呃。

没有,没有任何任何一个数学公式可以回答这个问题,有同学问到说,老师begin或者集成方法在工业界有用吗,作用很大吗啊有用,但是作用的大小不确定啊,就是有些地方它会用模型去做集成,我们个人的经验是。

像神经网络这样的模型和数模型,数模型包括随机森林,包括一些树的串行模型,他们去做集成效果是很好的啊,这是BEGGIN对,对这样的数模型和神经网络,这样的计算模型去做一个融合,一般效果会很好,嗯嗯好。

我来讲一下案例,无非就是分类和回归呗。

走一遍咯,决策树完成分类的问题,把需要的工具库import进来好。

Import pas s p d,这个是一个数据处理和分析的工具库啊,我给大家,我给大家去那个列了这个说明,哎我发现大家好像很爱问这种参数的问题啊,因为有同学问了一个问题。

说随机森林里抽取的样本数和特征数,怎么定定不了,没有数学公式,这是超参数,有多少个学习器乘多少,样本乘多少,特征都是超参数,一般情况下,根据经验,根据各位我们的经验,取0。0。6到0。8之间的值。

应该会有比较好的结果,就百分比60%到80%,但具体取多少,你要做实验啊,这个经验值也不一定准,它只是一个经验值而已,提供给你参考啊,所以啊我看看是同样一位同学吗,啊不是同一个同学。

那个你问的这个问题没问题啊,说明你在思考,但是这种问题没有明确的数学公式解,这个意思啊,就是如果他有的话,我肯定会告诉大家对,所以这个就是要我们需要我们去调节的,这个参数或者叫超参数啊,这个意思好吧。

那我就继续说我这个案例咯,我这个案例里头所有的地方已经给大家写上了,写上了注释,所以那个我相信大家是能看得懂的,对吧啊,代码我下课再上传啊,我现在在讲课,那我不能停下我的课去给你上传一下代码。

你也不着急,几分钟啊,几分钟以后你就会看到这个案例好不好,先听我把它讲完好吗,不要着急,OK啊,所以把需要的工具库import进来,这个pandas适用于数据工具,适用于数据处理的工具库。

从sk learn cn里头去import一下PROPOSSESSION,我需要对数据做一些预处理,然后我去import一下决策树,决策树在处理里头,OK我用pandas去把数据读进来。

我这个地方有个decision tree点,CSV有一个这样的文件。

我可以用pandas这个工具库去读进来,这个工具非常牛逼,它读进来的数据就会变成行行列列的数据,所以大家看到的就是行行列列的数据,这是一个什么样的问题呢,这是一个很经典的问题。

这个问题的标签或者说你需要去完成的分类,是去判断一个美国的一个一个居民,他的收入是不是比50比5万美元要低,就是比5万美元要低还是要高,这是一个分类问题啊,就是yes or NO。

就是比5万美元到底是要低还是要高,然后我可以去基于这个地方的啊,参考的一些因素是什么呢,或者说基于你可以去做判断的一些因素,包括哪些呢,包括诶大家看到这个地方对,包括大家看到这个地方的这个呃。

第一个第一个这个列叫做world class啊,它到底是一个这个这个给国家干活的公务员呢,还是一个市里面的一个国家公务员,还是市公务员,还是这个私企的员工,还是等等等等这样的因素对吧。

所以大家看到这个地方有什么所谓的这个state,government对吧,有private等等等等啊,啊OK还有一些那个那个什么失业的人群,OK这些都有啊。

然后第二个叫做education education,大家想一想就知道啊,education就是教育程度对吧,所以这个地方呢包括这个呃学士FEATCHA,包括这个可能会有一些高中生毕业啊。

因为在美国其实干这种蓝领啊,这种活实际上也收入也还是可能还是不错的,所以这方面education包括说有学士,有这个硕士,可能会有一些这个高中生可能都会有啊,各种各样的。

然后第三列呢叫做他结婚的这个状态,可以是呃没有结婚啊,未婚过对,然后有这种已婚,也有这种已婚又离异的对吧,哎离婚的,OK然后下面这些东西啊,还有一些其他的因素就是relationship对吧啊。

是那个是是没有结婚的人,就是不在一个家庭当中,然后结了婚的人可能是一个哈曼,是一个丈夫或者是一个一个妻子,OK然后他的种族他是个白人还是黑人,还是黄种人对吧,然后他的性别是男性还是女性啊。

然后他的国家到底是古巴还是这个地方的美国,还是另外的某个国家,OK然后我来看一下这个地方有一些函数啊。

就是info函数就告诉我一些信息,所以他可以把这个地方所有的列告诉你,说它有多少行,它有3万2561行。

OK每一行都是一个类别型的一个变量,然后这个地方消耗了两兆多的内存啊。

就还是比较比较小的内存。

然后我的这个地方的成年人这个数据它的形状,它的形状表示它是多少多少行多少列,所以他有373万多行,3万2561行。

它有九列,OK然后我的列包括哪些列,包括world class education,一些结婚状态,巴拉巴拉巴拉巴拉一堆啊,到最后我我的特征是什么。

我的特征是不是前面这些东西,我的特征是不是前面这样一些东西,我特征是前面这样一些东西对吧,我的是我最后需要去判别的标签是什么,我判断标判别的标签是这个地方的income,是这个地方的收入。

所以我把这个地方写下来,我的特征是前面这么多列,我这个地方的标,我的标签我的Y是这一列。

然后我去把我要的特征和我要的label取出来,所以我根据我列的名字就取出来我要的特征,我再根据我列的名字取出来我要的标签。

然后我给大家看一下,这个时候呢对我就啊拿到了这样的特征。

这就是特征嘛对吧,车身就包括说诶他是哪个什么样的工作类型,什么样的教育程度啊,什么样的一个结婚状态啊。

哪个国家的等等,那他的VIVO呢它的标签呢标签就两种,要么就是小于50K,小于5万美金,然后要么就是大于5万美金,这样啊。

OK然后下面这个地方呢有一点小小的特征,工程特征处理这个大家不用管这个呢。

就是那个我们会在后面的特征工程部分,会给大家重点讲到,你要知道的东西,就是计算机,它很傻,计算机它傻到什么程度呢,你丢给他一个文本型或者字符串型的东西,他是读不懂的,你给他一个类别的东西。

你说我今天买了一件很好看的衣服,是件蓝色衣服,它对于蓝色这个东西是毫无概念的,所以怎么办呢,对你要用一个数字去表示,我给大家举个例子,你你今天星期几,星期几这个东西计算机是读不懂的。

星期几计算机是读不懂的,啊我知道有些同学,你们的基础比另外一些同学要好一点,但是不用着急好吧,就是那个大家也那个啊,各位陈独秀同学稍微收敛一下,不要先先不用不用就说,我给大家先简单解释一下啊。

因为这个这些知识,我们在后面讲到特征工程的时候,大家都会都会懂,所以那个大家嗯先听一下啊,听着我跟着我的节奏来来听一下,对是确实是读了向量编码,但是我要丢出来这样的东西,就有点有点内容太多了。

可能有些同学就会蒙,嗯其实我就想说一件事情,就是计算机呢对于这种类别性的东西,是读不懂的,所以你告诉他说今天星期一啊,今天星期天他毛线都不懂,那怎么办呢,他就想了个办法,他说不如我就把一天切成七天。

我就开七个位置在这,如果是星期一,我就是第一个位置取一,后面的位置全都取零啊,这几个数字了,1234567对吧,如果是第二天啊,如果是星期二,星期二我就变成零一,这样对吧,星期三星期三我就变成这样。

能明白这个意思吗,对这就是刚才啊这位同学说到的这位同独秀,陈独秀同学说到的这个独乐向量编码,OK好吧,然后独立向量编码,意思就是我把类别哎,又占一个位置的形式去告诉他,如果这个位置取一。

就说明是这样一类,如果这个位置取零,它就不是这样一类,所以这个地方有一个处理,叫做叫做这个特征工程的处理。

这样啊,所以这个地方呢,我们用get dis去拿到一个特征工程的处理啊,这个不用管这个,如果大家那个看不懂的话,你先看一眼,因为我们后面会给大家讲到。

好吧,后面我会给大家讲到,所以大概的意思就是说哎呀计算机太傻了。

他读不懂这些类别,他懂不懂这些类别。

所以那个请帮我把它转成一个数字的表达形式,我还能看懂,就这个意思啊。

你就可以认为这个地方做的,就是这样一个事情啊,就这样一个事情好。

所以下面我就开始构建模型了啊,这个事情真的是很简单。

所以构建这个模型呢,我就只需要去构建一个分类器啊,我这次我就不手写了啊,我昨天在把手写蒙蒙了一群同学,就是大家大家看蒙看蒙了一群同学,所以我就决定今天用一下工具库啊。

所以我就搞了一个decision处理的一个分类器啊,Decision to class file,然后告诉他说我要用商去作为我的信息熵,信息增益就作为我的评估的这个准则,然后我最大的数深深度啊。

我限制了一下最大的数深深度是四,然后我就拟合一下我的数据,拟合一下我的特征,拟合一下我的X和Y。

然后下面就拿到了一个分类器,诶,下面这个东西大家照着抄就好了。

这是一个可视化,这棵树是可以可视化的,老师可以告诉你说我为什么去做这样一个决定。

我沿着每个分支走,它会它会是哪个哪什么样的一个决定。

大家看到最底下这个class,大家见到最底下这个class这幅图当中啊,每个框框最底下的class就是它的类别。

那class就两种,小于等于50K对吧,大于50K对吧。

小于等于50K,大于等于大于50K,所以这就是一幅可视化可视化的一幅图。

就告诉大家这些决策树长出来的,决策树长什么样。

那个这个代码我不想给大家多说,这就是个模板,就是个模板,你就把你的那个分类期望有一怼就可以了,结果就出来了,唯一要改的是这个地方啊,就是你的分类的名字不一样吗,对啊,分类的名字。

我这个地方是小于5万美刀和大于5万美刀啊,就我写成这样,如果你现在的这个分类是说,比如说会不会买件衣服。

那就是买和不买嘛,OK所以这就是一个案例啊。

再看另外一个案例是一个随机森林,随机森林,然后这个案例呢反正也挺简单的对,所以随机森林那个那个我刚才给大家讲分类数,我没有说呃,我没有说怎么去控制过拟合是吧,分类数控制过拟合有一些方式啊,比如说减脂。

但是这样的工这样的那个方式呢,在工业界用的不多,工业界就会直接去做一些限制,比如说限制数的深度,对限制数的一些这个呃,每个叶子节点的一些样本数等等,他会做一些这样的限制,所以这个地方我们做一些限制。

因为不做限制,那棵树太大了,它可能会过拟合,所以我就限制了一下,说我允许你的最大的数升就是四,你要涨到四了还往下长,不好意思,不让你涨了,太平了,这个意思明白吧,所以这是一个超参数啊。

就数升是一个超三超参数,我自己手敲了一个超参数是四,它不一定是四啊,它可以是那个其他的一些结果,所以大家理解一下是个意思哈。

好然后这几个地方呢,我们我们在构建这个随机森林啊,去完成一个回归的问题,一个regression,所以随机森林完成回归呢,就是说我建了很多个数,然后我做了一个每棵树都做了一个预估。

我再把预估的结果只去求了个平均啊,就这个意思好了。

然后这个地方呢我就不解释这个工具库了啊,工具库无非就是import pandas,import一下数据的预处理,然后我从on sunday里头去import一下,随机森林的回归器啊。

Random forest regression,然后我用了一个自带的数据库,叫自带的数据集,叫做load boston,Load boston。

哎呦大家知道我现在解释一下啊。

树的深度是树的层次1234。

这是树的深度。

只能用到四个数字段吗,谁告诉你只能用到四个字段的。

这里头有多少个分支啊,这有多少个分支啊,哎你四层四层你就垂垂直往下长啊。

你的数不涨两个分支的,所以所以啊,大家大家大家去那个看一下这个东西。

就明白了啊,就是四层最多涨涨四层,好属性不止四个啊,因为我这里头每每一层都会展开两个分叉,每一层都会展开两个分叉啊,颜色大家不用管颜色,就是为了好看而已,你你可以你可以理解成暖色调和冷色调。

它做一些区分,但是这个地方其实在颜色的深浅,并没有大家想象的那个,你可以认为颜色越深,他越肯定你可以从某种程度上这样去理解啊,呃细节的细节的代码的部分,大家下去以后再问好吧。

那个我如果上课给你每个点都讲了,就会很碎,这个课你回头去听起来,所以我建议大家阅读代码的方式,是不是逐行的去阅读,而是我去了解每一个块在做什么样的事情,我再进到每个块里头,去了解它是怎么实现这个东西的。

而不是一行一行读,一行一行读,很容易蒙的,这个地方代码还短,代码长了你就蒙了,OK所以values是什么意思,values是把那个pandas,data frame当中的南派数组取出来,对啊这个意思。

然后如果我刚才说的话,里头有些名词你听不懂呃,没关系,因为后面我们还会再用到,所以慢慢你就懂了好。

然后加载数据很简单,加载数据加进来了,直接我就可以把贝把X取出来,把Y取帅啊,所以贝塔就是X。

他给的就是Y啊,贝塔就是X,他给的是Y,然后这个地方呢,反正就是一堆的这个房子信息呗。

我去做房子价格预估啊,我要搞告诉他说这个区域的一个犯罪率有多高,然后巴拉巴拉巴拉吧,然后这个这个地方的那个那个居民的这个,比如说啊居民的人均的这个呃人均的这个站,就是说自己住宅。

住宅的这个面积有多大啊对吧,然后啊这个地方会有一些其他的啊,不拉巴拉巴拉巴拉。

反正有一些信息,我用于这个这个地方的这个回归问题的解决,然后呢把数据读出来,大家看一下,这个就是一个一个的样本,这是一个样本,这是第二个样本,这是第三个样本,这是第四个样本啊,这是第四个样本的特征。

大家听清楚啊,第四个样本的特征。

我只取了我只取了五个样本。

我把五个样本的特征全都打给大家看啊,这是用科学计数法,然后我把所有的这些样本的标签。

达到的价格是多少万美刀,OK240000美刀还是21。6万美刀,还是34。7万美刀啊,还是说是一般有贵的50万美刀啊,这样然后所以这个东西就是Y这个东西就是X。

我就把X和Y送到这个地方的random forest。

regressive当中去学习,我先告诉他说我要取15棵树去做预估,我的NAUTHATTERS,就是我那个随机森林取的多少棵树,我要取15棵树去做学习,我用这15棵树的这样的regression。

去fate一下我的X和Y好,很简单,secular用起来很简单,secular是所有的secular,所有的监督学习的model全都是feat,这就表示拟合拟合一下XY他就开始学习了。

然后我们就可以拿到一个这样的回归器。

我们就可以用这个回归器去预估一下,我现在波士顿的这个features。

我们去看一下他预估的结果,下面这个东西就是他预估的结果,这就是他预估的结果。

OK然后下面这个地方呢,你你可以去用这个regression,这个是默认的,刚才我给了15棵树,它默认的应该是十棵树吧,如果没记错的话。

对这个random service regressor它是有些参数的。

然后它这个地方的参数,比如说我们看一下,默认默认的树的棵树是十棵树,对默认的ns litters值是等于十,K是等于十的啊,然后我刚才是给了15嘛对吧。

如果我给参数,它就会以参数去初始化了,所以我我刚才这个地方啊,我在下面我是给了15嘛对吧,我是给了15吗。

好啊,下面这个地方呢我又重新跑了一遍,这个时候没有给没有给就是十嘛,就是十棵树嘛啊具体多少棵树最好,这个我们后面再学好吧,嗯这个我们后面再学,对每棵树就是一种样本和属性的采样,没错你说的很对。

我们都是用决策树,我们都是用决策树,我们只是15棵树,用了不同的样本和不同的属性好,有同学说设置了15棵树后,模型的内部做了什么模型,内部拆除了15颗,准备好了15个模型,去15个决策树的模型去拟合。

现在这个数据OK明白了吗,然后再对结果预估的结果去做一个平求平均,因为现在是回归求平均,所以啊我说明白了吗,所以当你设定N等于N等于15的时候,他就准备好了15棵树等着去学,OK这个意思。

设置属性的个数在哪,刚才我设过来,这不在这吗,这是属属性的个数啊。

sorry属性的个数在这,matt features属性的个数在这。

你可以取,比如说啊0。6他就取60%的属性,60%的全部特征的60%的特征。

比如说这个地方还会有一些其他的啊,这个地方是max feature。

你还可以选max,你可以取simple啊,就是关于这个样本样本去做采样啊,样本做采样都可以在这里去选,OK好吧。

每棵树随机采取采样多少不同的样本,看读它的APIAPI不是在这吗。

max feature读它的default是什么,default是default。

是它默认的值,它会有一个默认的值的,它会有个默认的值啊,对这个参数大家看文档就好了,没错,它是呃对不同的数据集哦,它是对相同的数据做采样以后,得到不同的数据集,去构建了15棵树去求平均好不好。

那个我希望大家在学习这些,你们可以提问题,没问题,我觉得好的问题我会回答,有些问题的话呃,就是我不太建议给大家的方式是一直喂饭,就你看我不会给大家列一个文档,我不练这种东西。

因为列文档这个东西的话就没意义了,我希望大家在上完这个课以后,这个这个书关上你能记得一些核心的点,你能记得老师说最重要的点在哪,这些东西是最重要的,他们可以散开来,我要解决这个问题的话。

我查API谁都会查,有一个说明文档谁都会用,然后你需要记住的东西是,这个算法的核心是什么,哪些东西会影响我现在的学习啊,这个这个是比较重要的,CELINE当中必须是二叉树吗。

对CELINE当中没有实现id3和C4。5,它实现的是cut啊,对就是一般工业界的工具库实现的都是CD,所以都是二叉树啊,都是二叉树,模型内部构建15个数的方法都一样,只是样本不同对吧,样本样本不同。

特征也不一样,样本不同,它的每一次生长的时候选取的特征也不一样,对属性也不一样,没错,工业业做机器学习,是不是大部分时间都花在数据处理,数据处理中啊,数据处理确实会花掉一大部分的时间。

但是模型我们也会去做研究啊,模型我们也会做研究好,那个今天我就给大家讲到这儿好吗,大家有更多的问题可以在QQ群里再交流,我会下课,马上把这个地方的两个案例和数据,打包发到群里,好不好。

我希望今天的课大家听完对决策树这种模型啊,或者是随机生成量的模型,回归数会都有一些认识,大家记住我说的最重要的核心点,这个核心点非常的重要,对所以我希望大家能够回看到这个课的时候。

或者回顾这个算法的时候,能记住最核心的这样一些点,这就够了,好的你们有问题,你们在QQ群里再和我去啊,交流好吧好谢谢大家。

标签:这个,在线,一个,笔记,公开课,具体,然后,我们,就是
From: https://www.cnblogs.com/apachecn/p/18498033

相关文章

  • Markdown语法笔记
    1.关于标题#标题1##标题2###标题3####标题4######标题5#######标题62.简单文本一个*,斜体两个*,加粗两个~,删除<u>表示下划线3键盘文本ctl+B<br>内容---><---换行4.>引用门前有两棵树--周树人--鲁迅5.有序列表6.无序列表列表1列......
  • ARM Memory(L1/L2/MMU)笔记
    《ARMArchitectureReferenceManualARMv8-A》里面有Memory层级框架图,从中可以看出L1、L2、DRAM、Disk、MMU之间的关系,以及他们在整个存储系统中扮演的角色。涉及到的相关文档有:《ARMArchitectureReferenceManualARMv8-A》:E2TheAArch32ApplicationLevelMemoryModel......
  • [Ansible实践笔记]自动化运维工具Ansible(一):初探ansible&ansible的点对点模式
    文章目录Ansible介绍核心组件任务执行方式实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录常用工具ansibleansible—docansible—playbook主要配置文件Ansible模块配置......
  • 程序员修炼之道——从小工到专家读书笔记2
    第四章至第六章为程序员提供了一系列实用的编码原则和实践技巧。第四章:注重实效的偏执这一章深入探讨了程序员在面对复杂性和不确定性时,如何保持一种“偏执”的态度来确保软件的质量和可靠性。程序员应该对自己的代码持怀疑态度,始终假设它可能存在错误,直到经过严格的测试和验证......
  • 2024 Fall NJU ISE 课程笔记
    友情链接:https://eaglebear2002.github.iohttps://spricoder.github.iohttps://wbl-z.github.io/1-1自动化测试目录1-2物联网目录2-1数据库目录3-1机器学习目录3-2移动互联网4-1编译原理目录4-2需求需求笔记目录5-1概率论概率论笔记......
  • SPI通讯协议笔记
    SPI的通讯时序当我的NSS从机片选线从高电平被拉至低电平代表选中了这个从机,通讯开始,当从机片选线从低电平升至高电平,代表通讯结束(选中从机状态取消)SCK每一个周期传输MOSI和MISO的一个数据,当SCK下降沿时采样MOSI和MISO的数据......
  • FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库LD
    ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据......
  • 新东方在线视频课程资料下载工具,如何在电脑端下载新东方在线视频课程讲义到本地?
    一.安装新东方在线课程下载器1.获取学无止下载器https://www.xuewuzhi.cn/koolearn_downloader2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无止下载器介......
  • 关于项目引用onlyoffice作为在线office文件预览与编辑的笔记(二)
    基于上一篇中已经创建了onlyoffice容器,所以该篇讲述如何升级容器配置1.修改onlyoffice20并发限制方案一进入容器修改六个app.js文件find./-nameapp.js目录下所有app.js文件,对代码行进行修改,只是经过简单的测试,希望发现问题及时回复。(this._state.licenseType=e),/......
  • jsp ssm 购物网站 在线购物平台 在线商城 网购平台 源码web java
    一、项目简介本项目是一套基于SSM的购物网站,主要针对计算机相关专业的和需要项目实战练习的Java学习者。包含:项目源码、数据库脚本、软件工具等。项目都经过严格调试,确保可以运行!二、技术实现​后端技术:Spring、SpringMVC、MyBatis前端技术:JSP、HTML、CSS、JavaScript......