“寻找阈值”的基本算法是什么?

johnny5550822"class=johnny5550822 成员职位:3.贡献我
2018年11月编辑 帮助

我理解“寻找阈值”操作符使用ROC来确定最佳阈值。但是,它使用什么样的算法来选择阈值呢?例如,(1)优化准确率和召回率,或(2)这样的内容:http://stats.stackexchange.com/questions/29719/how-to-determine-best-cutoff-point-and-its-confidence-interval-using-roc-curve-i(三)其他

谢谢!

标记:

最佳答案

答案

  • johnny5550822"class=johnny5550822 成员职位:3.贡献我

    太好了,谢谢。让我看看!

  • johnny5550822"class=johnny5550822 成员职位:3.贡献我

    我试图理解“公共ROCData createROCData”方法中的代码,但我不太理解它用来确定最佳阈值的方法。有什么论文作为依据吗?

    代码在:

    https://github.com/rapidminer/rapidminer-studio/blob/85d3bee36c026a70580075092ed85ac517369e8e/src/main/java/com/rapidminer/tools/math/ROCDataGenerator.java

  • SGolbert"class=SGolbert RapidMiner注册分析师、会员职位:344独角兽
    2019年4月编辑
    你好,

    我重写这篇文章是因为我不得不使用查找阈值,但它并没有像我期望的那样运行。在给出错误分类的两个代价之后,它并没有返回一个最优阈值。我必须将其中一个成本乘以10才能获得更好的阈值。我看过Java代码,但是像往常一样,要知道发生了什么非常耗时。所以我只是给一个警告,它可能是错误的。一般来说,回答“看一下Java代码”并不是一个很好的答案,我们需要对每个方法都有更好的参考。


    下面是我使用的过程:

    <?xml version="1.0" encoding="UTF-8"?> <过程version = " 9.2.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文







    <过程扩展= " true " >


    < /操作符>








    <过程扩展= " true " >





















    <列出关键= " beta_constraints " / >

    <列出关键= " expert_parameters " / >
    < /操作符>


















    <列出关键= " expert_parameters " / >
    < /操作符>


    <枚举关键= " hidden_layer_sizes " >


    < /枚举>
    <枚举关键= " hidden_dropout_ratios " / >




























    <列出关键= " expert_parameters " / >
    <列出关键= " expert_parameters_ " / >
    < /操作符>


    <列出关键= " application_parameters " / >

    < /操作符>







    < /操作符>











    > < /过程
    <过程扩展= " true " >

    <列出关键= " application_parameters " / >

    < /操作符>





    <枚举关键= " class_order_definition " / >
    < /操作符>

























    < /操作符>

















    将在Training步骤中创建的模型应用于当前测试集(10%)。<br/>对性能进行评估并发送给操作员结果。
    > < /过程
    评估决策树模型的交叉验证。
    < /操作符>







    > < /过程
    < /操作符>
    > < /过程



    我还尝试在没有交叉验证的情况下优化阈值,即使对于训练数据,它也没有给出最好的阈值!


    让我们再来谈谈其他话题,可以对算子工具箱中的优化阈值算子进行增强,以接受其他性能度量或接受错误分类代价。

    问候,
    塞巴斯蒂安。

  • lionelderkrikor"class=lionelderkrikor 主持人,RapidMiner认证分析师,会员职位:1195年独角兽
    @SGolbert

    我无法重现你在《泰坦尼克号》数据集上观察到的东西。
    您能否分享您的数据,具体说明:
    ——你观察到的。
    -你所期望的。

    谢谢你,

    问候,

    莱昂内尔
  • MartinLiebig"class=MartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3362年RM数据科学家
    @SGolbert
    不要用工具箱的那个:知道了。我计划添加一个带有子流程的版本,您可以在其中交付自定义性能度量。但是——时间和往常一样……

    BR,
    马丁
    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
  • SGolbert"class=SGolbert RapidMiner注册分析师、会员职位:344独角兽
    你好,

    很抱歉回复晚了。我找到了我使用的过程和数据:

    <?xml version="1.0" encoding="UTF-8"?> <过程version = " 9.2.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏>
    宏观> <
    <键> cost_first关键> < /
    <价值> 25 < /值>
    宏观> < /
    宏观> <
    <键> cost_second关键> < /
    <值> 10 > < /价值
    宏观> < /
    < /宏>
    > < /上下文







    <过程扩展= " true " >


    < /操作符>





















    <列出关键= " beta_constraints " / >

    <列出关键= " expert_parameters " / >
    < /操作符>


    < /操作符>


    <列出关键= " application_parameters " / >

    < /操作符>

    <列出关键= " application_parameters " / >

    < /操作符>







    在这里定义成本
    < /操作符>




    <参数key="attribute_name" value="预测(欺诈)"" / >

    < /操作符>


























    < /操作符>



    <枚举关键= " class_order_definition " / >
    按原始成本计算
    < /操作符>


























    分类失败的尝试成本:25 (original)和250<br/><br/>在宏cost_first定义
    > < /过程
    < /操作符>
    > < /过程


    此过程不使用交叉验证,但交叉验证的结果是相同的(在这种情况下,意外行为可能是由于对未见过的数据应用模型引起的,因此我在训练集上进行测试以捕获错误)。


    问题很简单,我的错误分类成本是25(没有欺诈)和10(欺诈)。实际上,对忠实客户进行错误分类的代价比对欺诈客户进行分类的代价更高。我在操作符Find Threshold中定义了这些成本,然后用Performance (cost)评估结果。


    问题是,当我在Find Threshold中使用cost1 = 250而不是cost1 = 25时,我会得到更好的结果。如果你能告诉我为什么会这样,我将非常感激!


    亲切的问候,

    塞巴斯蒂安。


    sgenzer"class=
登录注册置评。