使用R语言tree包绘制决策树ROC曲线:如何获取预测概率?
解决tree包获取分类预测概率的问题
你遇到的问题是因为predict.tree()函数默认返回的是预测类别(也就是你说的"预测响应"),而不是类别概率。要获取概率,只需要在调用predict()时指定type参数即可。
具体修改步骤:
- 当你调用
predict()时,添加type = "vector"参数,这样就会返回每个样本属于每个类别的概率矩阵:
# 假设你的测试集是dd[-learn, ],修改predict代码如下 tree.test.prob <- predict(tree.dd, newdata = dd[-learn, ], type = "vector")
- 这个矩阵的列对应你的因变量
Status的两个类别("good"和"bad"),每一行对应一个测试样本的概率值。比如你可以提取"bad"类的概率来绘制ROC曲线:
# 提取"bad"类的概率(列名取决于你的类别顺序,可通过colnames(tree.test.prob)查看) bad_prob <- tree.test.prob[, "bad"]
用概率绘制ROC曲线的示例(以pROC包为例):
如果你还没安装pROC包,先安装:
install.packages("pROC")
然后绘制ROC曲线:
library(pROC) # 构建ROC对象,response是测试集的真实标签,predictor是预测概率 roc_curve <- roc(response = dd[-learn, ]$Status, predictor = bad_prob) # 绘制ROC曲线 plot(roc_curve, main = "ROC Curve for Tree Model")
补充说明:
predict.tree()的type参数还有其他选项:type = "class"是默认值,返回预测类别;type = "tree"会返回树结构,一般用不到。- 确保你的因变量
Status是因子类型(tree包处理分类问题时要求因变量为因子),如果不是的话,可以先转换:
dd$Status <- as.factor(dd$Status)
内容的提问来源于stack exchange,提问作者ecab
相关产品推荐
相关产品推荐

