假设我们有两个信号空间S1和S2,每个信号空间包含数百个甚至数千个信号。 S1是给定系统(飞机,汽车等)发送或接收的所有信号,S2是系统内部子系统的软件模块发送或接收的所有信号。每个信号都有一组特定的数十种属性,例如信号名称,周期时间,电压等。
现在,我要检查S1中的每个信号在S2中是否至少具有一种表示形式,这意味着S1中的信号的所有属性都等于S2中的信号的所有属性。起初听起来很容易,因为可以遍历信号及其属性,并检查某处是否存在等效信号。但是事实证明,在两侧(S1和S2信号)可能有错误的规格,因此无法识别属于同一对的信号对。
例:
K1 = {名称:= CAN_1234_UHV;电压:= 0.8 mV;周期= 100ms}
D1 = {名称:= CAN_1234_UH;电压:= 0.8mV;周期= 100毫秒}
尽管存在一些拼写错误,但人类的蜜蜂很容易看出这两个信号可能很好地融合在一起。
因此,我所做的是设计一种算法,该算法计算每个属性的字符串的距离度量,将相似性映射到该特定属性等于另一个信号的相同属性的某种可能性,计算平均值并将其归类为如果此概率达到某个阈值,则等于。
这产生了可怕的结果,因为可以将两个信号归类为相等,因为某些属性的值在信号空间中非常常见。因此,下一步将是对这些属性进行加权(信号名称比周期时间更适合标识信号)。
对于我来说,整个过程似乎很武断,因为我真的不知道会产生良好结果的概率和权重。因此,我感觉可以通过机器学习算法来解决,因为它可以从训练数据中得出概率和权重。
因此,总而言之,使用机器学习算法将信号识别为“足够相似”以将其分类为相等是可行的。我知道这个问题一般无法回答,我对“直觉”和“向正确的方向推”更感兴趣。
提前致谢
最佳答案
解决方案1-您可以使用Apache Solr。
您可以将所有信号保存(索引)在Apache Solr中,其中信号的每个属性都将存储为Solr的字段。
Example:
K1 = {Name:= CAN_1234_UHV; Voltage:= 0.8 mV; Cycle=100ms}
D1 = {Name:= CAN_1234_UH; Voltage:= 0.8mV; Cycle=100 ms}
K1 and D1 is a document in Solr. Name, Voltage, Cycle will be Solr's Field.
然后,您可以使用Solr的MoreLikeThis功能来识别类似的信号。
这产生了可怕的结果,因为可以将两个信号归类为相等,因为某些属性的值在信号空间中非常常见。因此,下一步将是对这些属性进行加权(信号名称比周期时间更适合标识信号)。
为此,请检查下面的mlt.qf。
Solr为MoreLikeThis提供了一些通用参数,可以根据您的需要进行调整。
mlt.fl指定用于相似性的字段。如果可能的话,这些
应该已经存储了termVectors。
mlt.mintf指定最低期限
频率,低于此频率的术语将在
源文件。
mlt.mindf指定最小文档频率,
被忽略的单词出现的频率
至少有这么多文件。
mlt.maxdf指定最大文档数
频率,出现单词时将被忽略的频率
在许多文件之外。
mlt.minwl设置最小字
长度,在此长度以下单词将被忽略。
mlt.maxwl设置最大值
字长,超过此长度将被忽略。
mlt.maxqt设置
任何生成的查询词中包含的最大查询词数
查询。
mlt.maxntp设置每个令牌要解析的最大令牌数
TermVector支持未存储的示例文档字段。
mlt.boost指定是否通过有趣的查询来增强查询
术语相关性。它可以是“ true”或“ false”。
mlt.qf使用与DisMaxRequestHandler所使用的格式相同的格式来查询字段及其增强。这些字段也必须在mlt.fl中指定。
解决方案2-编写自己的解决方案。
您可以使用这些算法编写针对此问题的自定义解决方案。
Levenshtein Distance-非正式地,两个单词之间的Levenshtein距离是将一个单词转换为另一个单词所需的最小单字符编辑(即插入,删除或替换)次数。
Hamming Distance-在信息论中,两个长度相等的字符串之间的汉明距离是相应符号不同的位置数。
Smith–Waterman-algorithm-Smith-Waterman算法执行局部序列比对;也就是说,用于确定两个字符串或核苷酸或蛋白质序列之间的相似区域。 Smith-Waterman算法无需查看总序列,而是比较所有可能长度的片段并优化相似性度量。
Sørensen–Dice Coefficient-是用于比较两个样本的相似性的统计量
关于machine-learning - “足够相似”对象的度量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39566172/