出现错误:NaN、无穷大或对于 dtype('float64') 而言太大的值

Error occurs: NaN, infinity or a value too large for dtype('float64')

我有一个非常大的数据集,我必须训练一个模型。我不知道 Nan 或缺失值在哪里。 svm代码启动时出现错误。

df = pd.read_csv('Data.txt',delimiter=',')
df.head() 
X = df[['a', 'b', 'c']].values   
Y=df['Label'].values

cv = KFold(n_splits=2, random_state=42, shuffle=False)
for train_index, test_index in cv.split(X):
    print("Train Index: ", train_index, "\n")
    print("Test Index: ", test_index)
X_train, X_test, Y_train, Y_test = X[train_index], X[test_index], Y[train_index], Y[test_index]

svm1 = svm.SVC(gamma='scale', probability=True)
pred = svm1.fit(X_train, Y_train).predict(X_test)

错误

 raise ValueError(msg_err.format(type_err, X.dtype))
ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

您的 X 中似乎有 NaN 值。

你必须搜索他们,并处理它。你可以放弃样本,改变平均值,......无论你决定什么。但是训练的时候不能有任何NaN值。

要检测此 NaN 值的位置,请使用函数 isnull()。例如,下面的代码将告诉您每列有多少个 NaN:

 df.isnull().sum()

获得此信息后,您必须决定要做什么。例如,如果您只有几个具有 NaN 值的样本,我建议您直接删除所有具有这些值的样本:

df.dropna()

另一种选择是所有 NaN 仅出现在一列(特征)中,在这种情况下,您应该评估为什么会发生这种情况并考虑是否应该放弃该特征。

如您所见,这取决于每种情况。一般来说,如果有正确的理由,你做出的任何决定都是正确的,但是,当然,你必须意识到结果将取决于这些预处理。