【问题标题】:Standardization and Normalization of 2d data二维数据的标准化和归一化
【发布时间】:2017-07-31 04:44:44
【问题描述】:

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

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

像这样:

SENSOR  THERM
32.69   31.25
32.00   30.25
31.94   30.50
31.87   30.50
31.44   29.50
...

我想创建一个回归模型,为此我需要对数据进行标准/标准化

我目前正在做的是:

  1. 找到传感器数据的平均值
  2. 找出热数据的平均值
  3. 计算传感器数据的标准差
  4. 计算热数据的标准差
  5. 创建一个新列表,并将标准化值添加到该列表中

这就是事情变得棘手的地方。

创建这个新列表后,我想对其进行规范化,使其具有 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

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

【问题讨论】:

    标签: python normalization standardized


    【解决方案1】:

    正如您现在所做的那样,通常对每个属性单独进行标准化/规范化。但出于回归的目的,请咨询

    https://stats.stackexchange.com/questions/29781/when-conducting-multiple-regression-when-should-you-center-your-predictor-varia/111997#111997

    据我所知有两点,

    1. 您可以选择要对数据使用的标准化/标准化方法。例如,您可以使用min-max normalizationz-score normalization

    公式,其中 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))
    
    1. 实现它

    实现完全取决于编程语言。例如,在 R 中,您可以使用函数扫描在一行中对其进行归一化

    【讨论】:

    • 问题是,当我单独进行标准化时,传感器数据的最小/最大值将为 0,1,而热数据的最小/最大值也将为 0,1 ,即wrong?,因为它们没有映射到相同的间隔。例如:S:32.69 -> 1, T:31.25 -> 1 和 S:31.44 -> 0, T:29.50 -> 0
    • 我不认为是wrong。由于原始值具有不同的范围/分布,因此它们将映射到不同的归一化值。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2016-02-13
    • 2020-12-04
    • 2021-05-01
    • 2015-11-13
    • 2020-10-28
    • 2021-05-24
    • 2021-05-03
    相关资源
    最近更新 更多