R语言与分类(2)

贝叶斯判别分析

与举例分析和fisher判别分析相比,贝叶斯判别分析考虑了不同总体类别的先验概率,假如说有G1,G2,G3,G4四个P维总体,如果我们能预先得知这四个总体发生的概率,占得比例,那么在得到新样品时,就可以根据正态分布密度函数和到各个总体先验概率求出各个总体的后验概率,找出最大的后验概率对应的总体,即为其所属类。这就是贝叶斯判别法思路。
贝叶斯判别法需假设各个总体服从多元正态分布密度函数,也就是说,需要各个总体服从多元正态分布,对数据有一定要求。
代码实现:
首先进行多元正态分布检验,用到MVN包,下面为函数参数。

mvn(data, subset = NULL, mvnTest = c("mardia", "hz", "royston", "dh",
  "energy"), covariance = TRUE, tol = 1e-25, alpha = 0.5,
  scale = FALSE, desc = TRUE, transform = "none", R = 1000,
  univariateTest = c("SW", "CVM", "Lillie", "SF", "AD"),
  univariatePlot = "none", multivariatePlot = "none",
  multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",
  showOutliers = FALSE, showNewData = FALSE)

我们只需要用到其中三个
下边这个可以画出等高线图(二维变量),将contour替换成persp就可以画出透视图

mvn(iris[,1:2], mvnTest ="royston",multivariatePlot = c("contour"))

一般我们用下边这列函数
mvn(iris[,1:4], mvnTest ="hz",multivariatePlot = c("qq"))
函数返回各个变量的S-W正态分布检验,和整体的hz多元正态分布检验结果,和一个QQ图。注意需要检验每个类的正态性(这个方法好累啊)
下面检验协方差阵有没有显著差异

library(heplots)
boxM(iris[,-5],iris$Species)

若是没有显著差异,则直接用线性判别函数lda即可,这时就可以用上prior参数了。这里就可以自己回判了,并且可以输入测试集test看看(这里没给test)

library(MASS)
m <- lda(Species~.,prior=c(1/3,1/3,1/3),data = iris)
z=predict(m)
table(data.frame(z$class,iris$Species))
predict(m,test)

有显著差异的话就用二次判别函数qda

m1 <-qda(Species~.,prior=c(1/4,1/4,1/2),data = iris)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值