Python 二维数据的标准化和规范化

Python 二维数据的标准化和规范化,python,normalization,standardized,Python,Normalization,Standardized,我正在尝试支持/规范一些数据: 数据包括两个温度读数,一个来自传感器,另一个来自水银温度计 像这样: SENSOR THERM 32.69 31.25 32.00 30.25 31.94 30.50 31.87 30.50 31.44 29.50 ... 我想创建一个回归模型,为此,我需要对数据进行标准化 我目前正在做的是: 找到传感器数据的平均值 找出热数据的平均值 计算传感器数据的标准偏差 计算热数据的标准偏差 创建一个新列表,并将标准化值添加到该列表中 这就是事情变

我正在尝试支持/规范一些数据:

数据包括两个温度读数,一个来自传感器,另一个来自水银温度计

像这样:

SENSOR  THERM
32.69   31.25
32.00   30.25
31.94   30.50
31.87   30.50
31.44   29.50
...
我想创建一个回归模型,为此,我需要对数据进行标准化

我目前正在做的是:

  • 找到传感器数据的平均值
  • 找出热数据的平均值
  • 计算传感器数据的标准偏差
  • 计算热数据的标准偏差
  • 创建一个新列表,并将标准化值添加到该列表中
  • 这就是事情变得棘手的地方

    在创建了这个新列表之后,我想对其进行规范化,使其具有0-1的值,我的做法是从标准化数据(传感器和Therm一起)中获取最低值和最高值。但这似乎有点奇怪

    以下是迄今为止的代码:

    data = [[32.69, 31.25],
            [32.00, 30.25],
            [31.94, 30.50],
            [31.87, 30.50],
            [31.44, 29.50]]
    
    # take mean from data
    mean_x = sum(x for x,y in data)/len(data)
    mean_y = sum(y for x,y in data)/len(data)
    
    # compute standard deviation 
    std_d_x = (sum((x-mean_x)**2 for x,y in data)/len(data))**(1/2.0)
    std_d_y = (sum((y-mean_y)**2 for x,y in data)/len(data))**(1/2.0)
    
    
    stand_data = []
    
    # get standardized values
    for x, y in data:
        stand_x = (x - mean_x) / std_d_x
        stand_y = (y - mean_y) / std_d_y
    
        stand_data.append((stand_x, stand_y))
    
    # find min/max value from the whole data
    min_v = min(min([x,y]) for x, y in stand_data)
    max_v = max(max([x,y]) for x, y in stand_data)
    
    
    for i, (stand_x, stand_y) in enumerate(stand_data):
        # normalize it
        norm_x = (stand_x - min_v)/(max_v - min_v)
        norm_y = (stand_y - min_v)/(max_v - min_v)
    
        # display
    
        raw = "%.2f, %.2f"%(data[i][0], data[i][1])
        stand = "%.2f, %.2f"%(stand_x, stand_y)
        norm =  "%.2f, %.2f"%(norm_x, norm_y)
        print("{raw} -> {stand} -> {norm}".format(**locals()))
    
    结果如下:

    Input data   -> standardized -> normalized
    32.69, 31.25 ->  1.74,  1.51 -> 1.00, 0.93
    32.00, 30.25 ->  0.03, -0.27 -> 0.49, 0.40
    31.94, 30.50 -> -0.12,  0.18 -> 0.44, 0.53
    31.87, 30.50 -> -0.29,  0.18 -> 0.39, 0.53
    31.44, 29.50 -> -1.36, -1.60 -> 0.07, 0.00
    

    我的问题是:我应该如何标准化这些数据?我应该从整个数据(传感器和温度)中取平均值/偏差吗?或者我应该分开服用?关于规范化,我应该按照我现在的方式来做,还是单独做(这似乎给出了奇怪的值)?

    标准化/规范化通常是针对每个属性单独做的,就像你现在做的那样。但为了回归,请咨询

    我看有两点,

  • 您可以选择要对数据使用的规范化/标准化方法。例如,可以使用
    min-max归一化
    z-score归一化
  • 公式,其中A是数据集中的属性-

    # Min-Max Normalization (Final values are in between 0 and 1)
    v_ = (v - min(A)) / (max(A) - min(A))
    # Z - Score Normalization (Final values have a mean of 0 and SD of 1)
    v_ = (v - mean(A)) / (standard_deviation(A))
    
  • 实施它

  • 实现完全依赖于编程语言。例如,在R中,您可以使用函数扫描在一行中对其进行规格化

    标准化/规格化通常是针对每个属性单独进行的,就像您现在所做的那样。但为了回归,请咨询

    我看有两点,

  • 您可以选择要对数据使用的规范化/标准化方法。例如,可以使用
    min-max归一化
    z-score归一化
  • 公式,其中A是数据集中的属性-

    # Min-Max Normalization (Final values are in between 0 and 1)
    v_ = (v - min(A)) / (max(A) - min(A))
    # Z - Score Normalization (Final values have a mean of 0 and SD of 1)
    v_ = (v - mean(A)) / (standard_deviation(A))
    
  • 实施它

  • 实现完全依赖于编程语言。例如,在R中,您可以使用函数扫描在一行中对其进行规格化

    问题是,当我单独进行规格化时,传感器数据的最小/最大值将为0,1,而热数据的最小/最大值也将为0,1,这是
    错误的?
    ,因为它们没有映射到相同的间隔。例如:S:32.69->1,T:31.25->1和S:31.44->0,T:29.50->0我认为它没有错。由于原始值具有不同的范围/排列,它们将映射到不同的标准化值。问题是,当我分别进行标准化时,传感器数据的最小/最大值将为0,1,而热数据的最小/最大值也将为0,1,这是
    错误的?
    ,因为它们没有映射到相同的间隔。例如:S:32.69->1,T:31.25->1和S:31.44->0,T:29.50->0我认为它没有错。由于原始值具有不同的范围/排列,因此它们将映射到不同的规范化值。