过滤时忽略数据子集

时间:2019-08-20 14:27:10

标签: dc.js

我使用dc.js来分析分类算法的结果 并希望过滤信心 (精度,召回率和f度量等其他指标是在整个过滤后的数据集上计算的。)

示例: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,因此当使用置信度条形图选择大于0.0的置信度范围时,它们将被过滤。

因此,仅在“ EvaluationResult”不是“ false negative”时,我才想对置信度进行过滤。我也不想在置信度条形图中显示假阴性,而是在饼图中显示(因此它们应保留为交叉过滤器数据集)。 我知道我可以使用伪造的组来删除0.0条,但是当我在置信度条形图上进行过滤时,会应用拟合器,并且会删除“假负数”(例如,选择0.5到0.6的范围)。

实际上,我需要以仅当“ EvaluationResult”!==“ false negative”时应用置信范围(由用户选择)的方式来修改过滤器。

有可能吗?

1 个答案:

答案 0 :(得分:0)

感谢小提琴,对回答问题有很大帮助。

您可以通过为图表指定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.

[您不是要对这种提琴进行分类,所以条形图重叠并达到1.0,但我认为您可以在实际的仪表板中使用它。]