【问题标题】:Confuse why my KNN code is throwing a ValueError混淆为什么我的 KNN 代码会抛出 ValueError
【发布时间】:2022-07-15 18:01:58
【问题描述】:

我正在将 sklearn 用于 KNN 回归器:

#importing libraries and data
import pandas as pd
from sklearn.neighbors import KNeighborsRegressor as KNR
theta = pd.read_csv("train.csv")#pandas dataframe
#getting data wanted from theta and putting it in a new dataframe
a = theta.get("YearBuilt")
b = theta.get("YrSold")
A = a.to_frame()
B = b.to_frame()
glasses = [A,B]
x = pd.concat(glasses)
#getting target data
y = theta.get("SalePrice")
#using KNN
horses = KNR(n_neighbors = 3)
horses.fit(x,y)

我收到此错误消息:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

有人可以解释一下吗?我的目标数据为数十万,输入数据为数千。并且数据中没有空格。

【问题讨论】:

    标签: python pandas machine-learning scikit-learn knn


    【解决方案1】:

    在回答问题之前,让我重构一下代码。您正在使用数据框,因此您可以索引数据框的单个或多个字段,而无需执行您使用过的额外步骤:

    #importing libraries and data
    import pandas as pd
    from sklearn.neighbors import KNeighborsRegressor as KNR
    
    theta = pd.read_csv("train.csv") # pandas dataframe
    #getting data wanted from theta and putting it in a new dataframe
    x = theta[["YearBuilt", "YrSold"]] # index multiple fields
    #getting target data
    y = theta["SalePrice"] # index single field
    #using KNN
    horses = KNR(n_neighbors = 3)
    horses.fit(x,y) # fit KNN
    

    关于您的错误,这表明您的数据中有一些NaNInf、大值。您可以通过过滤掉 NaNinf 值来确保这些不会发生:

    theta = theta.replace([np.inf, -np.inf], np.nan)
    
    theta.dropna(inplace=True)
    

    【讨论】:

    • 我了解您的代码是如何工作的(谢谢)。但我的 YearBuilt、YrSold 和 SalePrice 数据都不是空的。在我的代码中,我只是将它们传递给 KNN 拟合函数。出于好奇,为什么它仍然在我的代码中引发错误?是因为在其他列的数据中有 NaN 吗?谢谢
    • 当我使用你的代码时,即使没有 theta.replace 和 dropna 也不会抛出错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多