首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这句话在R(朴素贝叶斯分类器)中的意义

这句话在R(朴素贝叶斯分类器)中的意义
EN

Stack Overflow用户
提问于 2017-05-03 20:55:24
回答 2查看 74关注 0票数 0

我正在研究我们的教授提供给我们的代码,用于创建一个朴素的Bayes分类器。请注意,我们并没有使用一些内置的包,而是为了学习目的自己编写它。

这位教授所用的一种说法使我感到困惑:

代码语言:javascript
复制
t = (Xtrain[,11] == c);

其中Xtrain是我们用来构造分类器的数据集。我想我明白Xtrain[,11] == c是做什么的,但我没有得到的是t的作业。有人能告诉我它的作用和原因吗?

编辑:

以下是他用来训练分类器的代码:

代码语言:javascript
复制
X = read.csv("naive_bayes_binary.csv");
tnum = nrow(X)/2;  
Xtrain = X[1:tnum,];  # the data we construct the classifier from
p = matrix(0,3,10);  #  p[c,j] = P(x_j = 1 | Y = c)
prior = rep(0,3);  # will be prior probs
n = rep(0,3);  # will be class counts
for (c in 1:3) {
    t = (Xtrain[,11] == c);    ### What is this?
    n[c] = sum(t);
    for (j in 1:10) {
        p[c,j] = sum(Xtrain[t,j] == 1)/n[c]  
    # empirical prob that jth feat = 1 for cth class
    }
}
prior = n/tnum;  # the prior probabilities of the classes
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-03 21:12:26

正如我在注释中提到的,t是一个逻辑向量,在X[,11]中表示等于c的值。如果将向量t之和,就会得到出现的次数(因为True1False0)。

下面是一个小的工作示例:

代码语言:javascript
复制
## 10 classes
n <- rep(0,10)

# class number of interest
c <- 7

# data vector (in OP's example a column)
X11 <- sample(1:10,100,replace = T)

X11
      [1]  2  7  5 10  4  5  1  7  4  4  1  8  1  5  7  1 10  2  6  9 10  4  3  2  2  8  7 10  3  2  5  3 10  4  8  2  2  8  6  2  5  2
     [43]  1  4  9  3  3  4  9  7  5 10 10  9  6 10  9  8  7  9  8  2  1  1  4  5  3 10  4  9 10  3 10  1  7 10  6  8  3  1  9  5  5  2
     [85]  9  9  1  9  3  3  3 10  5  3  3  2  7  4  3 10


# vector of logicals
t <- X11 == c

t
  [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
 [22] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [43] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
 [64] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE

# assign number of occurrences
n[c] <- sum(t)

n的输出显示出8种情况:

代码语言:javascript
复制
n
 [1] 0 0 0 0 0 0 8 0 0 0
票数 1
EN

Stack Overflow用户

发布于 2017-05-03 21:10:05

语句Xtrain[,11] == c返回真或假的布尔向量。如果Xtrain[,11]等于c值,否则向量中的值将为真。然后将该向量分配给t

因此,t可能如下所示:

代码语言:javascript
复制
FALSE
FALSE
TRUE
TRUE
FALSE
TRUE

或者别的什么。同样,TRUE值是当对应的Xtrain[,11]行等于c时发生的,该值在循环中设置为1、2或3。

这个变量t显然是在语句n[c] = sum(t);后面使用的。当布尔人涉及算术时,它们被隐式转换为1(对于TRUE)和0(对于FALSE)。因此,基本上n[c]将在输入Xtrain[,11]中包含1、2或3的计数。

以下是一个完整的例子。假设Xtrain (Xtrain[,11])的第11列如下所示:

代码语言:javascript
复制
2
3
1
1
2
1

对于c=1,t如下所示:

代码语言:javascript
复制
FALSE
FALSE
TRUE
TRUE
FALSE
TRUE

所以nc = 3。

对于c=2,t如下所示:

代码语言:javascript
复制
TRUE
FALSE
FALSE
FALSE
TRUE
FALSE

所以n2 = 2。

对于c=3,t如下所示:

代码语言:javascript
复制
FALSE
TRUE
FALSE
FALSE
FALSE
FALSE

所以n3 = 1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43769866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档