过滤时忽略数据子集

Ignore subset of data when filtering

我使用 dc.js 来分析分类算法的结果 并想过滤信心 (其他指标如精度、召回率和 f-measure 是在整个过滤数据集上计算的)。

示例:https://jsfiddle.net/bse7rfdy/6/

var conf = dc.barChart('#conf');
conf
  .dimension(ConfidenceDimension)
  .group(ConfidenceGroup)
  .x(d3.scaleLinear().domain([0.0,1.05]))
  .xAxisLabel("confidence")
  .xUnits(function(){return 20;})
  .yAxisLabel("");

由于误报的置信度始终为 0.0,因此当使用置信度条形图 select 置信度范围大于 0.0 时,它们将被过滤掉。

因此我只想在 "EvaluationResult" 不是 "false negative" 时实现对置信度的过滤。我也不想在置信度条形图中显示假阴性,而是在饼图中显示(因此它们应该保留在交叉过滤器数据集中)。 我知道我可以通过使用假组删除 0.0 条,但是当我在置信条形图上进行过滤时,应用了过滤器并删除了 "false negative"(例如 select 范围从 0.5 到 0.6 ).

实际上,我需要以仅在 "EvaluationResult" !== "false negative".[= 时才应用置信范围(select 由用户编辑)的方式修改过滤器12=]

这可能吗?

感谢 fiddle,这对回答问题很有帮助。

您可以通过为图表指定 filterHandler 来执行此操作。

结果有点奇怪,因为饼图总是会显示相同数量的假阴性,而其他切片的大小会发生变化。

function filter_range_ignore_zeroes(dimension, filters) {
  if(filters.length === 0) {
    dimension.filter(null);
    return
  }
  const filter = filters[0],
    rf = dc.filters.RangedFilter(filter[0],filter[1]);
  dimension.filterFunction(k => k===0 || rf.isFiltered(k));
  return filters;
}
conf.filterHandler(filter_range_ignore_zeroes);

处理程序有两种情况:如果没有过滤器处于活动状态,它会重置维度过滤器。

否则,它会在维度上安装一个过滤器函数,该函数接受零,但在其他情况下委托给默认 dc.filters.RangedFilter 行为。

Fork of your fiddle.

[您没有对这个 fiddle 置信度,因此条形重叠并变为 1.0,但我认为您在实际的仪表板中可以正常工作。]