【问题标题】:How could I change datatype to float64 so that sklearn can work on dataframe which has data greater than np.float32如何将数据类型更改为 float64 以便 sklearn 可以处理数据大于 np.float32 的数据帧
【发布时间】:2020-03-10 11:18:06
【问题描述】:

在我的数据集中,很少有数据(即1.4619664882428694e+258)大于float32 最大值(3.4028235e+38)。现在在拟合模型时出现以下错误:

Input contains NaN, infinity or a value too large for dtype('float32').

我试过下面的代码:

df_features = pd.read_csv('data\df_features.csv')
df_target = pd.read_csv('data\df_target.csv')

X_train, X_test, y_train, y_test = train_test_split(df_features, df_target, test_size=.25, random_state=0)

model = AdaBoostRegressor()

try:
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    acc = r2_score(y_test, y_pred)
    print(acc)

except Exception as error:
    print(error)

如果我想使用真实数据而不进行规范化,我该如何解决这个问题?是否有任何选项可以让我将 sklearn 的默认数据类型设置为 float64。如果是,那怎么办?

【问题讨论】:

标签: python-3.x pandas machine-learning scikit-learn floating-point


【解决方案1】:

这可能不是问题的直接答案,但我认为出于实际目的,它应该作为数据科学问题来解决。

首先,1.4e258 的值让人感觉相当可疑,因为很难想象它在哪里可以具有有意义的物理意义。这样的极端值可能会严重破坏您的指标和模型。问题应该是它是否是异常值。答案取决于您的数据及其含义。

  • 如果它是一个 oultier(如极值),正确的方法可能是完全删除该实例。这可能会提高训练模型在其余实例上的性能。缺点是模型在该实例或类似的极值上表现不佳。实际上,这要求您让使用该模型的每个人都意识到它对这些极端值的限制。

  • 如果它不是异常值,则应考虑对其进行修改以使其对人类和机器都提供更多信息。这可能意味着使用更有意义的标度,例如对数标度:对人类来说更容易操作,并且可能避免重大的计算问题。另一种方法是使用某种重整化。例如,如果您的所有值都在 1e250 和 1e260 之间,您可以将它们除以 1e255。如果采用这些值的变量依赖于另一个变量,您可能会通过该值或其幂之一重新归一化,例如如果它是一个卷,您可能希望通过大小变量重新归一化为 3 次方。这可能有助于避免 sklearn 计算问题并制作更有意义的模型。

【讨论】:

    【解决方案2】:

    这是一个数值精度问题。目前没有解决方案。数字很​​大

    我可以用这个来复制:

    import numpy as np
    from sklearn.ensemble import AdaBoostRegressor
    
    
    X = np.repeat([1.4619664882428694e+258],100)
    X = X.reshape(10,10)
    y = np.ones((10,1))
    
    model = AdaBoostRegressor()
    model.fit(X,y)
    
    

    ValueError: 输入包含 NaN、无穷大或一个太大的值 dtype('float32').

    np.all(np.isfinite(X))
    True
    

    我在这里打开了一个请求:https://github.com/scikit-learn/scikit-learn/issues/15628

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多