2017-09-03 35 views
-1

我有以下问题:我想用贝叶斯分类器使用两个变量“性别”和“年龄组”来描述因子变量“癌症”(是或否)。 这些是我的(虚构的)样本数据:朴素贝叶斯分类与R - 奇怪的结果

install.packages("e1071") 
install.packages("gmodels") 
library(e1071) 
library(gmodels) 

data<-read.csv("http://www.reduts.net/cancer.csv", sep=";", stringsAsFactors = T) 

## Sex and Agegroup ## 
###################### 

# classification 
testset<-data[,c("sex", "agegroup")] 
cancer<-data[,"cancer"] 
model<-naiveBayes(testset, cancer) 
model 

# apply model on testset 
testset$predicted<-predict(model, testset) 
testset$cancer<-cancer 

CrossTable(testset$predicted, testset$cancer, prop.chisq=F, prop.r=F, prop.c=F, prop.t = F) 

结果表明我,根据我的数据男性和年轻人更容易得癌症。与真实的癌症分类相比,我的模型对200例病例中的147例(= 88 + 59)进行了正确分类(73.5%)。

    | testset$original 
testset$predicted |  no |  yes | Row Total | 
------------------|-----------|-----------|-----------| 
       no |  88 |  12 |  100 | 
------------------|-----------|-----------|-----------| 
       yes |  54 |  46 |  100 | 
------------------|-----------|-----------|-----------| 
    Column Total |  142 |  58 |  200 | 
------------------|-----------|-----------|-----------| 

不过,当时我做的只使用一个分类变量(性别)同样的事情:

## Sex only   ## 
###################### 

# classification 
testset2<-data[,c("sex")] 
cancer<-data[,"cancer"] 
model2<-naiveBayes(testset2, cancer) 
model2 

模型如下:

Naive Bayes Classifier for Discrete Predictors 

Call: 
naiveBayes.default(x = testset2, y = cancer) 

A-priori probabilities: 
cancer 
    no yes 
0.645 0.355 

Conditional probabilities: 
     x 
cancer   f   m 
    no 0.4573643 0.5426357 
    yes 0.5774648 0.4225352 

显然,男性是与女性相比,患癌症的可能性更高(54%vs 46%)。

# apply model on testset 
testset2$predicted<-predict(model2, testset2) 
testset2$cancer<-cancer 

CrossTable(testset2$predicted, testset2$cancer, prop.chisq=F, prop.r=F, prop.c=F, prop.t = F) 

现在,当我申请我的模型对原始数据,所有病例被列为同一类:

Total Observations in Table: 200 

        | testset2$cancer 
testset2$predicted |  no |  yes | Row Total | 
-------------------|-----------|-----------|-----------| 
       no |  129 |  71 |  200 | 
-------------------|-----------|-----------|-----------| 
     Column Total |  129 |  71 |  200 | 
-------------------|-----------|-----------|-----------| 

谁能请解释我为什么女性和男性被分配到同类

回答

1

你错误地解释了这些输出。 当你打印出来MODEL2看到

Conditional probabilities: 
     x 
cancer   f   m 
    no 0.4573643 0.5426357 
    yes 0.5774648 0.4225352 

这是错误的结论“很显然,男性更容易 有癌症相比,女性(54%比46%)。”

什么这张表告诉我们是四个数字

P(female | no cancer)  P(male | no cancer) 
P(female | cancer)  P(male | cancer) 

这是很容易看的

table(cancer, testset2) 
     testset2 
cancer f m 
    no 59 70 
    yes 41 30 

第一输出看到这来自模型的条件概率线可如下计算: 129人没有癌症。 59/129 = 0.4573643是女性。 70/129 = 0.5426357是男性。因此,阅读第一行的方法是 “鉴于患者没有癌症,他们更可能是男性(54%比46%)”。

现在你的问题:任何人都可以请解释我,为什么 女性和男性被分配到同一类?

要决定哪些类的男性将被分配到,你需要比较
P(Cancer | Male)P(No Cancer | male)。无论哪个更大, 我们都会声明来表明这个班级。当使用朴素贝叶斯,这些 通过应用贝叶斯规则估计重新制定这是比较

P(Cancer | Male) = P(Male | Cancer) * P(Cancer)/P(Male) 
with 
P(No Cancer | Male) = P(Male | No Cancer) * P(No Cancer)/P(Male) 

分母是在两种情况下是相同的,所以如果我们只关心 这是更大的,我们可以的

P(Male | Cancer) * P(Cancer)大小与P(Male | No Cancer) * P(No Cancer)

比较这些正是吨他在打印出模型时会报告数据。

因此,对于男性

P(Male | Cancer) * P(Cancer)  = 0.4225352 * 0.355 = 0.15 
P(Male | No Cancer) * P(No Cancer) = 0.5426357 * 0.645 = 0.35 

(注:这些都不是真正的概率,因为我们忽略了分母 P(Male))由于没有癌症具有较高的数量,我们预测男性没有癌症。

同样,对于女性,我们计算

P(Female | Cancer) * P(Cancer)  = 0.5774648 * 0.355 = 0.205 
P(Female | No Cancer) * P(No Cancer) = 0.4573643 * 0.645 = 0.295 

,女性过我们预测没有癌症。强调这个女性的这个 计算可能是有用的。即使P(Female | Cancer) > P(Female | No Cancer), 这些是由总概率P(Cancer)P(No Cancer)加权。
因为总体上它更可能没有癌症而不是癌症,所以 更大。朴素贝叶斯预测两性不分性别。