我遇到了以下问题:我想使用贝叶斯分类器,通过两个变量“性别”和“年龄组”来预测一个因子变量“癌症”(是或否)。这些是我(虚构的)样本数据:
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 testsettestset$predicted<-predict(model, testset)testset$cancer<-cancerCrossTable(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 PredictorsCall:naiveBayes.default(x = testset2, y = cancer)A-priori probabilities:cancer no yes 0.645 0.355 Conditional probabilities: xcancer f m no 0.4573643 0.5426357 yes 0.5774648 0.4225352
显然,与女性相比,男性更容易患癌症(54%对46%)。
# apply model on testsettestset2$predicted<-predict(model2, testset2)testset2$cancer<-cancerCrossTable(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 | -------------------|-----------|-----------|-----------|
谁能解释一下,为什么女性和男性都被分配到同一类别?
回答:
您误解了这些输出。当您打印出model2并看到
Conditional probabilities: xcancer 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) testset2cancer 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.15P(Male | No Cancer) * P(No Cancer) = 0.5426357 * 0.645 = 0.35
(注意:这些不是真实的概率,因为我们忽略了分母P(Male)
)由于没有癌症的数字更高,我们预测男性没有癌症。
同样,对于女性我们计算
P(Female | Cancer) * P(Cancer) = 0.5774648 * 0.355 = 0.205P(Female | No Cancer) * P(No Cancer) = 0.4573643 * 0.645 = 0.295
对于女性,我们也预测没有癌症。强调对女性的这一计算可能会有帮助。尽管P(Female | Cancer) > P(Female | No Cancer)
,但这些是由总体概率P(Cancer)
和P(No Cancer)
加权的。
由于总体上没有癌症的可能性比有癌症的可能性更大,这会改变哪个更大。朴素贝叶斯对两种性别都预测没有癌症。