朴素贝叶斯-执行Python和RM:不同的AUC
lionelderkrikor
主持人,RapidMiner认证分析师,会员职位:1195年独角兽
你好,
我继续用NB模型进行RM/Execute Python的实验。
对不起,但我觉得有必要向你呼吁:
mschmitz,即模型RM和执行Python的数值示例。
事实上,除了.....之外,我在两个模型中检索到严格相同的评分结果(准确率、加权平均召回率、加权平均精度、召回率(正类否/yes)、精度(正类否/yes))对于AUC:
AUC (RM) = 0.942
AUC(Python) = 0.883
我想AUC是从ROC曲线计算出来的。
但它是如何计算的呢?如何解释这种差异?
过程如下:
<?xml version="1.0" encoding="UTF-8"?> <过程version = " 8.0.001”>
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
<列出关键= " comparison_groups " / >
< /操作符>
< /操作符>
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>
> < /过程
< /操作符>
> < /过程
谢谢你,
最好的问候,
莱昂内尔
0
最佳答案
-
MartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3367年RM数据科学家
我认为主要的区别之一是这句话:
NB_Calib = CalibratedClassifierCV(base_estimator = NB,method = 'sigmoid')
我不确定它到底有什么作用,但它改变了信心。RM在X-Val中没有这样做。因此,预计会得到不同的结果。
对AUC本身更公平的比较是使用在RM中评分的示例集,并在Python和RM中计算AUC。在计算AUC的方法上总会有细微的差别——但是对于这个问题,你们的差别有点大。我希望上面这条线对差异的影响更大。
欢呼,
马丁
- RapidMin乐鱼平台进入er数据科学服务主管
德国多特蒙德5
答案
这可能与处理关系的方式有关,因为在计算ROC/AUC时有多种选择,并不是所有软件都使用相同的方法。你要么必须深入了解python与RapidMiner中ROC/AUC计算的细节(通过github上的java代码),或者可能有一个开发人员会加入进来,因为他们已经知道答案了:-)
Lindon合资企业
乐鱼平台进入来自认证RapidMiner专家的数据科学咨询
嗨@mschmitz
这里有两个要素:
1.概率校准:
最近,在我比较Python/RM的实验中,我对
的确,首先,Python中模型(SVM)计算出的置信度是异常的(对于预测类,对于二进制问题,置信度< 0.5 !!??? ?)经过调查,我发现这个python类似乎可以提高分类器置信度的相关性。因此,我建立了一个SVM模型(python/RM严格相同),并使用这个类在python中计算新的置信度:与RM不同。
进一步说:
http://scikit-learn.org/stable/modules/calibration.html
为了确认,在NB模型下,在接下来的过程中,我也用Execute Python应用了上面的类:“Execute Python”中的置信度确实不同于RM的置信度。(训练样例集Chapter09DataSet_Training.csv(见附件)
2.ROC曲线:
与此同时,我用Python构建了ROC曲线,它很奇怪:
Python只使用一个点来创建ROC。下面是这个ROC的截图:
NB ROC蟒蛇曲线
而RM使用更多的点:
NB_ROC_RM曲线
在这两种情况下考虑的点数是不一样的。RM比Python更准确,然后
两条曲线的“形状”不同,曲线下面积也不同。对我来说,至少有一个“bug”
Python中的简化/缺乏精度。
最好的问候,
莱昂内尔