楼主: wgc119
9116 3

[学习分享] R语言 判别分析—贝叶斯判别分析 [推广有奖]

  • 0关注
  • 0粉丝

高中生

30%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
439 点
帖子
9
精华
0
在线时间
30 小时
注册时间
2015-7-8
最后登录
2021-8-13

楼主
wgc119 学生认证  发表于 2015-12-21 23:26:02 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
#判别分析 用以判别个体所属群体的一种统计方法 判别分析重点是两类群体的判别方法
#主要判别分析方法 有距离判别 贝叶斯判别 费歇判别法

1、关键点
#贝叶斯判别 贝叶斯判别式假定对研究对象已有一定的认识 这种认识常用先验概率来描述
#当取得样本后 就可以用样本来修正已经有的先验概率分布 得出后验概率分布
#然后通过后验概率分布 进行各种统计推断
#实际上就是使平均误判损失(误判概率与误判损失的结合)ECM达到极小的过程
2、案例分析
(一)两个总体的贝叶斯判别分析
#1.载入数据
TrnX1<-matrix(
  c(24.8, 24.1, 26.6, 23.5, 25.5, 27.4,

    -2.0, -2.4, -3.0, -1.9, -2.1, -3.1),

      ncol=2)
TrnX2<-matrix(
  c(22.1, 21.6, 22.0, 22.8, 22.7, 21.5, 22.1, 21.4,
    -0.7, -1.4, -0.8, -1.6, -1.5, -1.0, -1.2, -1.3),
  ncol=2)
#2、载入两总体的贝叶斯判别函数    注 把贝叶斯判别函数存在了计算机的E盘R文件夹中
source("E:/R/discriminiant.bayes.R")
#3、协方差相同时的判别
discriminiant.bayes(TrnX1, TrnX2, rate=8/6,var.equal=TRUE)
#协方差不同时的判别
discriminiant.bayes(TrnX1, TrnX2, rate=8/6)

PS============================discriminiant.bayes.R========================

#两个总体判别的贝叶斯判别程序
#输入 TrnX1 TrnX2表示X1类 X2类训练样本 样本输入格式为数据框
#rate=p2/p1缺省时为1
#Tst为待测样本 其输入格式是数据框  为两个训练样本之和
#var.equal是逻辑变量 当其值为TRUE是表示认为两个总体的协方差相同 否则不同
#输出 函数的输出时1和2构成的一维矩阵 1表示待测样本属于X1类

discriminiant.bayes <- function
(TrnX1, TrnX2, rate = 1, TstX = NULL, var.equal = FALSE){
  if (is.null(TstX) == TRUE) TstX<-rbind(TrnX1,TrnX2)
  if (is.vector(TstX) == TRUE) TstX <- t(as.matrix(TstX))
  else if (is.matrix(TstX) != TRUE)
    TstX <- as.matrix(TstX)
  if (is.matrix(TrnX1) != TRUE) TrnX1 <- as.matrix(TrnX1)
  if (is.matrix(TrnX2) != TRUE) TrnX2 <- as.matrix(TrnX2)
  nx <- nrow(TstX)
  blong <- matrix(rep(0, nx), nrow=1, byrow=TRUE,
                  dimnames=list("blong", 1:nx))
  mu1 <- colMeans(TrnX1); mu2 <- colMeans(TrnX2)
  if (var.equal == TRUE || var.equal == T){
    S <- var(rbind(TrnX1,TrnX2)); beta <- 2*log(rate)
    w <- mahalanobis(TstX, mu2, S)
    - mahalanobis(TstX, mu1, S)
  }
  else{
    S1 <- var(TrnX1); S2 <- var(TrnX2)
    beta <- 2*log(rate) + log(det(S1)/det(S2))
    w <- mahalanobis(TstX, mu2, S2)
    - mahalanobis(TstX, mu1, S1)
  }
  for (i in 1:nx){
    if (w > beta)
      blong <- 1
    else
      blong <- 2
  }
  blong
}


(二)多个总体贝叶斯判别
X<-iris[,1:4]
G<-gl(3,50)
source("E:/R/distinguish.bayes.R")
distinguish.bayes(X,G)

PS:=============distinguish.bayes.R====================

#多个总体判别的贝叶斯判别程序
#输入 TrnX 表示训练样本 样本输入格式为数据框
#TrnG是因子变量 表示训练样本的分类情况
#输入变量p是先验概率 缺省值为1
#Tst为待测样本 其输入格式是数据框
#var.equal是逻辑变量 当其值为TRUE是表示认为两个总体的协方差相同 否则不同
#输出 函数的输出是数字构成的一维矩阵 1表示待测样本属于X1类
distinguish.bayes <- function
(TrnX, TrnG, p = rep(1, length(levels(TrnG))),
TstX = NULL, var.equal = FALSE){
  if ( is.factor(TrnG) == FALSE){
    mx <- nrow(TrnX); mg <- nrow(TrnG)
    TrnX <- rbind(TrnX, TrnG)
    TrnG <- factor(rep(1:2, c(mx, mg)))
  }
  if (is.null(TstX) == TRUE) TstX <- TrnX
  if (is.vector(TstX) == TRUE) TstX <- t(as.matrix(TstX))
  else if (is.matrix(TstX) != TRUE)
    TstX <- as.matrix(TstX)
  if (is.matrix(TrnX) != TRUE) TrnX <- as.matrix(TrnX)
  nx <- nrow(TstX)
  blong <- matrix(rep(0, nx), nrow=1,
                  dimnames=list("blong", 1:nx))
  g <- length(levels(TrnG))
  mu <- matrix(0, nrow=g, ncol=ncol(TrnX))
  for (i in 1:g)
    mu[i,] <- colMeans(TrnX[TrnG==i,])
  D <- matrix(0, nrow=g, ncol=nx)
  if (var.equal == TRUE || var.equal == T){
    for (i in 1:g){
      d2 <- mahalanobis(TstX, mu[i,], var(TrnX))
      D[i,] <- d2 - 2*log(p)
    }
  }
  else{
    for (i in 1:g){
      S <- var(TrnX[TrnG==i,])
      d2 <- mahalanobis(TstX, mu[i,], S)
      D[i,] <- d2 - 2*log(p)-log(det(S))
    }
  }
  for (j in 1:nx){
    dmin <- Inf
    for (i in 1:g)
      if (D[i,j] < dmin){
        dmin <- D[i,j]; blong[j] <- i
      }
  }
  blong
}


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:贝叶斯判别 判别分析 贝叶斯 R语言 概率分布 案例分析 关键点 判别式 统计 样本

已有 2 人评分经验 论坛币 收起 理由
李会超 + 80 + 40 精彩帖子
1993110 + 20 鼓励积极发帖讨论

总评分: 经验 + 80  论坛币 + 60   查看全部评分

本帖被以下文库推荐

沙发
1993110 发表于 2015-12-21 23:28:28 |只看作者 |坛友微信交流群
我帮你转到这方面的版面好吗?

使用道具

藤椅
cheetahfly 在职认证  发表于 2015-12-22 08:16:04 |只看作者 |坛友微信交流群
好东西,感谢分享!

使用道具

板凳
307Hotel 发表于 2019-5-24 11:11:06 |只看作者 |坛友微信交流群
R语言的语法搞晕,有没有python版

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 16:18