我使用一些字符串匹配方法列出了两个文本之间的相似度评分similarity_scores
。我手动添加了actual_value
以显示文本是否确实相似。有什么统计方法可以找到similarity scrore
上的阈值?
similarity_scores actual_value
1.0 1
1.0 1
1.0 1
1.0 1
0.99 1
0.99 1
0.99 1
0.989 1
0.944 1
0.944 1
0.941 1
0.941 1
0.941 1
0.941 1
0.941 0
0.934 0
0.933 0
0.933 1
0.88 1
0.784 0
0.727 0
0.727 0
0.714 0
0.714 1
0.714 0
0.714 0
0.711 0
0.711 0
0.707 0
0.707 0
0.696 0
0.696 0
0.696 0
0.696 0
最佳答案
确定特定分类对文档检索的良好程度的常用方法是使用precision and recall值。在您的示例中,对于给定的阈值[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 1
1.0 1
1.0 1
1.0 1
0.99 1
0.99 1
0.99 1
0.989 1
0.944 1
0.944 1 TH=0.944 #1's=10; #0's=0
0.941 1
0.941 1
0.941 1
0.941 1
0.941 0 TH=0.941 #1's=14; #0's=1
0.934 0
0.933 0
0.933 1 TH=0.933 #1's=15; #0's=3
0.88 1 TH=0.880 #1's=16; #0's=3
0.784 0
0.727 0
0.727 0
0.714 0
0.714 1
0.714 0
0.714 0 TH=0.714 #1's=17; #0's=9
0.711 0
0.711 0
0.707 0
0.707 0
0.696 0
0.696 0
0.696 0
0.696 0
标记为
1
的文档总数为17
。因此,对于这5个可能的阈值
TH
,我们分别具有precision
和recall
:TH = 0.944
precision = 10/10 = 1.000
recall = 10/17 = 0.588
TH = 0.941
precision = 14/15 = 0.933
recall = 14/17 = 0.824
TH = 0.933
precision = 15/18 = 0.833
recall = 15/17 = 0.882
TH = 0.880
precision = 16/19 = 0.842
recall = 16/17 = 0.941
TH = 0.714
precision = 17/26 = 0.654
recall = 17/17 = 1.000
从这里开始,您对这些值的处理很大程度上取决于您的数据以及结果对假阴性或假阳性的敏感程度。例如,如果要确保尽可能少的误报,则可以将阈值设置为
TH = 0.941
甚至TH = 0.944
。如果要在精度和召回率之间取得平衡,则可能要使用
TH = 0.880
,因为这两个度量均从高于该阈值的阈值开始增加,而精度远高于其之下的阈值。这是一种相当主观的方法,但是我们可以使用F-measure在一定程度上实现自动化。特别是,我将使用F1-measure
,但是您会找到一个适合您的数据的。F1-measure
定义为:F1 = 2 * precision * recall
------------------
precision + recall
使用上面的数字,我们得到:
TH = 0.944 F1 = 2*1.000*0.588/1.000+0.588 = 0.741
TH = 0.941 F1 = 2*0.933*0.824/0.933+0.824 = 0.875
TH = 0.933 F1 = 2*0.833*0.882/0.833+0.882 = 0.857
TH = 0.880 F1 = 2*0.842*0.941/0.842+0.941 = 0.889
TH = 0.714 F1 = 2*0.654*1.000/0.654+1.000 = 0.791
如您所见,通过F1度量,
TH=0.880
排在最前面,而TH=0.941
排在后面,与手动检查可能的阈值的结果非常相似。[1]为明确起见,我定义阈值,以使大于或等于阈值的相似性分数被认为高于阈值,而严格小于阈值的相似性分数被认为低于阈值。
关于python - 一维数据中的阈值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24025494/