sklearn 的 ValueError,问题可能是由 float32/float64 dtypes 引起的?

ValueError for sklearn, problem maybe caused by float32/float64 dtypes?

所以我想检查数据集中的特征重要性,但出现此错误:

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

我检查了数据集,很公平,有 nan 值。所以我添加了一行来删除所有 nan 行。现在没有 nan 值。我重新 运行 代码,仍然是同样的错误。我检查了 .dtypes 并且很公平,它都是 float64。所以我将 .astype(np.float32) 添加到我传递给 sklearn 的列中。但是现在我仍然有同样的错误。我手动滚动了整个数据框,还使用了 data.describe(),所有值都在 0 到 5 之间,远离无穷大或大值。

这里出现错误的原因是什么?

这是我的代码:

import pandas as pd
import numpy as np
from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt


data = pd.read_csv("data.csv")
data.dropna(inplace=True) #dropping all nan values


X = data.iloc[:,8:42]  
X = X.astype(np.float32) #converting data from float64 to float32
y = data.iloc[:,4]    
y = y.astype(np.float32) #converting data from float64 to float32


# feature importance
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_)

你是第三种情况(大值)然后是第二种情况(无穷大)downcast后:

演示:

import numpy as np

a = np.array(np.finfo(numpy.float64).max)
# array(1.79769313e+308)

b = a.astype('float32')
# array(inf, dtype=float32)

如何调试?假设以下数组:

a = np.array([np.finfo(numpy.float32).max, np.finfo(numpy.float64).max])
# array([3.40282347e+038, 1.79769313e+308])

a[a > np.finfo(numpy.float32).max]
# array([1.79769313e+308])