我有以下问题:我想要一个因子变量"癌症" (是或否)使用两个变量"性别"和"年龄组"与贝叶斯分类器。 这些是我的(虚构的)样本数据:
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%对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 |
-------------------|-----------|-----------|-----------|
任何人都可以解释一下,为什么女性和男性都被分配到同一个班级?
答案 0 :(得分: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)
。哪个更大,
我们将声明表明该课程。当使用NaïveBayes时,这些
通过应用贝叶斯规则来重新计算比较
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)
和DataGridTemplate
加权的
总的来说,它更可能没有癌症,而不是癌症
更大的开关。 NaïveBayes预测两种性别都没有癌症。