R(朴素贝叶斯分类器)中这条语句的含义

Meaning of this statement in R (Naive Bayes Classifier)

我正在查看教授提供给我们的代码,用于创建朴素贝叶斯分类器。请注意,我们没有使用一些内置包;而不是为了学习目的而自己编写。

教授用过的其中一个说法让我很困惑:

t = (Xtrain[,11] == c);

其中 Xtrain 是我们用来构建分类器的数据集。我想我明白 Xtrain[,11] == c 的作用,但我不明白 t 的赋值。有人可以告诉我它的作用和原因吗?

编辑:

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

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

语句 Xtrain[,11] == c returns 一个布尔向量 TRUE 或 FALSE。如果 Xtrain[,11] 等于值 c,则向量中的值将为 TRUE,否则为 0。然后将该向量分配给 t.

所以 t 可能看起来像这样:

FALSE
FALSE
TRUE
TRUE
FALSE
TRUE

之类的。同样,当 Xtrain[,11] 的相应行等于 c 时,会出现 TRUE 值,这在循环中设置为 1、2 或 3。

这个变量 t 显然在稍后的语句 n[c] = sum(t); 中使用。当布尔值涉及算术时,它们被隐式转换为 1(TRUE)和 0(FALSE)。所以基本上 n[c] 将在输入 Xtrain[,11].

中包含 1、2 或 3 的计数

这是一个完整的例子。假设 Xtrain (Xtrain[,11]) 的第 11 列看起来像:

2
3
1
1
2
1

对于 c=1,t 看起来像:

FALSE
FALSE
TRUE
TRUE
FALSE
TRUE

所以 n[c] = 3.

对于 c=2,t 看起来像:

TRUE
FALSE
FALSE
FALSE
TRUE
FALSE

所以 n[2] = 2.

对于 c=3,t 看起来像:

FALSE
TRUE
FALSE
FALSE
FALSE
FALSE

所以 n[3] = 1.

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

这是一个小的工作示例:

## 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 次:

n
 [1] 0 0 0 0 0 0 8 0 0 0