【问题标题】:Python - Log Transformation on variables using numpyPython - 使用 numpy 对变量进行日志转换
【发布时间】:2017-11-15 09:11:08
【问题描述】:

作为机器学习项目的一部分,我正在研究特征工程过程。目前我必须确定是否对某些列进行日志转换。

我知道应该对那些值分布偏斜的列进行对数转换。

现在这里是我需要澄清的问题/疑问。

如何在 Python 中确定特定列的值是否属于偏态分布(右偏或左偏)?

并假设我已经确定了我需要应用对数转换的列,对数函数有很多基础,例如 loge、log10、log2 等... 我是否使用自然对数 (即)loge 或 log10 或此机器学习方法中的其他任何内容?

如果我没记错的话,对数转换只能应用于数值变量。是这样吗?

【问题讨论】:

    标签: python python-3.x numpy


    【解决方案1】:

    您可以使用 Pandas DataFrame.skew(axis=None, skipna=None, level=None, numeric_only=None, **kwargs) Pandas skew 来查看特定列的值是否倾斜。

    基本上,自然对数变换更可取,它只能应用于除零和负值之外的数值。

    正态分布的偏度为零,任何对称数据的偏度都应接近于零。偏度的负值表示向左偏斜的数据,而偏度的正值表示向右偏斜的数据。向左倾斜是指左尾相对于右尾较长。同样,向右倾斜意味着右尾比左尾长。

    【讨论】:

      【解决方案2】:

      是的,您只能将对数转换应用于数值数据。还有其他替代方法可以将文本数据转换为数字 ex。单热编码。

      绘制列的直方图以检查数据中是否存在任何偏斜。箱线图在这方面也有帮助。

      如果您使用的是 pandas,那么 hist() 函数会很有帮助。尝试使用不同的 bin 大小进行绘图。 对于日志转换,选择任何基础,不会有太大影响。一般使用loge和log10。

      【讨论】:

      • 谢谢@Chitrasen,但我有一个问题。我的应用程序将没有可视化功能。因此,我必须检查特定列的偏度是否足以进行对数转换,而无需查看任何绘图/图形。如果 hist(col) 是 0.7 或某个值,那么我们是否必须进行对数转换?
      • @JKC 可行的替代方法是从数据中获取样本并绘制。
      • 为了避免在记录日志时出现错误(如果值为零),我对列中的每个单元格进行 +1 并记录单元格值。例如,如果任何单元格包含值为“0”,则 log(0) 将以错误结尾。所以我向它添加1,因此我正在做log(0 + 1),它是0。但是如果任何单元格有负值,如何在获取日志时处理它。对此的任何指示都会有所帮助
      【解决方案3】:

      要测量偏斜,您可以使用 scipy.stats.skewscipy.stats.skewtest

      也可以使用scipy.stats.lognorm.fit()获取对数正态分布的参数

      【讨论】:

      • 感谢@Maarten Fabre 当我尝试第一个选项时,它抛出错误,因为模块'scipy'没有属性倾斜或倾斜测试
      • 哦,是的。它的 scipy.stats。好的,所以当我使用 skew(col_value) 时,我得到了另一个值,但是如何确定它的偏度。如果 skew() 返回的值 > 0.5 是否是正确的偏斜;如果它
      • 您阅读文档了吗? For unimodal continuous distributions, a skewness value > 0 means that there is more weight in the right tail of the distribution
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2021-07-23
      • 1970-01-01
      相关资源
      最近更新 更多