3

页面https://pypi.python.org/pypi/fancyimpute有一行

# Instead of solving the nuclear norm objective directly, instead
# induce sparsity using singular value thresholding
X_filled_softimpute = SoftImpute().complete(X_incomplete_normalized)

这表明我需要对输入数据进行规范化。但是我没有在互联网上找到任何详细信息,这究竟是什么意思。我是否必须事先规范化我的数据以及究竟是什么预期的?

4

1 回答 1

1

是的,您绝对应该规范化数据。考虑以下示例:

from fancyimpute import SoftImpute
import numpy as np
v=np.random.normal(100,0.5,(5,3))
v[2,1:3]=np.nan
v[0,0]=np.nan
v[3,0]=np.nan
SoftImpute().complete(v)

结果是

array([[  81.78428587,   99.69638878,  100.67626769],
       [  99.82026281,  100.09077899,   99.50273223],
       [  99.70946085,   70.98619873,   69.57668189],
       [  81.82898539,   99.66269922,  100.95263318],
       [  99.14285815,  100.10809651,   99.73870089]])

请注意,我放置的地方nan完全关闭。但是,如果您改为运行

from fancyimpute import SoftImpute
import numpy as np
v=np.random.normal(0,1,(5,3))
v[2,1:3]=np.nan
v[0,0]=np.nan
v[3,0]=np.nan
SoftImpute().complete(v)

(与以前的代码相同,唯一的区别是v标准化)你得到以下合理的结果:

array([[ 0.07705556, -0.53449412, -0.20081351],
       [ 0.9709198 , -1.19890962, -0.25176222],
       [ 0.41839224, -0.11786451,  0.03231515],
       [ 0.21374759, -0.66986997,  0.78565414],
       [ 0.30004524,  1.28055845,  0.58625942]])

因此,当您使用 时SoftImpute,不要忘记对数据进行规范化(您可以通过将每列的平均值设为 0,将标准设为 1 来做到这一点)。

于 2017-07-10T20:49:05.770 回答