【问题标题】:Does fancyimpute's SoftImpute require normalized data?fancyimpute 的 SoftImpute 是否需要标准化数据?
【发布时间】:2017-06-26 05:36:21
【问题描述】:

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

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

【问题讨论】:

    标签: python pandas numpy imputation fancyimpute


    【解决方案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 来做到这一点)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 2023-01-20
      • 2017-02-17
      • 2012-02-16
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多