循环Bug和最佳交付

marcin_blachnikmarcin_blachnik 成员职位:61大师
2018年11月编辑 帮助

我注意到,如果交付给“循环和交付最佳”操作符的性能之一缺失(NAN被交付),那么该操作符将其视为最佳性能并在输出时返回它。下面是一个示例流程:

> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文

<过程扩展= " true " >


< /操作符>




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

<过程扩展= " true " >




< /操作符>










> < /过程
< /操作符>








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

最好的

Thomas_Ott

答案

  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,成员职位:1761年独角兽

    您可以重新粘贴XML或将其导出为RMP文件吗?我无法让它繁衍。

  • marcin_blachnikmarcin_blachnik 成员职位:61大师

    对不起

    有一个标签不见了:

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







    <过程扩展= " true " >


    < /操作符>





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




    <过程扩展= " true " >






    < /操作符>










    > < /过程
    < /操作符>








    > < /过程
    < /操作符>
    > < /过程
  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,成员职位:1761年独角兽

    嗯。我不确定这是否是一个“bug bug”,因为您正在引入NaN或缺少输入。也许它应该给你一个警告,因为有一个缺失的值,它可能无法正常工作。如果我没有保持良好的数据质量,预测性能操作符也会发生这种情况。

  • marcin_blachnikmarcin_blachnik 成员职位:61大师

    嗯,

    我只是想让你注意一下对"物超所值"的奇怪解释。

    顺便问一下,有没有可用的bug追踪器?

    Thomas_Ott
  • MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3329年RM数据科学家

    嗨戈,

    我检查了我们的代码。它是/rapidminer/operator/performance/ performancecriterion。java第102行:

    @Override
    public int compareTo(performancecriteria) {
    if (!this.getClass().equals(o.getClass())) {
    抛出新的RuntimeException("不匹配的标准类:" + this.getClass() + ", " + o.getClass()));

    if (! . getname ().equals(this.getName())) {
    抛出新的RuntimeException("不匹配的条件类型:" + this.getName() + ", " + o.getName()));

    return Double.compare(this.getFitness(), o.t getfitness ());

    它使用Java方法compare。看看这个,它是:

    / * *
    *比较两个指定的{@code}的值的两倍。这个标志
    返回的整数值与
    *将被调用返回的整数:
    * < >之前
    * new Double(d1).compareTo(new Double(d2))
    * < / >之前

    @paramD1第一个{@code进行比较
    @paramD2第二{@code进行比较
    @return值{@code0} if {@coded1}是
    *数值上等于{@coded2};小于的值
    * {@code0} if {@codeD1}在数值上小于
    * {@coded2};大于{的值@code0}
    * if {@codeD1}在数值上大于
    * {@coded2}。
    @since1.4
    * /
    Public static int compare(双精度d1,双精度d2) {
    If (d1 < d2)
    返回1;//两个val都不是NaN, thisVal更小
    如果(d1 > d2)
    返回1;//两个val都不是NaN, thisVal更大

    //不能使用doubleToRawLongBits,因为可能存在nan。
    long thisBits = Double.doubleToLongBits(d1);
    long anotherBits = Double.doubleToLongBits(d2);

    return (thisBits == anotherBits ?)0: //值相等
    thisBits < anotherBits ?-1: // (-0.0, 0.0) or (!南南)
    1));//(0.0, -0.0)或(NaN, !NaN)

    这就解释了这种行为。在我们自己的方法中处理nan可能是有意义的。你想要什么?NaN总是比其他任何表现都“差”?

    ~马丁

    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
    Thomas_Ott
登录注册置评。