我从事机器学习应用程序。当我需要使用数组和哈希值时,我使用了underscorejs。
问题在于,在ML中有一种cross-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. / p>
如果使用下划线和javascript有任何优雅的方法吗?
有一点很重要,有时我需要进行这种聚合,当折叠的哈希值如下
{
label1:{ 'F1': 0.8,
'Precision': 0.7,
'Recall':0.9
},
label2:{ 'F1': 0.8,
'Precision': 0.7,
'Recall':0.9
},
...
}
任务是相同的,F1,Precision,Recall的平均值,适用于所有折叠中的每个标签。
目前我有一些丑陋的解决方案可以多次运行所有哈希,感谢您的帮助,谢谢。
答案 0 :(得分:2)
如果是数组,只需使用数组即可。如果它不是数组,请使用_.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})
这会返回一个包含F1
,Precision
和Recall
的哈希值,它们是和,而count
是对象的数量。从那些人那里获得平均值应该很容易。