混淆为什么我的 KNN 代码抛出 ValueError

Confuse why my KNN code is throwing a ValueError

首先想说一下,我好久没有做ML了。我确实参加了一些课程,但我忘记了大部分。这也是我第一个没有导师的个人 ML 项目,所以请将我视为初学者。我正在使用 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').


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

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

#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)