FancyCompute的软插补需要标准化数据吗?

2024-06-01 03:12:15 发布

您现在位置:Python中文网/ 问答频道 /正文

页面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)

这意味着我需要规范化输入数据。但是我没有在网上找到任何细节,这到底是什么意思。我是否必须事先规范化我的数据,以及预期的具体内容?在


Tags: ofthe数据httpsorgpypinorm页面
1条回答
网友
1楼 · 发布于 2024-06-01 03:12:15

是的,你一定要规范化数据。考虑以下示例:

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)

结果是

^{pr2}$

请注意,我放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,std为1来实现这一点)。在

相关问题 更多 >