【问题标题】:When i log transform pandas column i get NaNs should i replace these with 0?当我记录转换熊猫列时,我得到 NaN,我应该用 0 替换它们吗?
【发布时间】:2020-05-20 08:23:43
【问题描述】:

我找不到类似的问题。但是我有一个 df,其中一些列高度倾斜。然后我计划记录转换这些列然后标准化。但是,当我记录转换时,我会得到 NaN,我应该用 0;s 替换它们吗?

log_train[skew_cols]=np.log2(featuresdf[skew_cols]

我得到的错误是:

RuntimeWarning: invalid value encountered in log2
  This is separate from the ipykernel package so we can avoid doing imports until

不知道我做错了什么

【问题讨论】:

    标签: pandas normalization logarithm


    【解决方案1】:

    您不应该用 0 替换,因为 np.log(1) 等于 0。所以 1 和 0 在您的日志数据中都是 0。

    相反,只需在日志之前为您的数据 +1。因此 log2(1) 变为 0,log2(2)(原为 1)仍为 1,则 log2(3)(原为 2)现在为 1.58)

    所以代码是:

    log_train[skew_cols]=np.log2(featuresdf[skew_cols]+1)
    

    另一种选择是使用其他可以处理0的缩放方法,例如平方根(np.sqrt)

    【讨论】:

    • 非常感谢。在我对它们进行日志转换后,这些列仍然偏斜。我想要记录转换这些列的全部意义在于它已准备好进行逻辑回归
    • 没问题,请记住,对于逻辑回归,误差项(残差)不需要呈正态分布(就像它们对线性的分布一样)。所以这可能不是必需的。
    • 这为我省去了一个痛苦的世界,但它们不需要缩放吗?
    • 取决于您要使用模型的目的。有时,按比例衡量的指标可能变得更难以解释。请记住,赔率是 x 增加 1 个单位导致结果的可能性增加 y 倍。如果您的变量被缩放,模型的可解释性可能会变得更加困难。另外,如果这个答案确实回答了您的问题,最好接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2010-11-06
    • 2011-06-01
    • 2010-09-10
    相关资源
    最近更新 更多