作者: 3mv229dzgahjmg1u6b

在某次商品促销活动中,根据用户偏好相关的特征训练了一个机器学习模型,现需要对该模型进行离线评估。该模型是二分类模型,可以获取到模型在某个用户下对于商品的打分和真实的样本标签,由于样本量较大,因此模型对于不同的用户下的商品打分可能存在分值相同的情况。使用 ROC 曲线下的面积(Area Under Curve)进行模型评估,因此需要计算通用模型 AUC。AUC 通常用来表示随机选出一对正负样本,分类器对于正样本的打分大于负样本打分的概率,假设一个数据集中有 M 个正样本, N 个负样本,将所有的样本按照预测值从小到大排序,也就是: 其中 rank 代表正样本在排序中的索引加一,如果排序以后某一正样本对应的索引为 1,则 rank 值为 2。如果某一机器学习给出的预测分数经过排序后为 [0.3, 0.4, 0.5, 0.6],此时对应的 rank 变为 [1, 2, 3, 4],只需要把相应正样本抽取然后根据公式计算即可。如果模型给出的预测值中存在数值一样的情况,那么排序的过程中,需要对一样的数值进行平均化处理,如果单纯只考虑预测数值不出现重复的情况,那么这种 AUC 计算的应用场景是非常局限的。如果某一机器学习模型给出的预测分数经过排序后为 [0.3, 0.4, 0.5, 0.5, 0.5, 0.5, 0.6],此时对应的 rank 变为 [1, 2, 4.5, 4.5, 4.5, 4.5, 7],其中 (3+4+5+6)/4 = 4.5。 请根据题目描述和输入、输出、补充说明的信息,完成通用 AUC 的计算。

存在中缀表达式:(2*(3-4))*5,通过下面的代码将其转换为后缀表达式,则当扫描到字符4时,栈ops中所存元素为()  /**     * 将中缀表达式转换为后缀表达式     * @param s 中缀表达式     * @return String字符串 后缀表达式     */     private String postfix(String s){         // 后缀表达式         StringBuilder sb = new StringBuilder();         Stack<Character> ops = new Stack<>();         int i = 0;         while(i < s.length()){             char c = s.charAt(i++);             if (c == ‘(‘ || c == ‘+’ || c == ‘-‘ || c == ‘*’){                 // 加一个空格是为了将操作数之间隔开                 sb.append(” “);                 pushOP(sb,c,ops);                 continue;             }             if (c == ‘)’){                 // 弹出操作符直到(                 while(ops.peek() != ‘(‘){                     sb.append(ops.pop());                 }                 ops.pop();                 continue;             }             sb.append(c);         }         // 弹出栈中元素         while(!ops.isEmpty()){             sb.append(ops.pop());         }         return sb.toString();     }     private void pushOP(StringBuilder sb,char op,Stack<Character> ops){         // 栈空,或者栈顶元素为(,操作符直接放入栈中         if (ops.isEmpty() || ops.peek() == ‘(‘ || op == ‘(‘){             ops.add(op);             return;         }         char c = ops.peek();         // 栈顶操作符的优先级低于当前操作符,直接压入栈中         if (c != ‘*’ && op == ‘*’){             ops.add(op);             return;         }         // 否则,弹出栈顶元素,继续比较         c = ops.pop();         sb.append(c);         pushOP(sb,op,ops);     }

加载更多