J'ai le problème suivant: Je voudrais pédaler un facteur-variable "cancer" (oui ou non) en utilisant deux variables "sexe" et "groupe d'âge" avec un classificateur Bayes. Ce sont mes données d'échantillon (fictif):Naive Bayes Classification avec R - résultat étrange
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)
Le résultat me montre que, selon mes données les hommes et les jeunes sont plus susceptibles d'avoir un cancer. Par rapport à la classification réelle du cancer, mon modèle classe 147 (= 88 + 59) sur 200 cas correctement (73,5%).
| testset$original
testset$predicted | no | yes | Row Total |
------------------|-----------|-----------|-----------|
no | 88 | 12 | 100 |
------------------|-----------|-----------|-----------|
yes | 54 | 46 | 100 |
------------------|-----------|-----------|-----------|
Column Total | 142 | 58 | 200 |
------------------|-----------|-----------|-----------|
Cependant, alors que je faisais la même chose en utilisant une seule variable classement (sexe):
## Sex only ##
######################
# classification
testset2<-data[,c("sex")]
cancer<-data[,"cancer"]
model2<-naiveBayes(testset2, cancer)
model2
Le modèle se présente comme suit:
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
De toute évidence, les hommes sont plus susceptibles d'avoir un cancer par rapport aux femmes (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)
Maintenant, quand je demande mon modèle aux données d'origine, tous les cas sont classés comme la même classe:
Total Observations in Table: 200
| testset2$cancer
testset2$predicted | no | yes | Row Total |
-------------------|-----------|-----------|-----------|
no | 129 | 71 | 200 |
-------------------|-----------|-----------|-----------|
Column Total | 129 | 71 | 200 |
-------------------|-----------|-----------|-----------|
Quelqu'un peut-il s'il vous plaît me expliquer, pourquoi les femmes et les hommes sont affectés à la même classe?