通过键下划线聚集哈希

我在机器学习应用程序上工作。 当我需要使用数组和哈希运算时,我使用underscorejs。

问题在于,ML中有一个交叉validation的方法,当你需要计算性能的几倍。

对于每一个折叠,我有一个哈希的性能参数,如下所示

{ 'F1': 0.8, 'Precision': 0.7, 'Recall':0.9 } 

我把所有的哈希都推送到数组中,最后我有一组哈希,就像下面这样

 [ { 'F1': 0.8, 'Precision': 0.7, 'Recall':0.9 }, { 'F1': 0.5, 'Precision': 0.6, 'Recall':0.4 }, { 'F1': 0.4, 'Precision': 0.3, 'Recall':0.4 } ] 

问题是,最后我想计算散列的每个参数的平均值,即我想根据参数对所有散列进行总结,然后将每个参数除以折叠的数量,在我的情况3中。

如果有任何优雅的方式来做下划线和JavaScript?

一个重要的一点是有时候我需要做这个聚合,当这样的哈希像下面这样折叠

 { label1:{ 'F1': 0.8, 'Precision': 0.7, 'Recall':0.9 }, label2:{ 'F1': 0.8, 'Precision': 0.7, 'Recall':0.9 }, ... } 

任务是相同的,平均F1,精度,召回所有褶皱中的每个标签。

目前我有一些丑陋的解决scheme遍布所有哈希几次,我将不胜感激任何帮助,谢谢。

如果它是一个数组,只需使用该数组。 如果它不是数组,则使用_.values将其变成一个并使用它。 然后,我们可以对数据进行折叠(或reduce ):

 _.reduce(data, function(memo, obj) { return { F1: memo.F1 + obj.F1, Precision: memo.Precision + obj.Precision, Recall: memo.Recall + obj.Recall, count: memo.count + 1 }; }, {F1: 0, Precision: 0, Recall: 0, count: 0}) 

这将返回一个包含F1PrecisionRecall (这是总和)和一个包含对象数的count的散列。 从这些平均得到平均值应该是相当容易的。