2020李宏毅机器学习与深度学习笔记——Classfication_1
本节课的目标是,寻找合适的Function,对于我们的每一个输入x,我们给出合适的输出类别n,如下:
这种Function有很大的应用,比如在金融领域,我们可以根据一个人的收入、存款、工作、年龄、过去的财务历史等等,来决定是否贷款给他;再比如医疗方面,我们可以根据一个人现在的症状、年龄、性别、过去的就医历史等等,来判断他生了那种病(自动医疗诊断);再比如做手写文字辨识,类别就是合法字体的个数;再比如做人脸识别,我们输入一张脸,然后在数据库里寻找,找到这张脸的主人。
依旧以pockmon来举例,我们知道pockmon有18种属性,我们现在要找一个Function,在把pockmon作为输入时,得到它的属性作为输出,如下所示:
Q1:怎么将一只pockmon作为输入呢?
每只pockmon都有很多特性,这些特性可以被数值化。比如说Total(多强),HP(生命值),Attack(攻击力),Defense(防御力),SP Atk(特殊攻击的攻击力),SP Def(特殊攻击的防御力),Speed(速度(两只pockmon相遇时谁先攻击))。
Q2:这样做有什么意义?
有…广泛的应用?
Q3:怎么完成这项任务?
1.收集训练集。将已知的pockmon和它的属性作为训练集训练。
方法一:我们用二分法举例,化简成一个Regression问题。
Training:类别1意味着target是1,类别2意味着target是-1。
…当作Regression强行train…
Testing:给出一只pockmon的特征,如果结果接近1,则认为它属于类别1,接近-1则认为它属于类别2。
然而,将Classfication当作Regression,会出现以下问题:
在图1中,class1和class2的分界点是绿色那条,左上角表示输出小于0的点,右下角表示输出大于1的点,越偏右下,他的就越大。所以当我们考虑图2的数据时,对于右下角的数据,他们的结果远大于1,而当我们用Regression做分类时,我们会希望结果更接近1、-1,所以这些远大于1的点对于我们Regression来说是error,我们在图2上train时,往往得到紫色的这条线。我们用Regression来做Classfication时,往往会因为惩罚那些太“正确”的点而得到不好的结果。
方法二:一种理想的做法。
我们期望找到一个Function,在其内部有另一个程式g,当g>0,则认为时类别1,否则为类别2。在训练过程中,我们用分类的错误次数作为LOSS,目前我们没办法解这个问题,后面会用Perceptron,SVM来解。
方法三:Generative Model
如下图所示,共有三步:
1.计算Prior。
我们用id<400的pockmon来作为训练集,class1是水系,class2是一般系,我们现在知道训练集有79只水系,61只一般系,则我们从class1抽样出一只pockmon的概率是0.56,从class2抽样出的概率是0.44。
我们要求的是给出一个pockmon,判断它是水系的概率,我们知道水系的有很多种,在400只里有79只,这79只可能不包括我们即将测试的pockmon,但不能说它是水系的概率为0。
我们前面提到用一组向量(特征)来描述pockmon的属性***。
接着我们把这79只pockmon的Defense 和 SP Defense画成图,如下:
水系这79个点的Defense 和 SP Defense形成一个高斯分布*,我们怎么从这个海龟从这个分布中被抽样到的几率?
那么如何找高斯分布中的两个参数呢?用到最大似然估计。
2.最大似然估计求best function。
当然,我们每一个高斯分布,都有可能抽样出空间里的这70个点,区别在于,他们抽样出的概率likelihood不同。
这样,给我们一个mean和covariance matrix,我们就可以求这个高斯分布抽样出79个点的几率:
我们知道某个高斯分布抽象出来79个水系pockmon,接下来我们要做的就是去找这个高斯分布,即maximum likelihood,我们把几率最大的高斯分布成为水系pockmon的分布。
ok,这样我们就可以得到Prior。
3.分类。
经过上式的计算,我们就可以解决问题了,结果如下。蓝色点是水系,红色点是一般系,对这个平面上的每一个点,我们都当作一个x,对其求P(C1|x) 【它是C1的几率,红色区域表示是水系的几率较大,蓝色区域表示是水系的几率较小。】我们认为几率>0.5即为类别1。再在测试集上验证,界限还是一样的,但结果不是特别好,只有47%的正确率,但这个只是在二维空间上。当我们观察高维(7)空间,我们依然可以用这个方法计算,结果有54%的正确率,还是很差。
前面我们在求高斯分布里的参数时,不同的类别有不同的mean和covariance matrix,然而我们实际上可以设置同样的covariance matrix,这样可以有效减少参数。即我们可以做如下假设:
结果如下,明显有了显著提升:
回顾Generated Model:
我们前面说每个x都有一组特征,假设每个x的分布几率相互独立,则我们可以有下面的模型,我们假设每个x都是一个一维的高斯分布,但这个模型太简单了,坏掉了。当然我们也不仅限于高斯分布。对于二分特征,我们应当假设这个特征是一个伯努利分布。如果我们假设所有的dimension之间是相互独立,那我们可以认为结果服从Navie Bayes Classifier。
我们进一步分析:
我们发现,经过繁琐的工作,我们最后的核心问题还是在找到合适的w和b,下一节将学习怎样快速的找到w和b。