Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 关于设计度量衡的建议_Arrays_Algorithm_Language Agnostic_Metrics - Fatal编程技术网

Arrays 关于设计度量衡的建议

Arrays 关于设计度量衡的建议,arrays,algorithm,language-agnostic,metrics,Arrays,Algorithm,Language Agnostic,Metrics,我正在设计一个指标来衡量搜索词何时“含糊不清”。接近1的分数意味着它含糊不清(“Ajax”可能是一种编程语言、清洁解决方案、希腊英雄、欧洲足球俱乐部等等),接近零的分数意味着用户的意思非常清楚(“Lady Gaga”可能只意味着一件事)。这个指标的一部分是,我有一个可能的解释列表,以及根据过去数据进行解释的频率,我需要将其转换为一个介于0和1之间的数字 例如:让我们假设这个词是“猫”——在一百万次试验中,85万次用户指的是发出喵喵叫声的毛茸茸的东西,8万次他们指的是这个名字的音乐剧,其余的都是事

我正在设计一个指标来衡量搜索词何时“含糊不清”。接近1的分数意味着它含糊不清(“Ajax”可能是一种编程语言、清洁解决方案、希腊英雄、欧洲足球俱乐部等等),接近零的分数意味着用户的意思非常清楚(“Lady Gaga”可能只意味着一件事)。这个指标的一部分是,我有一个可能的解释列表,以及根据过去数据进行解释的频率,我需要将其转换为一个介于0和1之间的数字

例如:让我们假设这个词是“猫”——在一百万次试验中,85万次用户指的是发出喵喵叫声的毛茸茸的东西,8万次他们指的是这个名字的音乐剧,其余的都是事物的缩写,每一次都只指很小的次数。我会说这应该有一个较低的歧义分数,因为即使有多种可能的含义,一个是迄今为止首选的含义。相比之下,我们可以说这个词是“朋友”——在一百万次试验中,50万次用户指的是他们一直在一起的人,45万次用户指的是电视节目中的那个名字,其余的则是其他意思。这应该得到更高的歧义分数,因为不同的意思在频率上更接近


TLDR:如果我按降序对数组进行排序,我需要一种方法将快速下降到接近零的数字的数组和缓慢下降到接近一的数字的数组。如果数组为[1,0,0,0…],则应获得满分0;如果数组为[1/n,1/n,1/n…],则应获得满分1。有什么建议吗?

你想要的东西听起来与信息论中的衡量标准非常相似。它是根据每个结果的概率来衡量随机变量的不确定性。由以下公式得出:

H(X) = -sum(p(x[i]) * log( p(x[i])) )
其中
p(x[i])
i
th可能性的概率。所以在你的例子中,
p(x[i])
将是某个搜索短语对应于实际意义的概率。在cats示例中,您将有:

p(x[0]) = 850,000 / (850,000+80,000) = 0.914
p(x[1]) = 80,000 / (850,000+80,000) = 0.086
H(X) = -(0.914*log2(0.914) + 0.086*log2(0.086)) = 0.423
对于Friends的情况,您应该:(假设只有一个其他类别)

这里的数字越大意味着不确定性越大

请注意,我在这两种情况下都使用对数基数2,但如果使用等于可能性数的对数,则可以得到0到1的比例

H(X) = -(0.5*log3(0.5) + 0.45*log3(0.45) + 0.05*log3(0.05)) = 0.779
还要注意,最不明确的情况是当所有可能性都具有相同的概率时:

H(X) = -(0.33*log3(0.33) + 0.33*log3(0.33) + 0.33*log3(0.33)) = 1.0
最不含糊的情况是只有一种可能性:

H(X) = -log(1) = 0.0

因为你想让最模糊的术语接近1,你可以用
1.0-H(X)
作为你的度量。

仔细检查两件事,我会用H(X)而不是1.0-H(X),因为从你展示的例子中,H(X)=-log(1)=0.0是没有模糊的情况,H(X)=-(0.33*log3(0.33)+0.33*log3(0.33)+0.33*log3(0.33))=1.0是模糊度非常高的情况,第二,您如何知道通过在日志中使用不同的基,可以始终使数字小于1?
H(X) = -log(1) = 0.0