我有成对的对象,例如
A = { L, M, N, P } = { <"Lll", 47, 0.004>, <"Mm", 60, 0.95>, <"Nnnn", 33, 0.2892>, <"P", 47, 0.0125> }
B = { l, m, n, o } = { <"l", 46, 0.004>, <"m", 0, 0.95>, <"nn", 33, 0.2892>, <"oOo", 33, 0.5773> }
...我希望自动训练基于已知良好数据的算法,以了解如何将集合成员链接为
{ <L, l>, <M, m>, <N, n>, <?, o>, <P, ?> }
...最多只有一个匹配任何一个元素的每个元素。集合不必具有相同的大小并且不保证它们的重叠 - 可能没有匹配,也许所有匹配,可能是匹配和不匹配的混合。但是 预计在很多情况下都是人类可识别的匹配,并且计算机应该接近它。
H(a, b, w1, w2, w3)
将来自<a1, a2, a3>
的{{1}}和来自A
的{{1}}的{{1}}分为<b1, b2, b3>
B
,{ {1}}和f1(a1, b1) * w1 + f2(a2, b2) * w2 + f3(a3, b3) * w3
是手工制作的,f1
,f2
和f3
是参数化权重。我按照他们的分数对所有对w1
进行排序,然后选择其中没有一个成员已经由更高得分的对表示的对。我使用粗略的爬坡来训练重量,以便得到的对映射为训练数据所期望的。完美的加权配置具有阈值w2
,其从不正确的配对得分描绘正确的配对得分w3
。该算法常规地在几百或几千次迭代之后找到完美的配置,用于我的训练数据约为800 A × B
组,总共2500对8-uples(而不是所示的3-uples)。我还没有给它一个验证数据集,以找出这种方法过度拟合的严重程度。
我对这个问题的固定方面的硬编码处理感到不满意。我只能想象用于评分对的机器学习技术,但随后的映射是手工制作的,并且可能不像将集映射视为一个整体的理想解决方案那样聪明。因为机器学习部分并不考虑整套,所以在我看来,它错过了可用于做出更好决策的一些信息。
我认为上面的插图可以重构为首先将t
中的所有对作为S_ab
(对于n元组)和然后使用(A, B)
每个S_ab对匹配和不匹配的神经网络训练。这考虑了一对并输出匹配/不匹配,并且没有考虑整个集合。
我的理解是,神经网络不会处理可变大小的输入,但也许我可以为A × B
和S_ab = < f1(a1, b1), f2(a2, b2), ..., fn(an, bn) >
选择一个上限,并找到一些未使用的填充的中性编码节点。并且输出可以是沿着轴的匹配矩阵,其沿着侧面指向[n, ?, 1]
的元素,并且沿着底部指向||A||
。但是那时网仍然会对元素的顺序敏感,不是吗?
是否有机器学习技术能够以这种方式可靠地将集合映射到集合?它以明显的方式与记录联系有关。这是一个约束满足问题,因为每个元素最多可以匹配一次。如果结果的人为修正可以作为反馈以改进未来结果,那将是理想的。如果你有办法,可以请我为我拼写,因为我不熟悉机器学习概念。