一维数据中的阈值

我有一组使用某种字符串匹配方法计算的两个文本之间的相似度分数similarity_scores。我手动添加了actual_value来显示这些文本是否确实相似。是否有统计学的方法可以找到similarity scrore的阈值?

similarity_scores   actual_value1.0 11.0 11.0 11.0 10.99    10.99    10.99    10.989   10.944   10.944   10.941   10.941   10.941   10.941   10.941   00.934   00.933   00.933   10.88    10.784   00.727   00.727   00.714   00.714   10.714   00.714   00.711   00.711   00.707   00.707   00.696   00.696   00.696   00.696   0

回答:

确定特定分类在文档检索中的表现好坏的一个常用方法是使用精确度和召回率值。在你的例子中,对于给定的阈值[1]

精确度告诉你阈值以上的文档中有多少百分比被手动标记为1,即,

number of documents above the threshold tagged 1------------------------------------------------    number of documents above the threshold

召回率告诉你标记为1的文档中有多少百分比在阈值以上:

number of documents above the threshold tagged 1------------------------------------------------         number of documents tagged 1

在你提供的例子中,你可以为每个可能的阈值计算这些值,但只有在零和一的序列之间发生转换的点才有意义,所以我只会查看这些点:

1.0 11.0 11.0 11.0 10.99    10.99    10.99    10.989   10.944   10.944   1 TH=0.944 #1's=10; #0's=00.941   10.941   10.941   10.941   10.941   0 TH=0.941 #1's=14; #0's=10.934   00.933   00.933   1 TH=0.933 #1's=15; #0's=30.88    1 TH=0.880 #1's=16; #0's=30.784   00.727   00.727   00.714   00.714   10.714   00.714   0 TH=0.714 #1's=17; #0's=90.711   00.711   00.707   00.707   00.696   00.696   00.696   00.696   0

标记为1的文档总数为17

因此,对于这5个可能的阈值TH,我们有precisionrecall如下:

TH = 0.944    precision = 10/10       = 1.000    recall = 10/17          = 0.588TH = 0.941    precision = 14/15       = 0.933    recall = 14/17          = 0.824TH = 0.933    precision = 15/18       = 0.833    recall = 15/17          = 0.882TH = 0.880    precision = 16/19       = 0.842    recall = 16/17          = 0.941TH = 0.714    precision = 17/26       = 0.654    recall = 17/17          = 1.000

接下来如何使用这些值在很大程度上取决于你的数据以及结果对假阴性或假阳性的敏感程度。例如,如果你想尽可能减少假阳性,你可以选择阈值TH = 0.941甚至TH = 0.944

如果你想平衡精确度和召回率,你可能想要选择TH = 0.880,因为这两个指标都比上一个阈值有所提高,并且精确度比下一个阈值好得多。这是一种相当主观的方法,但我们可以通过使用F度量来一定程度上自动化这一过程。特别是,我将使用F1-measure,但你可以找到适合你数据的度量方法。

F1-measure定义为:

F1 = 2 * precision * recall         ------------------         precision + recall

使用上面的数字我们得到:

TH = 0.944   F1 = 2*1.000*0.588/1.000+0.588 = 0.741TH = 0.941   F1 = 2*0.933*0.824/0.933+0.824 = 0.875TH = 0.933   F1 = 2*0.833*0.882/0.833+0.882 = 0.857TH = 0.880   F1 = 2*0.842*0.941/0.842+0.941 = 0.889TH = 0.714   F1 = 2*0.654*1.000/0.654+1.000 = 0.791

如你所见,根据F1度量,TH=0.880得分最高,而TH=0.941紧随其后,与手动检查可能的阈值的结果非常相似。

[1] 为了澄清,我定义阈值为相似度分数大于或等于阈值的被认为是高于阈值,而相似度分数严格小于阈值的被认为是低于阈值。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注