如何将数据类型更改为 float64,以便 sklearn 可以处理数据大于 np.float32 的数据帧

BC *_*ith 6 floating-point machine-learning python-3.x pandas scikit-learn

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

Input contains NaN, infinity or a value too large for dtype('float32').
Run Code Online (Sandbox Code Playgroud)

我试过下面的代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

mak*_*kis 1

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

我可以使用这个复制:

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)

Run Code Online (Sandbox Code Playgroud)

ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。

np.all(np.isfinite(X))
True
Run Code Online (Sandbox Code Playgroud)

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