2017-05-03 7 views
0

Naive Bayesクラシファイアを作成するために私たちの教授が提供したコードを調べています。組み込みパッケージを使用していないことに注意してください。むしろ学習目的のために自分自身で書くこと。教授が使用されたことを文の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

を、彼はどこかで再びそのトン変数を再利用していますか? –

+0

@AlihanZıhna、そうです。私は質問を更新しました。 –

+0

't'は' Xtrain [、11] 'がクラス' c'と等しい位置を示す論理のベクトルでなければなりません。ベクトルの合計は、 'c'クラスの位置で' n'に代入する回数を返します。 – Val

答えて

1

Iコメントで述べたように、tは、論理名のベクトルは同じ値を示す、ありますcX[,11]に設定してください。ベクトル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 
0

TRUEまたはFALSEのブールベクトルを返すXtrain[,11] == c声明。 Xtrain[,11]が値cに等しい場合、ベクトルの値はTRUEになり、そうでない場合は0になります。このベクトルはtに割り当てられます。

のでtは次のようになります。

FALSE 
FALSE 
TRUE 
TRUE 
FALSE 
TRUE 

か何か。再び、TRUE値はXtrain[,11]の対応する行は、この変数tは明らかステートメントn[c] = sum(t);に後で使用される1、2、または3

なるようにループに設定されているcに等しいときに発生します。ブール値が算術演算に関与する場合、ブール値は暗黙的に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、tは次のようになります。

TRUE 
FALSE 
FALSE 
FALSE 
TRUE 
FALSE 

そうN [2] = 2

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

関連する問題