00:00
啊,大家如果要是还是对它就是觉得觉得比较奇怪,不太舒服的话,我们还是做一个测试吧,啊那么这里定义一个NPR,它应该是一个二维数组,对不对?呃,这里边我随便给一些值啊。好。呃,维度稍微不一样一点吧,我们五乘四吧。好,我们就是这样,随便一改应该可以了,对吧?呃,好,定义这样一个Dis,我们接下来是不是做了一个操作,叫做C的等于。
01:00
做了一个这个操作对不对。前面这个矩阵算出来这个大家知道是吧?这个是什么东西啊,这个五乘四的一个矩阵代表我是不是有五个点啊,五个样本点,然后我这里是不是相当于有四个质星啊,对吧?大家回忆一下我前面这个底矩阵是不是算出来是100乘六的一个矩阵。所以行数就是代表我有几个点对吧,我这里有五个点,然后一行数据是不是就是它算出来跟每一个置心的那个距离啊,哎,所以这一行就是代表我第一个数据跟哎四个知心点每一个的距离,那大家会看到它跟哪个最近。应该是跟第二,呃,这012对吧,我们按这个来排第二个最近对不对,所以我们这里的C硬的大家会想到应该是什么啊哎艾distances大家会想到这是不是选出来就是第二个啊。
02:08
啊,这个我们数据给的不好是吧,因为大家看选出来全是第二个,这个就不好了啊呃,我们我们这样啊,前面这个这个也多多一点啊。然后11好三也来一个一,应该也有最小的是吧?好,我们跑一下,好,那么大家会看到现在我们得到的这个列表,是不是就是我们的每一个元素,它到底跟哪一类最近啊,那是不是这个就相当于是它的分类那个类别啊,哎,这就是它的类别,那大家接接下来继续看,就是说我们上面还做了什么操作呢?是不是要针对每一类,然后要去选取它里边的这个,呃,就是做做这个k means字,取它的这个智心对吧?那么取这个智心我们可能不用去考虑,大家关键是把里边的这一个东西知道就可以了,对吧?那我们这里是不是也要去做一个这样的一个操作,Data c等于I,那这里肯定有问题,因为我们这里没定义data,对不对,我们给的是什么。
03:24
X对吧,我们的data塔是不是就是X啊好,诶I有问题啊,我们就让它等于大家想看哪个。我们就让它等于二吧,好吧,二看起来多一些,诶,这里又报错了哦,这里的是一个维度的错误,为什么呢?大家看本身的X是不是一个100行的数据啊,而我们现在是不是变成了一个呃,一个五行的数据啊,而且大家会发现就是到时候我们那个呃啊,当然这个列应该没关系啊,因为我们这里只是针对它的行去做筛选,对不对?这里边只有这么一组数,跟跟列没关系,那我们可以怎么去做呢?我定义一个X6吧。
04:09
X6等于大家想一想,我现在只有五行,是不是可以从X里边去截取?截取五行可不可以,所以我是不是可以这么这么干啊,对吧,然后我print X new大家看一眼啊,下边我就不用X了,用X6对吧。那么大家看到我得到的是一个什么结果呢?X6是我从X里面选了这么几几个数,对不对?然后我得到的X6是什么?啊,大家如果这个还是看不清楚的话,我们把里边的这个cin的等于二打印出来,大家看一眼,Cin的等于二是一个布尔类型的数组,对吧?所以它得到的是一个true false true false false什么意思呢?是不是就是C应该等于二,我们要用这个列表,它里边的每个元素跟二去做对比,对不对?
05:18
等于二返回处不等于二返回false,那是不是是二的这个位置就是处不是二的位置就是false啊,所以返回这么一组之后,大家看X new去用它来做布尔过,呃,布尔的这个条件筛选的时候,得到一个什么样的结果呢?得到的是不是就是大家看。这得到的是两个数据,两条数据对不对,两行第一行是哪个,是不是就是零啊,第零行对不对。第二行是哪个,是不是就是二啊,负5.31.5对不对,所以这是不是就是我们这里为负的那两条数据啊,哎,所以那大家想我这里边如果这么选的话,选出来的是不是就是类别等于二的所有的点啊,然后我再对它去做一个。
06:17
点命对不对,那这边要xis等于零,那大家看是不是求出来就是一行数据啊,就是前边我们得到的,当然就是大家如果还是想要看一眼这个到底是什么的话,是不是就是把这里边的一列竖着加起来求一个平均值,竖着加起来求一个平均值得到了一列啊,这是不是我们就是把各个点求知心的这种做法,每一个坐标每一列对应的求均值,对吧?哎,所以这就是我们最后得到的一个结果啊,大家这么一看的话,应该就知道怎么做的了,对吧?好,呃,这是我们这个核心的实现,我我们还是一起把它讲完吧,大家再休息好不好,接下来就轻松轻松多了,就是我们接下来是不是去测试一下。
07:14
测试一下,这个测试的过程当中,这个呃,可能涉及到一些就是需要画图的东西,我这个就直接把它全全定义出来,大家知道什么意思就可以啊,大家不需要完整的去实现,比方说我这里边定义一个这样的函数,专门为了画图定义的XY,我要画图的时候XY都传进来,然后还有这个3CHOICE一次至星点也传进来,我们的数据其实最核心的就是一个样本点,一个执星点,对不对啊,就是这几个数据,然后我这里再传一个数据叫sublot,就是它的子图,子图编号,呃,然后后面我可以给他再传一个title啊,那么这个画图的时候怎么画图呢?我可以给它分配子图。
08:09
那么就是plt里边可以有一个叫做sub plot的一个方法,那么这里边我们就根据传进来的这个子图编号,对它分配一个子图,然后大家会想到我画图是不是就是散点图scatter画什么呢?那是不是还是把我们的散点X要画出来对不对,这是第一列对吧?第一个坐标,第二个坐标这样画出来,那同样我们可以给它指定一个color对吧?呃,这里你可以等于等于Y等于Y的话,这是不是就是默认我们跟上面这个画的一样啊,我们如果要是聚类的时候,可能一开始我们不知道它属于什么类型,我们直接给它都等于红色好了,换一下表达方式对吧?然后我们呃画出至心点,呃初初始之心点吧,初始至心。
09:09
点啊,其实我们这里就不是初始之星点了,就是画出之星点对不对,只要传进来我们就把它画出来就可以了,PLt.scatter那知行点的坐标是什么呢?执行点是不是3CHOICE啊,对吧?3CHOICE里边我们是不是也是它的横坐标应该是。零啊,3CHOICE本身是不是也是一组数,大家想想是不是跟这个X是一模一样的形式啊,只不过就是行数不一样嘛,我们这里是六个执行点,那后边给一个一对吧,然后我们这一个呃,C给一个,给一个不一样的东西吧,比方说我们这里边大家如果想要给一个黑色的话也可以,或者我们这里边可以给一个,给一个NPRA,就是直接生成一个一个数组,大家会想到我生成一个RANGE6的一个一个,这样一个数组是不是就可以按照不同的颜色显示出初始执行点啊?
10:15
啊,这这是这个没关系啊,大家怎么样写都可以,然后另外我还一可以指定一个S参数,S代表size。是不是这个大小啊,我们把它弄大一点,看起来好看对吧?好plt点啊,当然就是还有一个title啊,我们可以给它一个标题,把title放进来,好,这是预定义的一个这样一个画图的方法啊,定义一个绘制子图函数,就是专门方便我们后边去调用而已,然后接下来大家会想到我是不是就应该去首先创建一个k means,它的一个对象实例对吧?呃,我们这个类名叫k means,它里边传什么参数呢?
11:10
一开始初始化的时候要什么东西,是不是应该有n clusters,还有max,还有呃,我们这里边的这个初始执行点对不对,那这里边这样吧。我把后面两个我们传进来给一个初始执行点,那这个初始执行点,呃,我就还是传一个NPR啊,那大家会想到这里边应该是一个二维数组对不对?矩阵,我们的初始点给给到哪里吧,比方说啊,我们就随便给啊,比方说都是二的这这一列的坐标吧。二一开始啊,34566个对吧,我们211直到二六就排排一排吧,三二对吧,来看这就相当于已经指定了初始点,好,那接下来我们还是要画图定义一下这个大小啊,Figure这个里边figure size之前我们给了一个六六,现在我们给大一点,为什么呢?因为我们有两个子图想要画两个对吧,我们给十六六。
12:28
然后接下来我是不是可以掉这个plot kings画图了,我首先要画的是初始的状态,所以我直接就可以画把XY,但是这个Y好像传进去也没啥用,对吧?啊,没关系啊,大家就是想要在这里用Y去显示,是不是可以把这个C指定成Y啊,好,XY,然后k means。点三。
13:01
这就是他自己本身的那个self点3CHOICE对不对,我们指定了这里的这一个,呃,实力对象之后,那调它的这个3CHOICE传进去,呃3LO,这里大家注意给的是一个整数值,这个121表示什么意思呢?表示我们最后的子图划分是一行两列,然后当前画的是一行两列里边的第一个子图,这这是它的这个含义啊,我们这里写一下啊,分配子图,121表示一行两列的子图。中的第一个。呃,大家就是知道它这个就是方便画图的一些写法就可以,这个不用不用较真儿对不对,那这里边我们给一个还是给一个名字吧,比方说这里叫初始状态对吧,这是initial state,好,那当然我们要做对比,是不是先得做一个聚类啊,我们聚类怎么聚,是不是k means点。
14:09
点F啊对,F是不是要传入X,这里就开始聚类了啊好,那接下来大家会想到我是不是就可以画出聚类晚安之后的结果了,那我直接copy这一行吧。大家想我这里传入的那还是XY传进去这里还是KINS3CHOICE,只不过这里的执行点是不是就改变了,改变成最后剧烈完之后的了,对吧,那这里我们是不是122啊,那当然这里边我们给一个叫final state对吧?好呃,这个聚类完成之后,呃,我们可能还有大家可以先看一眼这个这个效果怎么样啊来看就是这样一个效果。
15:04
就是我们初始的时候给定的都是在二这个坐标这里,对不对,21221直到二六,然后聚类完成之后大家看。执行点是不是就真正的到了我们这里每一类的中心啊,对吧?好,这是我们的大,就是整体的这这样一个效果,那这个还没算完,呃,我们接下来还要做什么事情呢?我们还应该给一个新的点,呃,预测一下对吧,预测新数据点的类别,好,那么这里我们是不是就应该,呃,我先给一个这样吧,就是我先给一个X new对不对。呃,我们自己定义一个NP啊,这个数据给什么呢?一个二维数组,我们给两个点,给什么点吧,我可以给一个00点对不对?我们看看00点属于哪一类啊,大家直观看的话,其实能知道它属于哪一类对不对?零零是不是在这儿啊,好,然后另外一个点我们给个17吧,给个大一点的点,好,等一下我们看看它到底属于哪一类啊。呃,然后大家会想到我们是不是应该有一个y predict就应该得到。
16:19
是不是要调用它的keymin.predict方法,我们传入是不是就是X new传进去就可以了,好,那最后的结果,呃,我们这里先把y predict应该打印出来对不对,看看它到底属于哪一类。然后我们最后还可以把它做一个画图对吧?哎呀,这个我们还是放在上面吧,因为下边再画图的话,就跟上面这个子子图就不一样了,对不对,我们还是放在这里直接去画出来啊,我们直接就在上面这个子图里边去把它画出来好了。PLt.scatter把这个点画出来,我们是不是有这个X new0对吧,X61,呃,这个还是大一点啊,我们size给100,然后color给一个,换一个颜色,我们给一个黑的吧,Black,好,现在大家看一眼。
17:25
哎,好,没问题啊,大家看一下我们这两个点是不是啊,这就是画出来这两个点对不对,大家直观看的话,它应该属于哪一类啊。是不是这个肯定就是属于右上角这一类对不对,这里这个类就属于旁边这一类对吧?那么大家看一眼它的这个预预测出来,它的分类分到是一和五这两类,哎,这两类我们不知道是什么的话,我是不是还应该把把把什么打印出来啊,大家注意啊,这个颜色它其实是会变变化的。
18:03
呃,这个是它随机出来的对不对,后面我们在做聚类的时候,不是严格按照这个来来去做的啊,那大家如果想调整这个的话,也可以按照不同的颜色,按照不同的这个,呃,就是第几个点对不对,这里我们并不是完全按照这个来的,好那么我们print大家想看哪个应该得看当前的是不是我应该看当前的所有的这个之星啊。所以。看一下print keymings,好,大家看一眼第一个点应该是哪个,负二负0.228对吧,那是不是负二负0.228是不是,是不是这类呀,这跟我们的预测是不是应该一致啊,它应该就在这里对吧?好,那然后第五类是不是最后一类啊,9.207.56啊,那不用想17肯定跟他离得近对不对,所以这是不是非常符合我们预期的这个结果啊,所以这就是kings的一个完整的过程,大家下来之后可以把这一部分好好的做一做。
我来说两句