Sam*_*amy 1 python numpy machine-learning normalization
我得到了一个函数的定义,并要求实现如下:
# Problem 1 - Apply zero mean and zero variance scale to the image features
def normalize(data):
pass
Run Code Online (Sandbox Code Playgroud)
然后提供单元测试使用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)
Run Code Online (Sandbox Code Playgroud)
我的解决方案是
def normalize(data):
return ((data - data.mean()) / data.max() - data.min())
Run Code Online (Sandbox Code Playgroud)
但是我的理解肯定存在差距,因为我得到了
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 ])
Run Code Online (Sandbox Code Playgroud)
随着谷歌搜索我也发现
(data - data.mean()) / data.std()
Run Code Online (Sandbox Code Playgroud)
经过多次搜索,我试过了
(data - data.mean()) / data.var()
Run Code Online (Sandbox Code Playgroud)
但两种解决方案都没有正确断言
那么这里的正确实施是什么?
首先,您可能打算这样做:
(data - data.mean()) / (data.max() - data.min())
Run Code Online (Sandbox Code Playgroud)
而不是这个:
((data - data.mean()) / data.max() - data.min())
Run Code Online (Sandbox Code Playgroud)
那么它不是正规化的正确定义.相反,正如您通过搜索找到的那样,正确的定义是:
(data - data.mean()) / data.std()
Run Code Online (Sandbox Code Playgroud)
最后你的单元测试是错误的,所以当用正确的定义调用时它会失败.