声明:《概率图模型基于R语言》读书笔记
在学习完如何表示图模型,如何计算后验分布,如何用最大似然估计使用参数,以及如何在数据缺失和存在隐含变量下学习相同的模型时,我们要深入研究使用贝叶斯范式来进行建模的问题。
1、朴素贝叶斯模型及其扩展,主要用于分类
小例子:
library(mixtools)
library(MASS)
Sigma<-matrix(c(10,3,3,2),2,2)
x1<-mvrnorm(100,c(1,2),Sigma)
x2<-mvrnorm(100,c(-1,-2),Sigma)
plot(x1,col=2,xlim = c(-5,5),ylim = c(-5,5))
points(x2,col=3)
例子.PNG
我们评估分类器质量的方法是看错误率,根据分类问题的不同,错误可能意味着不同的结果。例如,在医疗分类问题中,把病人分成的病类别要不分成健康类别或带有未知检出疾病通常要危险小些。
模型的主要(强)假设是,给定类别、特征都是独立的
图模型:
朴素贝叶斯图模型.png
为了使问题简单,我们会把说有特征变量和类别变量当做二维变量。但是理论上多元变量在这个问题中处理起来也是一样的。实际上,如果你考虑连续变量,这个模型的理论也是类似的。例如,对于实质特征,我们可以考虑高斯分布
学习朴素贝叶斯模型:
library("e1071")
data(iris)
model<-naiveBayes(Species~.,data=iris)
p<-predict(model,iris)
hitrate<-sum(p==iris$Species)/nrow(iris)
我们得到了96%的命中率,即96%的数据点都被正确分类。
理想情况下,我们应该把数据集分成两部分,假设我们使用1/3的数据进行测试,2/3的数据进行模型训练。这种分割需要以随机的方式完成。
ni<-sample(1:nrow(iris),2*nrow(iris)/3)
no<-setdiff(1:nrow(iris),ni)
model<-naiveBayes(Species~.,data=iris[ni,])
p<-predict(model,iris[no,])
完全贝叶斯的朴素贝叶斯模型
x<-seq(0,1,0.05)
plot(x,-log(x),t='b',col=1)
捕获.PNG
这个是负对数似然率,将非常小的数字做乘法运算时,我们把它转化成对数的加法运算,以前是考虑到运算效率,但随着处理速度的提升,现在主要是考虑计算机的计算精度。
2、Beta-二项分布模型,这也是最基础的模型
下面简单的几行程序给出二项式分布
x<-seq(1,20)
plot(x,dbinom(x,20,0.5),t='b',col=1,ylim=c(0,0.3))
lines(x,dbinom(x,20,0.3),t='b',col=2)
lines(x,dbinom(x,20,0.1),t='b',col=3)
二项式分布.PNG
如何选取BETA参数的值
x<-seq(0,1,length=100)
par(mfrow=c(2,2))
param<-list(
list(c(2,1),c(4,2),c(6,3),c(8,4)),
list(c(2,2),c(3,2),c(4,2),c(5,2)),
list(c(1,1),c(2,2),c(3,3),c(4,4)),
list(c(0.5,0.5),c(0.5,1),c(0.8,0.8)))
for(p in param)
{
c<-1
leg<-character(0)
fill<-integer(0)
plot(0,0,type="n",xlim=c(0,1),ylim=c(0,4))
for (v in p)
{
lines(x,dbeta(x,v[1],v[2]),col=c)
leg<-c(leg,paste0("Beta(",v[1],",",v[2],")"))
fill<-c(fill,c)
c<-c+1
}
legend(0.65,4,leg,fill,bty="n")
}
捕获.PNG
3、高斯混合模型
隐变量也叫作隐含变量,是指存在于模型中但是从来都观察不到的变量。
这种区别的原因在于,我们想把类似的东西分到一起,但是它们并不是现实世界的局部。
library(mixtools)
library(MASS)
N <- 400
X <- list(
mvrnorm(N, c(1,1), matrix(c(1,-0.5,-0.5,1),2,2)/4),
mvrnorm(N, c(3,3), matrix(c(2,0.5,0.5,1),2,2)/4),
mvrnorm(N, c(5,5), matrix(c(1,-0.5,-0.5,4),2,2)/4))
plot(0,0,xlim=c(-1,7),ylim=c(-1,7),type='n')
for(i in 1:3)
points(X[[i]],pch=18+i, col=1+i)
未知类别数据点.PNG
library(mixtools)
library(MASS)
N <- 400
X <- list(
mvrnorm(100, c(1,1), matrix(c(1,-0.5,-0.5,1),2,2)/4),
mvrnorm(200, c(3,3), matrix(c(2,0.5,0.5,1),2,2)/4),
mvrnorm(300, c(5,5), matrix(c(1,-0.5,-0.5,4),2,2)/4))
x <- do.call(rbind,X)
model2<-mvnormalmixEM(x,verb=TRUE)
model3<-mvnormalmixEM(x,k=3,verb=TRUE)
model3.2<-mvnormalmixEM(x,k=3,verb=TRUE)
plot(model3,which=2)
plot(model3.2,which=2)
plot(model2,which=2)
聚类分类结果.PNG
网友评论