首页 > > > R语言机器学习:mlr包的使用和模型解释(离散变量)
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和学术知识发现。知乎专栏:R语言数据挖掘邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
使用mlr包做分类问题,与预测问题有所不同,因此继续练习。参考资料为:https://rawgit.com/pbiecek/DALEX_docs/master/vignettes/DALEX_mlr.html#3_classification_use_case_-_wine_data
首先,调用包。
library(pacman)
p_load(DALEX,breakDown,mlr)下面,调数据。
data(wine)
wine$quality <- ifelse(wine$quality>5, 1, 0)
wine$quality <- factor(wine$quality)使用的是wine数据集,其中quality变量被我们重新分为二值因子变量(R语言中针对分类问题,一般要求响应变量为因子变量)。 随后,让我们做一个训练集和测试集的划分(60%为训练集)。
train_index <- sample(1:nrow(wine), 0.6 * nrow(wine))
test_index <- setdiff(1:nrow(wine), train_index)
wineTest <- wine[test_index,]训练依旧遵循这个步骤:1、问题定义;2、模型定义;3、开始训练。
#问题定义:这是一个分类模型,响应变量为quality
classif_task <- makeClassifTask(id = "ap", data = wine, target = "quality")
#模型定义:注意返回值我们要返回极大似然估计
classif_lrn_rf <- makeLearner("classif.randomForest", predict.type = "prob")
classif_lrn_glm <- makeLearner("classif.binomial", predict.type = "prob")
classif_lrn_svm <- makeLearner("classif.ksvm", predict.type = "prob")
#训练模型:注意要写清楚子集,即训练集的行号
classif_rf <- train(classif_lrn_rf, classif_task, subset=train_index)
classif_glm <- train(classif_lrn_glm, classif_task, subset=train_index)
classif_svm <- train(classif_lrn_svm, classif_task, subset=train_index)要解释模型,就不能用因子变量,一定要用概率值!所以要统一把测试集中的响应变量和预测模型返回值设定为概率值。
y_test <- as.numeric(as.character(wineTest$quality))
custom_predict_classif <- function(object, newdata) {pred <- predict(object, newdata=newdata)
response <- pred$data[,3]
return(response)}
explainer_classif_rf <- DALEX::explain(classif_rf, data=wineTest, y=y_test, label= "rf", predict_function = custom_predict_classif)
explainer_classif_glm <- DALEX::explain(classif_glm, data=wineTest, y=y_test, label="glm", predict_function = custom_predict_classif)
explainer_classif_svm <- DALEX::explain(classif_svm, data=wineTest, y=y_test, label ="svm", predict_function = custom_predict_classif)不解释了,如果不能通过看到就解释的话,可以温习之前的帖子:https://zhuanlan.zhihu.com/p/59508180
mp_classif_rf <- model_performance(explainer_classif_rf)
mp_classif_glm <- model_performance(explainer_classif_glm)
mp_classif_svm <- model_performance(explainer_classif_svm)
plot(mp_classif_rf, mp_classif_glm, mp_classif_svm)
plot(mp_classif_rf, mp_classif_glm, mp_classif_svm, geom = "boxplot")
vi_classif_rf <- variable_importance(explainer_classif_rf, loss_function = loss_root_mean_square)
vi_classif_glm <- variable_importance(explainer_classif_glm, loss_function = loss_root_mean_square)
vi_classif_svm <- variable_importance(explainer_classif_svm, loss_function = loss_root_mean_square)
plot(vi_classif_rf, vi_classif_glm, vi_classif_svm)
pdp_classif_rf <- variable_response(explainer_classif_rf, variable = "pH", type = "pdp")
pdp_classif_glm <- variable_response(explainer_classif_glm, variable = "pH", type = "pdp")
pdp_classif_svm <- variable_response(explainer_classif_svm, variable = "pH", type = "pdp")
plot(pdp_classif_rf, pdp_classif_glm, pdp_classif_svm)
ale_classif_rf <- variable_response(explainer_classif_rf, variable = "alcohol", type = "ale")
ale_classif_glm <- variable_response(explainer_classif_glm, variable = "alcohol", type = "ale")
ale_classif_svm <- variable_response(explainer_classif_svm, variable = "alcohol", type = "ale")
plot(ale_classif_rf, ale_classif_glm, ale_classif_svm)原文作者:;如有侵权,请联系管理员删除。