簡體   English   中英

R(朴素貝葉斯分類器)中此語句的含義

[英]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求和,將得到出現的次數(因為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

語句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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM