显然数据集包含 NaN,因此 KNeighborsClassifier 不起作用。 这是我正在使用的数据集:https://www.kaggle.com/datasets/thehapyone/uci-online-news-popularity-data-set
这是我正在运行的完整代码,取自 Kaggle:https://www.kaggle.com/code/thehapyone/exploratory-analysis-for-online-news-popularity
这是有问题的部分(它是上面链接中完整代码的第 75 行):
# defining the model
from sklearn.neighbors import KNeighborsClassifier
k_range = np.arange(1,100)
accuracy = []
for n in k_range:
neigh = KNeighborsClassifier(n_neighbors=n, n_jobs=-1)
neigh.fit(X_train_2, y_train_2)
# predict the result
y_pred = neigh.predict(X_test_2)
#print ("Random Forest Classifer Result")
#print ("Performance - " + str(100*accuracy_score(y_pred, y_test_2)) + "%")
accuracy.append(100*accuracy_score(y_pred, y_test_2))
这是我遇到的错误:
ValueError Traceback(最近一次调用最后一次)
在
4帧 /usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in _assert_all_finite(X,allow_nan,msg_dtype,estimator_name,input_name) 159、“#estimators-that-handle-nan-values” 160) --> 161 引发 ValueError(msg_err) 162 163
值错误:输入 X 包含 NaN。 KNeighborsClassifier 不接受本机编码为 NaN 的缺失值。对于监督学习,您可能需要考虑 sklearn.ensemble.HistGradientBoostingClassifier 和 Regressor,它们接受本机编码为 NaN 的缺失值。或者,可以对数据进行预处理,例如通过在管道中使用输入转换器或删除具有缺失值的样本。请参阅 https://scikit-learn.org/stable/modules/impute.html 您可以在以下页面找到处理 NaN 值的所有估计器的列表:https://scikit-learn.org/stable/模块/impute.html#estimators-that-handle-nan-values
您的数据包含 NaN(某些块没有值),这可能会干扰机器学习。与:
df = pd.csv("some data")
de = df.dropna(inplace=True)
您可以清理数据,但使用该命令还可以消除包含 NaN 的行。如果它是边框,那么您可以使用命令 fillna(),它可以用(例如)字符串、整数或您想要的任何内容替换 NaN。