【问题标题】:How to avoid numeric error when normalizing min-max near zero?将最小值-最大值归一化接近零时如何避免数值错误?
【发布时间】:2021-05-12 12:24:37
【问题描述】:

我正在使用

from sklearn import preprocessing

v01 = preprocessing.minmax_scale(v01, feature_range=(rf_imp_vec_truncated.min(), rf_imp_vec_truncated.max()))

它通常可以工作,除了有时我会遇到类似的错误

    preprocessing.minmax_scale(v01, feature_range=(rf_imp_vec_truncated.min(), rf_imp_vec_truncated.max()))
  File "C:\Code\EPMD\Kodex\EPD_Prerequisite\python_3.7.6\Lib\site-packages\sklearn\preprocessing\_data.py", line 510, in minmax_scale
    X = s.fit_transform(X)
  File "C:\Code\EPMD\Kodex\EPD_Prerequisite\python_3.7.6\Lib\site-packages\sklearn\base.py", line 571, in fit_transform
    return self.fit(X, **fit_params).transform(X)
  File "C:\Code\EPMD\Kodex\EPD_Prerequisite\python_3.7.6\Lib\site-packages\sklearn\preprocessing\_data.py", line 339, in fit
    return self.partial_fit(X, y)
  File "C:\Code\EPMD\Kodex\EPD_Prerequisite\python_3.7.6\Lib\site-packages\sklearn\preprocessing\_data.py", line 365, in partial_fit
    " than maximum. Got %s." % str(feature_range))
ValueError: Minimum of desired feature range must be smaller than maximum. Got (-6.090366306515144e-15, -6.090366306515144e-15).

这看起来像一个数字错误,我希望在这种情况下看到一条平线。

如何在没有太多代码丑化的情况下解决这个问题?

【问题讨论】:

    标签: python scikit-learn precision numeric


    【解决方案1】:

    您确定您正确解释了feature_range 的含义吗? docs 提到,它是您想要输出数据的范围,例如 [0, 1]。

    文档还声明feature_index[0](即最小值)必须严格小于feature_index[1](即最大值)。但是,在您的情况下,两者都相等(-6.09e-15 和 -6.09e-15),因此会出现错误。

    【讨论】:

    • 添加保护if rf_imp_vec_truncated.min() >= rf_imp_vec_truncated.max(): return 不会进入if 语句。这闻起来像减去两个浮点数的数字错误。
    【解决方案2】:

    我能找到的最干净的解决方案是将epsilon 添加到最大值:

    v01 = preprocessing.minmax_scale(v01, feature_range=(rf_imp_vec_truncated.min(), rf_imp_vec_truncated.max() + np.finfo(rf_imp_vec_truncated.dtype).eps))
    

    现在他们不再平等了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2022-06-16
      相关资源
      最近更新 更多