我正试图站立/规范一些数据:
数据由两个温度读数组成,一个来自传感器,另一个来自水银温度计。
像这样:
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
我的问题是:我应该如何标准化这些数据?我应该从整个数据(传感器和Therm一起)中取平均值/偏差吗?或者我应该单独服用它们?关于规范化,我应该按照我正在做的方式进行,也可以单独进行(这似乎给出了奇怪的值)?
答案 0 :(得分:0)
标准化/规范化通常是针对每个属性单独完成的,正如您现在所做的那样。但是为了回归,请咨询
据我所知,有两点,
min-max normalization
或z-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))
实现完全取决于编程语言。例如,在R中,您可以使用函数扫描将其标准化为单行