首页 > 解决方案 > ValueError:输入在python中包含NaN

问题描述

我的代码

from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import SGDClassifier

mnb=MultinomialNB()
svm=SGDClassifier(max_iter=1000, tol=0.2)

mnb_bow_predictions=train_predict_evaluate_model(classifier=mnb,
                                                train_features=bow_train_features,
                                                train_labels=train_labels,
                                                test_features=bow_test_features,
                                                test_labels=test_labels)

并提出错误

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in _assert_all_finite(X, allow_nan)
     58     elif X.dtype == np.dtype('object') and not allow_nan:
     59         if _object_dtype_isnan(X).any():
---> 60             raise ValueError("Input contains NaN")
     61 
     62 

ValueError: Input contains NaN\

是什么让我的程序引发了这个错误?数据集或函数中的错误?

标签: pythonpandasscikit-learn

解决方案


所有特征和标签值都必须是有限的。如果bow_train_features, train_labels, bow_train_features,train_labels是 DataFrames 或 Numpy 数组,您可以使用以下代码仅过滤训练/测试集中的完全有限观察:

# Create finite observation filters for train/test sets
train_finite_filter = np.isfinite(bow_train_features) & np.isfinite(train_labels) 
test_finite_filter = np.isfinite(bow_test_features) & np.isfinite(test_labels)

# Filter for finite training observations
bow_train_features_finite = bow_train_features[train_finite_filter]
train_labels_finite = train_labels[train_finite_filter]

# Filter for finite test observations
bow_test_features_finite = bow_test_features[test_finite_filter]
test_labels_finite = test_labels[test_finite_filter]

推荐阅读