python - 一维数据中的阈值

标签 python machine-learning statistics

我有一个使用某种字符串匹配方法的两个文本之间的相似度分数similarity_scores列表。我手动添加了 actual_value 以显示文本是否确实相似。有没有任何统计方法可以找到超过相似度得分的阈值?

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值(value)观。在您的示例中,对于给定阈值[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,我们的精度召回 如下:

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/

相关文章:

php - 投票加权算法

python - 使用正则表达式解析维基百科链接

python - 将绘图添加到 pdf 文件

machine-learning - 机器学习-SVM特征融合技术

r - 尝试计算 R 中装袋分类器的误分类错误,收到错误消息

matlab - 给定四分位数,我如何使用 MATLAB、matplotlib、gnuplot 或其他一些软件包绘制盒须?

r - XGboost 模型始终获得 100% 的准确率?

python - Keras 二元分类 - Sigmoid 激活函数

python - Python 中的图像处理——无需将整个图像加载到内存中

python - 弹性网是如何使用的?