【问题标题】:Error occurs: NaN, infinity or a value too large for dtype('float64')发生错误:NaN、无穷大或对于 dtype('float64') 而言太大的值
【发布时间】:2021-05-27 18:57:05
【问题描述】:

我有一个非常大的数据集,我必须训练一个模型。我不知道 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')

【问题讨论】:

    标签: python pandas scikit-learn svm


    【解决方案1】:

    您的 X 中似乎有 NaN 值。

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

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

     df.isnull().sum()
    

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

    df.dropna()
    

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2019-10-11
      • 2017-09-06
      • 2019-11-27
      • 2019-06-01
      • 1970-01-01
      • 2018-02-12
      • 2018-11-15
      • 2017-02-19
      相关资源
      最近更新 更多