Я строю RF-модель для прогнозирования рака шейки матки на основе биопсии ( данные ).
Затем я пытаюсь объяснить предсказания, используя точные значения. Для этого я использую библиотеку mli
в R.
Однако я сталкиваюсь с проблемами:
- Прогнозируемые вероятности из случайного леса и значений shapley различаются. Я предполагаю, что это можно отнести к выборке M C, но, тем не менее, это немного беспокоит.
- реальная проблема : когда я получаю значения shapley для данного прогноза, сумма вклады + средняя вероятность класса не составляют окончательного прогноза . Этого не должно происходить из того, что в пакете ссылка указано в качестве свойства эффективности этих значений
Я попытался преобразовать его, предполагая, что в формуле используется логарифм. шансы трансформации под капотом, но ничего толкового не выходит.
Есть идеи?
Код для воспроизведения (скачать набор данных по этой ссылке ):
library(iml)
library(randomForest)
testdf <- read.csv('./M2ER/risk_factors_cervical_cancer.csv')
table(testdf$Biopsy)
## subset variables to the ones that should be used in the book
cervical = dplyr::select(testdf, Age, Number.of.sexual.partners, First.sexual.intercourse,
Num.of.pregnancies, Smokes, Smokes..years., Hormonal.Contraceptives, Hormonal.Contraceptives..years.,
IUD, IUD..years., STDs, STDs..number., STDs..Number.of.diagnosis, STDs..Time.since.first.diagnosis,
STDs..Time.since.last.diagnosis, Biopsy)
# NA imputation
imputer = mlr::imputeMode()
cervical_impute = mlr::impute(cervical, classes = list(numeric = mlr::imputeMode()))
cervical = cervical_impute$data
testmod <- randomForest(as.factor(Biopsy)~., data = cervical)
predict(testmod, cervical, type='prob')[1,]
predictor <- Predictor$new(model=testmod, data = cervical %>% select(-Biopsy),
y = as.factor(cervical$Biopsy),
type="prob")
shapley <- Shapley$new(predictor, x.interest = (cervical %>% select(-Biopsy))[1, ], sample.size = 100)
shapley$plot()
shapley$y.hat.interest
shapley$y.hat.average
shapley$results %>% filter(class==1) %>% summarise(sum(phi)) #should be equal to the difference between y.hat.interest and y.hat.average