gpt4 book ai didi

algorithm - 非线性比较排序/评分

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:59:06 28 4
gpt4 key购买 nike

我有一个数组,我想根据为数组中的每个元素分配一个分数来排序。

假设可能的分数范围是 0-100。为了获得该分数,我们将使用 2 个比较数据点,一个权重为 75,一个权重为 25。我们称它们为 valueA 和 valueB。我们会将每个值转换为分数。所以:

值A(范围= 0-10,000)
值B(范围= 0-70)
scoreA(范围 = 0 - 75)
scoreB(范围 = 0 - 25)
scoreTotal = scoreA + scoreB (0 - 100)

现在的问题是如何以非线性方式将 valueA 转置为 scoreA,并赋予更重的权重以接近最小值。我的意思是,对于 valueA,0 将是一个满分 (75),但是 20 的值将给出 37.5 的中点分数,而 100 的值将给出非常低的分数,例如 5 ,然后所有更大的东西都会趋向于 0(例如,5,000 的值本质上是 0)。理想情况下,我可以用几个数据点(比如 4 个四分位数点)设置一条曲线,然后算法将适合该曲线。或者也许最简单的解决方案是在曲线上创建一堆点(比如 10 个)并在这 10 个点中的每一个之间进行线性转置?但我希望有一个更简单的算法来实现这一点,而无需自己找出曲线上的所有点,然后不得不调整 10 多个变量。我宁愿使用 1 或 2 个输入来定义曲线的陡峭程度。可能吗?

我不需要 super 复杂或精确的东西,只需要一个简单的算法,这样就可以为接近范围的最小值赋予更大的权重,而为接近范围的最大值赋予更少的权重。希望这是有道理的。

我的统计数学太生疏了,我什至不确定这叫什么来寻找解决方案。所有那些年的微积分和统计都是徒劳的。

我在 Objective C 中实现了这个,但是任何 c-ish/java-ish 伪代码都可以。

最佳答案

您可能想尝试的功能是

max / [(log(x+2)/log(2))^N]

在您的情况下,max 是 75 或 25。 log(x+2)/log(2) 部分确保 f(0) == max(您可以替换 log(x+C)/log(C) 此处为任何 C > 0;更高的 C 将减缓曲线的下降); ^N 确定您的函数下降到 0 的速度(您可以使用函数 here 来了解正在发生的事情)

关于algorithm - 非线性比较排序/评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580585/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com