KNN 建模 Python

问题描述 投票:0回答:1

显然数据集包含 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(最近一次调用最后一次) 在 () 中 10 11 # 预测结果 ---> 12 y_pred = neigh.predict(X_test_2) 13 14 #print(“随机森林分类器结果”)

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


python knn
1个回答
0
投票

您的数据包含 NaN(某些块没有值),这可能会干扰机器学习。与:

df = pd.csv("some data")
de = df.dropna(inplace=True)

您可以清理数据,但使用该命令还可以消除包含 NaN 的行。如果它是边框,那么您可以使用命令 fillna(),它可以用(例如)字符串、整数或您想要的任何内容替换 NaN。

© www.soinside.com 2019 - 2024. All rights reserved.