classfication--宝可梦的研究
1.分类是什么?
分类问题是找一个function,它的input是一个object,它的输出是这个object属于哪一个class。
2.宝可梦研究(问题的导入)
以宝可梦为例,已知宝可梦有18种属性,现在要解决的分类问题就是做一个宝可梦种类的分类器,我们要找一个function,这个function的input是某一只宝可梦,它的output就是这只宝可梦属于这18种属性中的哪一种。
- 如何描述这只宝可梦(object)
用一组数字表示它有多强(total strong)、它的生命值(HP)、它的攻击力(Attack)、它的防御力(Defense)、它的特殊攻击力(Special Attack)、它的特殊攻击的防御力(Special defend)、它的速度(Speed) 。
以皮卡丘为例,我们可以用以上七种特性的数值所组成的vector来描述它。
- 数据集的处理
假设我们把编号400以下的宝可梦当做training data,编号400以上的当做testing data,因为宝可梦随着版本更新是不断增加的,编号比较前面的宝可梦是比较早发现的,所以我们去模拟已经发现这些宝可梦的情况下,如果看到新的宝可梦,能不能够预测它是哪种属性。
3.把分类问题作为回归问题来解,work嘛?
如何进行分类,可以用regression的方式来解决分类问题吗?
以binary classification为例,我们在Training时让输入为class 1的输出为1,输入为class 2的输出为-1;那么在testing的时候,regression的output是一个数值,它接近1则说明它是class 1,它接近-1则说明它是class 2。
根据上图,在左图中,我们可以看出当类别相对集中的时候,回归的线所划分出的结果是不错的;在右图中,类别出现了离散值,regression后的结果,紫色的分界线的划分效果并不理想。这是regression问题的损失函数会被离散值(噪声)影响,就会尽量保证方差变小。
Regression的output是连续性质的数值,而classification要求的output是离散性质的点,我们很难找到一个Regression的function使大部分样本点的output都集中在某几个离散的点附近。
因此,Regression定义model好坏的方式对classification来说是不适用的,也就不建议使用regression来解决classification问题。
对classification问题的理解:classification得到的结果要求是离散的,是不是可以理解为类别之间的没有什么特别的联系;regression
要求得到的结果是连续的,就要要求输出是要有联系的。也就是说,regression适合处理结果有一定特殊联系的问题。
4.分类模型的分析(二分类)
下面我们以二分类的案例对分类模型进行讨论。
机器学习的三个步骤:
- 定义模型
基于概率论,提出了概率模型来定义分类的function set。
我们首先把宝可梦的分类改为两个大类,水系(一共72只)的和普通系的(剩下属性的所有集合),在这个背景下,对宝可梦进行属性的分类。
首先定义一个高斯分布(简单理解成一个函数即可),再在此高斯分布上进行sample,sample72只宝可梦,并使得计算sample出的这72只宝可梦的概率最大,那么在这个高斯分布上得到的function就是我们要找的模型。 - 如何定义模型的好坏?
- 如何找到最优的模型?
对上述模型进行优化:
解决方案就是share 一个 协方差(我理解的是减少参数,使得模型不过于复杂)
在概率模型的应用时,不一定就是高斯分布,可以根据问题场景来定义你的模型,比如伯努利模型,朴素贝叶斯模型等等。
基于后验概率,可进行如下推导:
那么,在 z 又等于什么?
经过上面的推导,就可以得到logistic regression 的模型
- step 1:定义模型
- step 2 定义模型好坏的评判标准
这里的损失函数,利用了信息论中的交叉熵的概念。
- step 3:找到最优的函数
实际上就是去找到使loss function即交叉熵之和最小的那组参数 w ∗ , b ∗ w^*,b^* w∗,b∗就行了,这里用gradient descent的方法进行运算就ok。
知识点补充:
1、这里的损失函数为什么没有采用 交叉熵而不是平方差?
假设中心点就是距离目标很近的地方,如果是cross entropy的话,距离目标越远,微分值就越大,参数update的时候变化量就越大,迈出去的步伐也就越大。
但当你选择square error的时候,过程就会很卡,因为距离目标远的时候,微分也是非常小的,移动的速度是非常慢的,我们之前提到过,实际操作的时候,当gradient接近于0的时候,其实就很有可能会停下来,因此使用square error很有可能在一开始的时候就卡住不动了,而且这里也不能随意地增大learning rate,因为在做gradient descent的时候,你的gradient接近于0,有可能离target很近也有可能很远,因此不知道learning rate应该设大还是设小。
综上,尽管square error可以使用,但是会出现update十分缓慢的现象,而使用cross entropy可以让你的Training更顺利。
2、
3、Discriminative VS Generative
Generative model和Discriminative model的差别就在于,Generative的model它有做了某些假设,假设你的data来自于某个概率模型;而Discriminative的model是完全不作任何假设的。
Generative model的好处是,它对data的依赖并没有像discriminative model那么严重,在data数量少或者data本身就存在noise的情况下受到的影响会更小,而它还可以做到Prior部分与class-dependent部分分开处理,如果可以借助其他方式提高Prior model的准确率,对整一个model是有所帮助的(比如前面提到的语音辨识)
而Discriminative model的好处是,在data充足的情况下,它训练出来的model的准确率一般是比Generative model要来的高的。
5.多分类案例说明
在多分类问题中,softmax的作用就是对最大值进行强化,使大的值和小的值相差更大。
6. Logistic Regression的局限-引入Deep Learning
对于上图这种情况,我们就不知道怎么去进行分了,之后我们就引入了 Feature transformation。
根据经验,我们对其进行了Feature transformation,得到不错的分类效果,但是,在不同的问题背景下,我们可能不知道怎么去进行Feature transformation,这时候我们希望机器来自动的Feature transformation。解决办法就是将我们的多个logistics regression 单元进行连接。
当我们把这个logistic regression 基本单元作为 神经元,整个结构称为神经网络时,高大上的Deep Learning就产生了。