2016-10-22 35 views
0

零均值和方差爲我給出一個函數的定義,請按以下步驟實現:實現在numpy的

# Problem 1 - Apply zero mean and zero variance scale to the image features 
def normalize(data): 
    pass 

然後提供使用numpy一個單元測試,會堅持我的成功實施

編輯

我的單元測試,但通過該課程的教師指定。

np.testing.assert_array_almost_equal(
    normalize(np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])), 
    np.array([-0.4, -0.3, -0.2, -0.099, 0.0, 0.099, 0.199, 0.3, 0.4, 0.5]), 
    decimal=3) 

我的解決辦法是

def normalize(data): 
    return ((data - data.mean())/data.max() - data.min()) 

但因爲我得到

AssertionError: 
Arrays are not almost equal to 3 decimals 

(mismatch 100.0%) 
x: array([-1.45, -1.35, -1.25, -1.15, -1.05, -0.95, -0.85, -0.75, -0.65, -0.55]) 
y: array([-0.4 , -0.3 , -0.2 , -0.099, 0. , 0.099, 0.199, 0.3 , 
     0.4 , 0.5 ]) 

用google搜索,我也發現

(data - data.mean())/data.std() 
必須有我的理解差距

經過更多搜索我試圖

(data - data.mean())/data.var() 

但是這兩種解決方案都沒有正確聲明。

那麼這裏的正確實施是什麼?

+0

爲什麼選擇投票? –

回答

4

首先,你可能是爲了做到這一點:

(data - data.mean())/(data.max() - data.min()) 

,而不是這樣的:

((data - data.mean())/data.max() - data.min()) 

然後,它是不正火的正確定義。相反,當你周圍搜索發現,正確的定義是:

(data - data.mean())/data.std() 

最後你的單元測試是錯誤的,所以當使用正確的定義把它叫做失敗。

+0

作爲問題統計,這不是我的單元測試!它由老師分配! –

+0

然後改變你的老師;)'np.array([ - 0.4,-0.3,-0.2,-0.099,0.0,0.099,0.199,0.3,0.4,0.5])。std()= 0.28710675714792921'我沒有看到這是如何正常化的... – Julien

+0

另外:「零差異」意味着所有的值都應該相等,我懷疑你的教練想要什麼。因此,也許請教師檢查他的問題;) – Julien

1

我認爲您的問題可能存在拼寫錯誤。請注意,如果使用式

(data - data.mean())/data.var() 

但是,只有當你追加一個0到測試輸入數組的開始的單元測試通過,並附加-0.5到輸出數組的開始。如果它不是一個錯字,那這是一個奇怪的巧合。

+1

即使情況如此,通過方差標準化也沒什麼意義,因爲它不是尺寸正確的:如果您的數據是以米爲單位的長度,則「標準化」將以米^ -1爲單位。我認爲教練的問題顯然是錯誤的。 – Julien

+0

這是一個很好的觀點。 –