2017-03-10 75 views
1

的我試圖站/規範一些數據:標準化和規範化的二維數據

的數據包括兩個溫度讀數,一個來自傳感器和水銀溫度計其它的。

像這樣:

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

我想創建一個迴歸模型和我需要的數據是支架/標準化

什麼我目前做的是:

  1. 找到傳感器數據的平均值
  2. 找到Therm數據的平均值
  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 

我的問題是:我應該如何規範這些數據?我應該從整個數據(傳感器和Therm一起)的平均值/ deviantion?或者我應該分開嗎?關於規範化,我應該按照自己的方式去做,還是分開做(這似乎給出了奇怪的值)?

回答

0

標準化/正常化通常爲每個屬性單獨進行,因爲你現在做。但迴歸的目的,請諮詢

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是在屬性數據SET-

# 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

    事情是,如果我分別進行規範化,那麼傳感器數據的最小/最大值將爲0,1,最小值/ Therm數據的最大值也是0,1,因爲它們沒有映射到相同的時間間隔,所以'錯誤'。例如:S:32.69 - > 1,T:31.25 - > 1和S:31.44 - > 0,T:29.50 - > 0 –

    +0

    我不認爲它是錯誤的。由於原始值具有不同的範圍/差異,因此它們將映射到不同的歸一化值。 – pmuntima