2017-05-03 5 views
0

Naive Bayes Classifier를 만들기 위해 교수가 제공 한 코드를 살펴 보겠습니다. 우리는 내장 된 패키지를 사용하지 않고 있음을 주목하십시오. 오히려 그것을 학습 목적으로 쓰는 것. 교수가 사용했다고 진술의R (Naive Bayes Classifier)의이 문장의 의미

하나는 나를 혼란 : Xtrain 우리가에서 분류를 구성하는 데 사용하는 데이터 세트가

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

. 나는 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 
+0

그가 어디 다시 t 변수를 재사용 않는다? –

+0

@ AlihanZıhna, 맞습니다. 나는 그 질문을 갱신했다. –

+0

't'는'Xtrain [, 11]'이 클래스'c'와 같은 위치를 나타내는 논리의 벡터 여야합니다. 벡터의 합계는'c' 클래스의 위치에서'n '에 할당하는 발생 횟수를 제공합니다. – Val

답변

1

I의 주석에서 설명한 바와 같이, t는 전에 논리의 벡터와 동일한 값을 나타내는 것이다 cX[,11]입니다. 벡터 t을 합하면 출현 횟수가 표시됩니다 (True1이고 False0).

여기 작은 동작 예이다 :

## 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 
0

문이 Xtrain[,11] == c TRUE 또는 FALSE의 부울 벡터를 반환합니다 다음

그가 분류를 양성하기 위해 사용하는 코드입니다. 벡터의 값은 Xtrain[,11]이 값인 c과 같으면 TRUE이고, 그렇지 않은 경우 0입니다. 이 벡터는 t에 할당됩니다.

그래서 t은 다음과 같이 보일 수 있습니다 :

FALSE 
FALSE 
TRUE 
TRUE 
FALSE 
TRUE 

또는 무언가를. Xtrain[,11]의 대응하는 행이 명백하게 진술 n[c] = sum(t); 뒷부분 사용되는 1, 2 또는

이 변수 t 3으로 루프 설정 c를 같을 때 다시, TRUE 값이 발생한다. 불리언 값이 산술에 포함되면 암시 적으로 1을 TRUE로, 0을 FALSE로 변환합니다. 그러므로 기본적으로 n[c]Xtrain[,11] 입력에 1, 2 또는 3의 개수를 포함합니다.

다음은 완전한 예입니다. =

FALSE 
FALSE 
TRUE 
TRUE 
FALSE 
TRUE 

그래서 C는 N [C] = 3

: C = 1 용

2 
3 
1 
1 
2 
1 

, t 모습 것이다 가정하자 열 Xtrain 11 (Xtrain[,11])은 같다 [2] = 2

TRUE 
FALSE 
FALSE 
FALSE 
TRUE 
FALSE 

그래서 N : 추천, t 보일 것 C 용

= 3 t이 보이는 것 같은

FALSE 
TRUE 
FALSE 
FALSE 
FALSE 
FALSE 

그래서 N [3] = 1.

+0

당신은 R이 아닌 C를 생각하고 있습니다. R은 논리적 인 가치가 있습니다. 그래서'Xtrain [, 11] == c'(따라서't')는 TRUE 또는 FALSE 값의 벡터입니다. 그러나 산술에 사용되면 TRUE는 1로 변환되고 FALSE는 0으로 변환되므로 'n'에 대한 내용은 옳습니다. – user2554330

+0

@ user2554330 : 네 말이 맞아요, 제 대답을 수정하겠습니다. – stackoverflowuser2010