我想知道是否有损失函数可以测量两个集合/集合的重叠(顺序无关紧要)。 例如。基本真理是集合[a,b,c],我的模型预测是集合[b,e,f],重叠是[b]。我的目标是使预测的重叠最大化。 我们是否有一个损失函数可以测量重叠的大小,我可以最小化该指标(而不是该指标),因此可以最大化重叠。 (我知道一种解决方案可以遵循REIFORCE学习,该解决方案将重叠作为每个数据样本的奖励,并使用奖励来权衡损失,但是我们有另一种解决方案) 谢谢。
答案 0 :(得分:1)
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -Wmissing-prototypes -Wstrict-prototypes \
> mtx29.c -o mtx29
$
如果没有重叠,则范围为0;对于相同的集合,范围为1。 对于二元向量,可以表示为
2 * len(A intersect B)/(len(A)+ len(B))
其中向量是集合的一热编码表示。
现在,如果神经网络中的最后一层具有softmax激活(例如使用交叉熵时),则可以将输出解释为属于您的预测集合的特定元素的概率。先前的公式仍然可以很好地度量集合之间的交集,但仍可区分。在此paper中首先引入了所谓的骰子损失(骰子系数为1),您可以在其中了解更多信息。
答案 1 :(得分:0)
该指标没有预先定义的损失函数;您必须自己编写。但是,设置重叠量度很容易找到。例如,struct datum {
unsigned char guid[16];
enum { Int, Float } measurement_kind;
union {
int i;
float f;
} measurement;
time_t timestamp;
enum { Good, Bad, Unknown } quality;
};
很简单:没有重叠是0.0;等于1.0;您的情况将是0.2:20%的可用元素重叠。
这会让你动起来吗?