【问题标题】:Writing Min-Max scaler function编写 Min-Max 缩放函数
【发布时间】:2019-05-01 04:53:03
【问题描述】:

我想在 python 中编写一个用于计算 Min-Max 比例的函数,该函数返回一个列表。

x = [1, 2, 3, 4]

def normalize(x):

    for i in range(len(x)):
        return [(x[i] - min(x)) / (max(x) - min(x))]

然后调用函数:

normalize(x):

结果:

[0.0]

我期待的结果是:

[0.00, 0.33, 0.66, 1.00] 

【问题讨论】:

  • 代码还有其他问题,但我想注意的是,你不应该像这样在循环中调用min/max。这些只需要计算一次,就可以将 O(n) 算法转换为 O(n^2) 代码。

标签: python data-science


【解决方案1】:

基于@shehan 的解决方案:

x = [1, 2, 3, 4]

def normalize(x):
    return [round((i - min(x)) / (max(x) - min(x)), 2) for i in x]

print(normalize(x))

为您提供您想要的。与其他解决方案不同,结果是四舍五入的(这正是您想要的)。

结果:

[0.0, 0.33, 0.67, 1.0]

答案的循环版本,以便操作人员可以理解:

x = [1, 2, 3, 4]

def normalize(x):
    # A list to store all calculated values
    a = []
    for i in range(len(x)):
        a.append([(x[i] - min(x)) / (max(x) - min(x))])
        # Notice I didn't return here
    # Return the list here, outside the loop
    return a

print(normalize(x))

【讨论】:

  • 赞成对结果进行舍入以便格式化输出;但是它会降低保持的精度,这可能为时过早。
  • @Ruturaj 谢谢。我想知道为什么我的 for 循环没有给出预期的答案。
  • @G1124E 请注意,您将在第一次迭代中返回(因此,您只有第一个值,即0.0)。相反,您应该计算所有值,然后返回整个列表。希望你能理解。
  • 不,不知道是什么意思。请您添加答案的 for 循环版本。
  • @G1124E 我把答案加了,方便大家理解。
【解决方案2】:

试试这个。

def normalize(x):
    return [(x[i] - min(x)) / (max(x) - min(x)) for i in range(len(x))]

【讨论】:

  • 您可以通过删除索引i 来简化此操作,而是让for 直接返回x_ireturn [(x_i - min(x)) / (max(x) - min(x)) for x_i in x] 你的实现也是 O(n^2)。
【解决方案3】:

你除以max(x),然后减去min(x)

您还在重复计算max(x)min(x)。你可以这样做:

x = [1, 2, 3, 4]

def normalize(x):
    maxx, minx = max(x), min(x)
    max_minus_min = maxx - minx
    return [(elt - minx) / max_minus_min for elt in x]

您可以按照@ruturaj 的建议对结果进行四舍五入,如果这是您想要保持的精度:

return [round((elt - minx) / max_minus_min, 2) for elt in x]

【讨论】:

  • 这样更好。
猜你喜欢
  • 1970-01-01
  • 2021-08-13
  • 2017-01-01
  • 2017-08-06
  • 1970-01-01
  • 2015-09-30
  • 2023-03-26
  • 2022-12-16
  • 2018-04-02
相关资源
最近更新 更多