一种简化决策树ROC的方法

本方法来自论文:Learning Decision Trees Using the Area Under the ROC Curve

以下仅作为个人的一些理解,如有谬误,忘不吝赐教。
该方法可普遍用于两个classes,多个leaves的决策树。

论文第二部分主要告诉我们如何寻找最优决策树的labellings,并且通过这个最优的labellings可以直接画出简化后的决策树的ROC,而不用寻找所有可能的labellings(所有可能个数为2^n,2为classes数量,n为leaves的数量)。并且证明了:
1. labelling是最小的成本根据训练集合(training set)
2.任意成本矩阵(稍后会解释)属于最优labellings 的集合。
3.在三个labellings里(Si-1,Si,Si+1),Si 对应了ROC空间里的点。
4.如果两个labelling是相同时,不需要考虑这个点在ROC空间上。
5.如果在决策树的叶子具有相同的局部正精度(local positive accuracy)(稍后会解释),我们可以删除这个重复的叶子。
Tip: Labelling is a set of assignments to each tree leaf

工程上来说不需要论文里的证明,下面我们将通过例子来展示该方法是如何运用的。
Example:假设我们有一个两类(+和-)三叶子(leaf1,leaf2,leaf3)的决策树,训练数据的分布如表所示:

第一步:重新排列叶子
排列原则是根据局部正精度(local positive accuracy)表示为:  

上表中三个叶子的局部正精度分别为:leaf1 = 3/(3+5), leaf2 = 5/(5+1),leaf3=4/(4+2)
按照从大到小顺序重新排列叶子得到如下新表:
第二步:定义最优labellings = {S0,S1,…Sn}(n是叶子的数量),新表如下:

第三步:定义每个labelling为Si=,Si (0≤i≤n) 

如果j≤i, =(j,+) 即第j个叶子为+。 如果j>i,=(j,-) 即第j个叶子为-。

计算所有的Si并且更新表格如下:

第四步:定义成本矩阵(Cost matrices)  
矩阵上面两个分别代表真实值是+和-,左边是预测值的+和-。
C++表示预测值是+并且真实值也是+,即true positive,
C+-表示预测值是+但是真实值是-
C-+表示预测值是-但是真实值是+,即false positive,
C--表示预测值是-并且真实值也是-
并且计算FPR(false positive rate)即: ,TPR(true positive rate)即: 

预测值就是第三步中的Si,预测值已经通过第三步给出来了,结果详见第三步下边的表格。
下面我们就可以根据不同的预测值来选择的门限(threshold)来更新成本矩阵:

第五步:以FRP为横坐标,TPR为纵坐标。绘制出ROC点,连接每个点就画出了ROC曲线。
下图是论文中的图,但不匹配计算出的FPR,TPR。方法是对的,但不知是否忽略了什么,欢迎各位提建议指正。

原文发于博客:http://blog.csdn.net/u013787595
GMX 2014.3.22  US Eastern Time 


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,根据提供的引用内容,没有直接给出决策树ROC曲线代码。但是,我们可以提供一些相关的信息和代码示例来帮助您更好地理解决策树ROC曲线。 决策树一种基于树结构的监督学习算法,用于分类和回归分析。它通过对数据集进行反复划分,将数据集划分为多个小的子集,直到子集中的数据可以被单独分类或回归。决策树的主要优点是易于理解和解释,可以处理缺失数据和异常值,并且可以处理非线性关系。 ROC曲线是一种用于评估分类模型性能的工具。ROC曲线显示了真阳性率(TPR)与假阳性率(FPR)之间的关系,其中TPR是正确预测为正类的样本数与实际正类样本数之比,FPR是错误预测为正类的样本数与实际负类样本数之比。ROC曲线下面积(AUC)是一个常用的性能指标,AUC越接近1,模型的性能越好。 以下是一个使用Python scikit-learn库中的决策树ROC曲线的示例代码: ```python from sklearn.datasets import load_breast_cancer from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import roc_curve, auc from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt # 加载数据集 data = load_breast_cancer() X = data.data y = data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 训练决策树模型 clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict_proba(X_test)[:, 1] # 计算ROC曲线和AUC fpr, tpr, thresholds = roc_curve(y_test, y_pred) roc_auc = auc(fpr, tpr) # 绘制ROC曲线 plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值