[英]Meaning of this statement in R (Naive Bayes Classifier)
我正在研究我們的教授提供給我們的代碼,以創建Naive Bayes分類器。 請注意,我們沒有使用一些內置包。 而不是為了學習而自己編寫。
教授使用的其中一種說法使我感到困惑:
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
正如我在評論中提到的, 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
語句Xtrain[,11] == c
返回布爾值TRUE或FALSE。 如果Xtrain[,11]
等於值c
,則向量中的值將為TRUE Xtrain[,11]
否則為0。 然后將此向量分配給t
。
所以t
可能看起來像這樣:
FALSE
FALSE
TRUE
TRUE
FALSE
TRUE
或者其他的東西。 同樣,當Xtrain[,11]
的對應行等於c
,會出現TRUE
值,該值在循環中設置為1、2或3。
顯然,稍后在語句n[c] = sum(t);
使用此變量t
n[c] = sum(t);
。 當布爾值參與算術運算時,它們將隱式轉換為1(對於TRUE)和0(對於FALSE)。 因此基本上n[c]
將在輸入Xtrain[,11]
包含1、2或3的計數。
這是一個完整的例子。 假設Xtrain( Xtrain[,11]
)的第Xtrain[,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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.