#引用自https://blog.csdn.net/qq_48321729/article/details/123241746
def calculate_net_benefit_all(thresh_group, y_label):net_benefit_all = np.array([])tn, fp, fn, tp = confusion_matrix(y_label, y_label).ravel()total = tp + tnfor thresh in thresh_group:#阈值net_benefit = (tp / total) - (tn / total) * (thresh / (1 - thresh))net_benefit_all = np.append(net_benefit_all, net_benefit)return net_benefit_all
以下是模型曲线净收益的计算公式。可以看到两者是略有区别的。
#引用自https://blog.csdn.net/qq_48321729/article/details/123241746
def calculate_net_benefit_all(thresh_group, y_label):net_benefit_all = np.array([])tn, fp, fn, tp = confusion_matrix(y_label, y_label).ravel()total = tp + tnfor thresh in thresh_group:net_benefit = (tp / total) - (tn / total) * (thresh / (1 - thresh))#公式net_benefit_all = np.append(net_benefit_all, net_benefit)return net_benefit_all
目前为止,官方只给出了线性模型(逻辑回归和COX)的DCA绘制方法,这一点是有点奇怪的,可能有些方面不适合向随机森林这样的模型(可能是其中的某些关键元素只能用线性模型来解释),但是从技术层面来看,各种模型都可以制作DCA曲线。
考虑到上面所述“奇怪”的情况,同时绘制出线性模型的DCA作为参考,可能是比较妥当的。
制作中遇到一个问题,就是“该使用全部数据,训练数据集还是测试数据集来绘制DCA曲线呢?”。对照线性模型的情况来看,应该使用全部数据集来绘制DCA曲线,那麽我们就要使用训练出的模型来预测整个数据集的概率,这会产生overfit的疑虑,所以目前觉得使用交叉验证的方法来获得整个数据集的预测概率是比较妥当的。
这里使用了rmda官方的包作为基础绘制,在上面添加random forest 的DCA曲线的方式,比其它的方式更加简洁。
绘制的详细代码可以参照链接(https://www.heywhale.com/notebooks/run/6413b2941c8c8b518ba04e52?label=62412710e2ca7e0017eaff45&image=63aa8edc230abea285abb899¬ebook=6413b294530f9c6c19267ed6&beta=1),一键运行。