00:00
我们开始讲分类模型。这里边我们主要介绍这样的三种分类模型,首先就是KN,那大家想到分类,先问一下大家,大家能如果让你给你一堆数据,让你去做分类的话,你能想到什么样的分类的方法,分类的算法大家一下没概念了是吧?这这这什么东西啊,这是呃,最简单的,大家因为我们现在讲的是监督学习对不对?监督学习的话,那也就是说所给的数据里边应该是有X有Y的,对吧?那大家可以想象一下,我们这里比方说拿到的数据就是有一堆X,然后Y呢,它取值可能比方说就是012,这是不是就代表三类啊。大家想一下,我们拿到一堆这样的数据,然后它是相当于已经分好的类,对吧?那我们是不是要找到它里边的X和Y的关系,才能够对新来的X做出预测啊?那大家想一想,如果让你设计这个分类器,你怎么样去用什么方法去找他这个关系呢?
01:12
呃,大家一下子可能想不到,我这里给大家提示一句啊,最简单的分类器其实是什么样,什么样的东西就可以说是分类器呢?最简单的就是我制定好规则,一个X就对应一个Y,这其实就是一个分类器,就是所有的数据你都拿过来了,对不对?比方说你这里有一个,哎,一百一百零一对应的分类是一,呃,152对应的分类是二,那我就制定出来我的这个分类器就是101对应一,152对应二,每一个都对应一个值,我把这个全全列出来,这是不是也算一个分类器啊,但是它有一个问题啊,它有一个问题是什么?是不是规则特别多啊,我们海量数据来了之后,你这个规则就特别多,对不对?而且它的做法是什么?就是你如果新来的数据是我已经分好类的那些数据已经。
02:13
找到匹配关系的那个类的话,这是不是就可以分了,那那就不一定啊,你怎么就知道我总能拿到已经训练过的数据里边的X呢,那遇到没有见过的这个怎么办呢?这是不是就没办法做了,哎,所以大家想最简单最初级的这个一一匹配的这种分类器不好使。那我们怎么样把它做一个改进呢?大家其实就简单的可以想到我们一一匹配的那种方式,就有点像线性回归的时候,要求每个点必须要在那条直线上,对不对,你就必须得是这个数,准确的这个数对应到一个类别上去,那诶对,那现在大家就想到了,那你既然不要那么不要那么严肃,对吧,不要那么严严谨,必须要一模一样,那是不是只要跟他差不多,我就把它归到这一类,是不是就可以啊?诶这其实就是一个最基本的想法,那根据这个想法得到的一个算法,就是我们这里提到的K精灵的算法,具体来说它怎么做呢?它其实是要去测量不同特征值之间的距离,根据这个距离来进行分类,什么意思?就是我们有一堆样本点,那它本身它的那堆X,我们可以认为就是它的特征值对不对,根据这个特征值不同的两个点之间,我们是不是可以比对一下。
03:42
算一下它们之间的相似程度对不对?或者说这个距离,如果他们离得近,是不是就可以把它分成一类啊?我现在既然是监督学习,那我是不是最简单的想法,就是说跟我离得最近的那个点,他是属于哪一类,我就分到哪一类,这是不是一个很基本的想法啊?所以KN很简单啊,它其实就是说找跟自己最临近、最接近的那些样本点,他们分到哪一类,我就是哪一类。
04:13
呃,那大家会想到就是你如果说最接近的那个直接拿过来就用的话,好像有一点这个误差感觉还是比较大的,对不对,那怎么样能把这个误差能减小一点呢?是不是应该得多找几个点啊,对吧?那比方说你找,如果要是你就找一个点的话,那就只能找最近的那个点了,那如果我找三个点的话,我是不是可以看看这三个点里边它们分别属于哪一类,然后我少数服从多数,哪一类分的更更多,我就属于哪一类,对不对?哎,所以大家看这其实就是KNN里边K的意思。KNN本身它的英文是什么意思呢?K nearest的neighbor,也就是说K个最接近的邻居对不对啊,所以就是说我自己分为哪一类,我看谁呢?我看跟我最接近的K个邻居他们属于哪一类,我就按照最多的那一类去划分就可以了。
05:16
那家就可以想到,那这个K是不是比较有讲究,或者说这个K会不会影响到我们最后的分类啊,对,其实这个一想的话,就能想到K肯定是有影响的,呃,当然这个K的取值一般情况是呃,不大于20的整数,而且大家会想到一一般情况,对,如果说我们是简单的二分类的话,或者说平常一般情况就统一都去取一个奇数,为什么呢?对,如果是二分类的话,你是偶数的话,是不是很有可能打平了,打平那我到底属于哪一类,这个就这个就不好办了,对不对啊,有同学可以想到,那出现这种情况可能你就要加一些优化的一些程度,比方说我是不是还要按照距离的远近去再做一个加权呢?对吧,是不是要考虑更多的因素呢?呃,我们现在如果基本的这个想法,基本的实现里边只是考虑它的个数的话,那是不是就一定要保证一方得胜出啊,这就好。
06:16
好像我们说这个,大家知道政治局里边的常委的数量一般都是基数,对不对?呃,七大常委,九大常委,好像从来没听说过偶数个,对不对?呃,那当然曾经有过啊,有有过这个,呃,一些这样的一些时间段,但是大多数时候还是技术,为什么呢?是不是方便表决啊,你一旦要是不好搞的时候,哎,大家至少能有一个少数服从多数嘛,所以我们分类也是一样的想法,当然的,我们这个其实主要是针对。二元的分类,二分类问题对不对?如果要是三分类问题的话,四分类更多的分类的话,其实也就没有办法保证,哎,你这个基数能够一定保证两个不打平对不对啊,所以其实主要是针对二分类,好,那接下来我们再看一眼啊,就是我们前面提到了这个K的选取会影响到最后的表现,最后的结果,那我们看一个看一个具体的例子吧,大家看啊,这里边的所有的小图形就表示一个我们的样本点对不对?那它在我们这个平面上的位置是不是就代表它自己的那个坐标,代表自己的那个X啊啊,它的那些特征值是不是就代表我们这里边这个位置应该有一个坐标对不对啊,这就是它的X,那大家看我们这里的划分。
07:38
是什么呢?啊,已经有了两类,本来的数据,原始的数据已经划分成了两类,一类是红色的三角形,一类是蓝色的正方形。因为我们监督学习问题,是不是一定要已知训练数据已定,要已知他们属于哪一类啊,那这个一定是得知道的,对吧?然后接下来我来了,新来了一个绿色的圆形,这个小这个样本点,问大家它到底应该属于哪一类呢?属于红色三角形这一类还是蓝色正方形这一类呢?哎,大家就会发现,比方说这里我们先选一个啊,K等于三的时候,KNK等于三,那是不是要选取跟它最接近的三个邻距来判断它的分类啊?诶,我们看一眼啊,三个邻距是不是这个圆啊,这个圆里边是不是有两个三角形,一个正方形,那它应该属于哪个?哎,少数服从多数,那它应该属于三角形这一类,对不对?
08:38
但是大家会想到,如果说我这个K不取三呢,我要取五的话,是一个什么效果呢?大家看取五是不是就变成了外面虚线这个圆啊,它周围最接近的这五个里边是不是有三个是正方形,两个是三角形啊,根据我们的算法,它是不是又应该划归到正方形这一类啊?所以这里大家就需要注意,KN算法的结果很大程度其实会取决于我们K的一个选择对不对?呃,所以这里我们再去代码实现的过程当中,也会去试着选取不同的K,看一看它的效果到底怎么样,呃,那接下来还有一个需要大家注意的,就是说我们这里提到了这个,你判断这个远近,判断距离。
09:26
距离怎么算呢?哎,这个大家想到很简单,那你两点之间连起来这个这个距离直接算不就完了吗?两点之间算距离,我们要求它必须是在平面上能表达,对不对?那也就是说它的这个坐标维度应该是二维的,那如果要是三维的呢?啊,大家会想到M3维的也一样啊,那是空间坐标,你连起来也是那个距离对不对?四维的呢?更高维的呢,四维啥样,四维长啥样,不知道啊,想象不出来了,对不对?所以我们肯定得有一个统一的统一的定义,对不对?大家说的这个两点之间连起来的这一个直线,这样的这个距离的计算,我们一般情况叫做对欧式距离,欧几里得距离对不对?就是我们一般意义上的几何空间里边的这样的一个距离,对吧,O几里的距离,那么除了这种距离定义之外,还可以有别的距离定义吗?对,大家。
10:26
其实在这里大家就看到了啊啊,有同学可能看到,我们也有同学可能之前就知道,有同学可能是看到这个我们这里的这个介绍,这里给了两个例子,一个就是我们常用的欧式距离,欧式距离怎么算呢?大家看X跟Y在这里就不是,大家看到X跟Y这里是什么,这里可以认为是两个点,我们这里的点就不只是两个坐标了,对不对,它可能是多个坐标,所以这里的XY是不是就相当于是一个向量啊,对吧?然后大家会看到,那么我们算它之间的距离的时候怎么算呢?对应的坐标之间全部求一个差,然后是不是平方和再开根号啊。
11:11
呃,大家看到这又是一个平方哎,求和,然后再开根号的一个过程,这是不是很像我们当时计算这个向量模长L2范数,是不是就是用的这种方式啊,L2范数对吧?之前给大家提到过,所以欧式距离其实可以认为就是这一个距离向量的一个L2范数。那对应大家看到这个曼哈顿距离是什么呢?哎,对,大家看到里边这一部分它是直接不求平方了,是不是直接绝对值啊,也保证它正对不对,然后再求和,里边的这一部分其实就是它的L1范数。大家注意,当然它是L1范数后,外边是不是又开了一个根号啊,开根号之后,这个叫做曼曼哈顿距离啊,所以大家可以看到,就是你可以定义不同的距离。
12:02
只不过在我们的实际生活当中,或者说实际的这个几何空间表达里边,我们一般习惯用欧式距离,对不对啊,这是我们KNN里面距离的一个计算,那在这里就多提一句,大家会想到我们在做推荐的过程当中,是不是也有类似的这样的根据基于镜灵的这种推荐啊。那基于近灵的推荐,我们应该用什么距离呢?怎么样去?呃,我们说就是你看过一个片子,给了他一个好评,我们要找到跟他相近的,接近的那些片子在推荐给你,对不对?那这个相近怎么去判断呢?呃,所以这就是给大家也留下一个问题,当然大家可以想到,我们当然可以用这里的欧式距离或者曼哈顿距离,对不对?呃,到后后面明天的时候,我们给大家讲到推荐系统算法的时候,会给大家介绍,我们其实最后用的往往还不是这样的欧式距离,我们最后用到的是一个余弦相似度这样的一个东西啊,这个等到明天再给大家去去具体介绍啊,好,那么KN的算法这个其实就很简单了,KN提到这块大家也稍微有看,看着大家稍微有一点懵啊,那我多说一句吧,余弦相似度大家能能想到吗?其实就是刚才我们这里的这个XY,我们说可以把它当成点,是不是它因为它有多个坐标嘛,是不是可以把它当成一个向量啊,你当成向量的话,这两个向量之间是不是会有一个夹角啊,所以这个夹角是不是也能代表它俩之间的一个关联程度啊,是否相似对不对啊,多给大家提一句,所以这个。
13:41
有一个专门的名字叫余弦相似度,那到明天的时候就是算它那个cos对不对,我我是一般把它叫余弦相似度,大家可能平常说法不太一样的话,就一下子不知道说什么好,那么我们看一下,回过来看一下KN的算法,这个就非常简单了,大家看一下这个描述吧,具体的描述怎么算呢?第一步先算测试数据和各个训练数据之间的距离。
14:10
这是干什么?大家会看到我们训练数据好像就没干什么事儿,对不对,因为训练数据是不是已经都分好类了呀,在这里边好像我们真的没有去从训练数据里边找什么规律出来,我们要做的就是什么呢?等着测试数据来,测试数据来了之后,是不是直接跟所有的训练数据算一下距离啊,然后按照距离的远近是不是排个序,然后最近的K个选出来,这是不是它的K近邻啊,这K个近邻里边我们是不是要判断它们分别属于哪个类对不对,而且我们要看哪个类出现的频率更高,对吧?所以我们要统计这K个点它们的类别,各自的频率,最后出现频率最高的那个类是不是就是我们测试数据的要分到的那一类啊,啊,这就是这个过程,还是比较好理解对吧?啊,那这一部分其实就是KN算法的一个过程。
我来说两句