【问题标题】:Rescaling numbers between 0 and 1在 0 和 1 之间重新调整数字
【发布时间】:2011-08-29 17:38:33
【问题描述】:

我有以下数字列表:

3.16、4.72、6.44、8.25、3.76、4.87、5.76、6.5、7.32

我必须重新调整 (0, 1) 之间的数字,这样:

1)最小的数得到最接近0但不是0的值。

2) 最大的数得到最接近 1 但不是 1 的值。

在我的研究中,0 表示完全合适,1 表示完全不合适,这就是为什么我想将它们排除在最终结果之外。

任何帮助将不胜感激。

【问题讨论】:

  • 您在这方面有什么问题?
  • 您想要线性变换还是仿射变换? IE。 a*x,还是a*x + b?
  • 在我看来,最简单的方法是(分配max = 8.25),您的值将类似于x' = x / (max + epsilon),其中x 是您的原始值(3.16、4.72) , 和 x' 缩放值,以及 epsilon 一些小的非零数字(以便 max / (max + epsilon) != 1)。从本质上讲,您将根据max 对您的数据集进行规范化,我相信这是以您想要的方式重新缩放的定义。
  • 完全正确。这就是我需要的。非常感谢您提供的所有帮助。

标签: rescale


【解决方案1】:

这种转换有帮助吗?

V' = 1/(1 + e^(-V)) -------- Logistic function


域 - 实数,因此 V 可以采用任何实数值
Range - (0,1) 以便 0<V'<1V'<>0V'<>1

【讨论】:

    【解决方案2】:

    使用仿射变换的 Python 快速示例:

     list = [3.16, 4.72, 6.44, 8.25, 3.76, 4.87, 5.76, 6.5, 7.32]
    
     # find the minimum value and range, and add 1% padding
     range_value = max(list) - min(list)
     range_value = range_value + range_value/50
     min_value = min(list) - range_value/100     
    
     # subtract the minimum value and divide by the range
     for index, item in enumerate(list):
        list[index] = (item - min_value) / range_value
    
     print list
    

    给出结果:

     [0.010000000000000026, 0.310473824107246, 0.64176547632805592, 0.99039215686274518, 0.1255668554258639, 0.33936553796371205, 0.51078970684541003, 0.65332216187064218, 0.81126353095265591]
    

    当然,您可以根据需要将填充量更改为尽可能小 - 对于范围,您需要将最小值添加两倍,因为您需要将填充添加到范围的每一端。

    【讨论】:

      【解决方案3】:

      我不确定我是否理解您的问题,但是找到集合中的最大数字,然后将集合中的每个数字除以该最大数字将为您提供合适的范围。

      【讨论】:

      • 使用您所说的公式:8.25 是列表中的最大值。如果我将每个数字除以最大值,我将得到 8.25 的重新缩放值 1。我需要重新调整后的值 8.25 接近 1 但不是 1(例如 0.99、0.999 等)
      • 是的...所以您可以使用该数字来获得合适的范围。当然,您的最高数字将是 1,但您可以使用 epsilon 值来解决此问题。
      • 谢谢。这就是我一直在寻找的。​​span>
      【解决方案4】:

      您可能需要仿射映射(即y = mx + c 的形式),这样:

      not_quite_0 = m*min_val + c
      not_quite_1 = m*max_val + c
      

      解出这些方程,你得到:

      m = (not_quite_1 - not_quite_0) / (max_val - min_val)
      c = (max_val*not_quite_0 - min_val*not_quite_1) / (max_val - min_val)
      

      您可能可以定义not_quite_0 = 0 + epsnot_quite_1 = 1 - eps,其中eps 是一个非常非常小的值。

      【讨论】:

        猜你喜欢
        • 2017-07-19
        • 2017-01-03
        • 2021-09-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2012-04-10
        相关资源
        最近更新 更多