当标准化接近零的最小-最大值时,如何避免数值错误



我正在使用

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:CodeEPMDKodexEPD_Prerequisitepython_3.7.6Libsite-packagessklearnpreprocessing_data.py", line 510, in minmax_scale
X = s.fit_transform(X)
File "C:CodeEPMDKodexEPD_Prerequisitepython_3.7.6Libsite-packagessklearnbase.py", line 571, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "C:CodeEPMDKodexEPD_Prerequisitepython_3.7.6Libsite-packagessklearnpreprocessing_data.py", line 339, in fit
return self.partial_fit(X, y)
File "C:CodeEPMDKodexEPD_Prerequisitepython_3.7.6Libsite-packagessklearnpreprocessing_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).

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

如何在没有太多代码丑化的情况下绕过这一问题?

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

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

我能找到的最干净的解决方案是将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))

现在他们不再平等了。

相关内容

最新更新