如何规范化0到100之间的任何给定数字?
min为0且max没有边界(这是关键字的搜索量)。
由于我没有max。的定义, normalized = (x-min(x))/(max(x)-min(x))
将无效
答案 0 :(得分:1)
代数地,你可以从一些具有极点的函数开始,例如: tan
,并使用其倒数atan
。该倒数永远不会超过给定的极限,即在这种情况下为π/ 2。然后你可以使用那种
f(x) = 100 * 2/π * atan(x - min)
如果这不能为小输入产生“好”结果,您可能需要预处理输入:
f(x) = 100 * 2/π * atan(a*(x - min))
对于一些适当选择的a
。使a
大于1会增加值,而对于0 < a < 1
,您会获得更小的值。根据评论,后者是你最想要的。
你甚至可以在那里添加一个力量:
f(x) = 100 * 2/π * atan(a*(x - min)^b) = 100 * 2/π * atan(pow(a*(x - min), b))
表示某些正参数b
。通过调整两个参数,您可以更自由地根据需要调整功能。但是,要确定什么是合适的,您可能必须预先决定您对各种输入的期望值。有点像this question,虽然输入范围不是无限制的。
如果您更喜欢几何方法:您可以将输入想象为 x 轴的正半部分,即从(0,0)到(∞,0)的光线。然后想象一个圆心,中心(0,1)和半径1坐在那条线上。如果将点(0,2)与光线上的任何点连接,则连接线将在另一个点与圆相交。这样,您可以将光线映射到圆的右半部分。现在从圆的中心看到的角度,或圆上的点的 y 坐标,或者像这样的任何其他有限值,正确地标准化输入和输出,你有一个功能符合您的要求。你也可以为此制定一个公式,atan
可能会在那里发挥作用。