【机器学习】判别模型vs生成模型

来源:互联网 发布:国家知织产权局专利局 编辑:程序博客网 时间:2024/06/05 11:01

判别模型vs生成模型

条件概率分布p(y|x)

从概率的角度来看监督学习的话,其实就是从数据集中学习条件概率分布p(y|x)。其中,xRn表示n维数据特征,yR表示数据对应的类别标签。给定一个x,模型计算出x属于各个类别标签y的概率p(y|x),然后判定x的预测标签为p(y|x)最大的y标签。

比如,现在的一个问题为判定一个动物是汪星人还是喵星人。这个问题可以表示为x=[叫声,食物,毛的颜色],y=[汪星人,喵星人]。监督学习就是去比较p(y=汪星人|x) 和p(y=喵星人|x)的概率谁大,预测给定的动物为概率较大的动物。

判别模型(discriminative model) vs 生成模型(generative model)

监督学习中估计p(y|x)的方法分为两种:判别方法和生成方法,其对应的就是判别模型和生成模型。

判别模型:基于给定的数据集,直接计算p(y|x),形象的说就是直接学习找到一条决策边界,判别数据的类别标签,在决策边界一侧的是类别0,在另外一侧的是类别1。形象的描述可以使用下图表示:给定一堆的蓝色和红色的点,监督学习通过不断的学习找到了一条直线,这条直线尽可能的将不同颜色的点划分开来。当给定了一个新的点,如果这个条落在直线的上方,则判定为红色,否则为蓝色。
这里写图片描述

考虑上述所说的判定动物为猫还是狗的问题,用判别模型解决就是,通过观察这个动物的叫声、食物和毛的颜色特征,来直接判定这个动物是属于汪星人还是汪星人。常见的判别模型有KNN,决策树,PLA等。

生成模型 :基于给定的数据集,首先要学习得到其联合概率分布p(x,y)和p(x),再通过等式p(y|x)=p(x,y)p(x)=p(x|y)p(y)p(x)来计算p(y|x)。考虑上述所说的判定动物为喵星人还是汪星人的问题,用判生成解决就是,给定一堆的喵星人和汪星人,我们可以很容易得到p(y=)=p(y=)=,然后我们还需要观察喵星人有什么特征p(x|y=)和汪星人有什么特征p(x|y=)。比如喵星人吃鱼,“喵喵喵”的叫;汪星人吃骨头,“汪汪汪”的叫。当判定一个新动物的时候,去观察这个新动物的特征更像汪星人p(y=|x) 还是猫星人p(y=|x)

在生成模型中,我们还需要对p(x)建模,如果有大量数据的话,可以较准确的衡量P(x),但是如果数据量较少就会导致偏差。不过,如果数据集固定,那么对于任意的类别标签p(x)都是一个定值 p(x)=p(x|y=1)p(y)+p(x|y=0)p(y=0),因此我们可以直接通过p(y|x)p(x|y)p(y)来衡量。

生成模型中常见的有:NB,HMM等。

判别模型和生成模型的优缺点

判别模型
- 缺点:判别模型直接学习P(y|x),即找到一条判别边界,使得不同类别之间的划分距离尽可能大,并不关心数据本身的特征p(x),因此无法反应数据的特性。
- 但是正是由于判别模型不关心p(x),直接有数据集学习判定预测数据的类别,因此减少了计算,模型简单。

生成模型
- 缺点:与判别模型相反,生成模型因为考虑了p(x,y)P(x),导致了模型复杂度增加,而且由于P(x)会引来偏差,降低预测准确率。
- 优点: 生成模型可以学习到数据本身的特征,并且可以将学习到的特征,应用到其他判别问题上。如果估计的问题并不是数据所属的类别y,而是某个隐藏的特性z,生成模型就可以估计出隐藏变量z的分布,判别模型就无法做到:p(y|x)p(x)=p(x)p(z|x)p(y|z)

0 0