李宏毅深度学习笔记 https://datawhalechina.github.io/leeml-notes
李宏毅深度学习视频 https://www.bilibili.com/video/BV1JE411g7XF
假设有两个类别,label为1和-1
如果用回归的方式拟合模型,那么目标是1和-1
把分类问题当成回归问题拟合模型会有问题,由于回归问题的损失函数一般都是均方损失
左图绿色绿色是正确的分界线,但是如果有一些数据点离得比较远,那么为了减小损失函数,分界线会变成紫色的那一条,对于分类问题来说,明显是不正确的
看二分类问题一个简单的model,损失函数就是预测错误的次数,在\(f(x)\)中嵌入一个\(g(x)\)
\(g(x)>0\) 预测为类别1,否则就预测为类别2
这种损失函数无法微分,不过可以用感知机、SVM等算法求解。
在这里先引入一个概率模型
概率模型的原理
- 盒子1中随机抽一个球,蓝色的概率为4/5,绿色的概率为1/5
- 盒子2中随机抽一个球,蓝色的概率为2/5,绿色的概率为3/5
现在随机从两个盒子中抽一个球为蓝色,那这个蓝色球是第一个盒子中的概率是多少?
这里就是贝叶斯公式\(P(A|B)=\frac{P(B|A)P(A)}{P(B)}\),求后验概率\(P(B_1|Blue)\):
概率和分类
\(P(x)\)是一个边缘分布\(P(x)=P(x,\sum C)\),因为朴素贝叶斯计算了联合分布\(P(x,C_1),P(x,C_2)\),因此属于生成模型。\(P(C_1|x)\)就是x属于\(C_1\)的概率
先验概率
如何计算一个新的数据的分类?例如海龟没有在数据集中出现过,那怎么办?
之前说过,可以把数据做向量化,那一个数据就是有很多特征值组成的一个向量。
有79个宝可梦(同属于water类的训练数据集),海龟没出现在数据集中,我们希望得到条件分布\(P(x|water)\)(用来计算\(P(water|x)\))
所有宝可梦都用一个向量量化,这样就可以计算概率值了,不过如何计算条件概率值?海龟都没有出现在训练数据集中。从概率分布角度看,不同类别的数据有不同的数据分布,数据点量化后,我们就可以计算这个分布。
假设宝可梦是从一个高斯分布中抽取的,那么可以通过训练数据集估计这个高斯分布,再去计算海龟从这个高斯分布中抽取的概率。
使用极大似然估计计算概率分布
通过训练数据估计期望\(\mu\) 和协方差矩阵\(\sum\) 。期望是黄色的点,协方差矩阵是红色的范围。给一个新数据点\(x\),就通过概率分布计算概率。
极大似然估计
任意期望和协方差矩阵的高斯分布都可以生成这79个数据点,只不过概率大小不同。像图中左边的高斯分布产生这些数据的概率大,右边的概率小。记\(L(\mu,\Sigma)\)为似然值
我们自然是取产生概率大的那个分布,也就是79个数据的似然值要最大
对\(L(\mu,\Sigma)\)求偏微分是0的点,即是 \(\mu^*\) 和 \(\Sigma ^*\)
分类模型
\(P(C_1)\)和\(P(C_2)\)通过类个数/所有个数 计算
如果假设类分布式高斯分布,那么可以用每个类的训练数据计算每个类的\(\mu\)和\(\Sigma\) ,进而计算出\(P(x|C_1)\)和\(P(x|C_2)\)
最后计算出\(P(C_1|x)\)并进行判别
左上图的意思是,越蓝为water类的可能性越低,越红为water类的可能性越高
右上图的是分类结果,红色区间是类别1,蓝色区间是类别2
右下图是test的分类结果,两个特征时的准确率很低,但是增加特征,就可以提高准确率,虽然结果也不是很好。。
这里又是什么问题呢?
因为假设服从高斯分布,当特征比较多的时候,协方差矩阵的维数就比较高,意味着着model的参数较多,再给每个类拟合一个高斯分布,就可能导致过拟合。因此一般使用相同的协方差矩阵描述不同的高斯分布。
如何计算共用的协方差矩阵?
修改似然函数,结合两个类的数据
\(\mu^1,\mu^2\)还是之前的算法,每个类数据的平均,共用的\(\Sigma\) 则是之前的加权平均
用相同的\(\Sigma\),最后的分离超平面变成线性的
概率模型拟合三部曲
实际就是最大化似然函数求出最合适的高斯分布
为什么使用高斯分布?其实是自己决定Function Set
一般都是根据假设,像二分类的一般都是假设伯努利分布
高斯分布和伯努利分布的区别和联系?
都属于指数分布簇,都是二项分布
至于为什么\(n\)无限大时,二项分布就是正态分布,则是棣莫弗-拉普拉斯极限定理