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
求和,您将得到出现的次数(因为 True
是 1
而 False
是 0
)。
这是一个小的工作示例:
## 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
我正在查看教授提供给我们的代码,用于创建朴素贝叶斯分类器。请注意,我们没有使用一些内置包;而不是为了学习目的而自己编写。
教授用过的其中一个说法让我很困惑:
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]
.
这是一个完整的例子。假设 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
求和,您将得到出现的次数(因为 True
是 1
而 False
是 0
)。
这是一个小的工作示例:
## 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