Python:KNN回归拟合返回错误



我正在进行一个机器学习练习,当我运行以下代码时,我一直收到一个错误:

from sklearn.neighbors import KNeighborsRegressor
import numpy as np
import matplotlib.pyplot as plt
N=51
SD=1.15
ME=0
E=np.random.normal(ME, SD, N)
X = np.linspace(-4,4, N, endpoint=True)
Y = X**2 + E
neigh = KNeighborsRegressor(n_neighbors=2)
neigh.fit(X, Y)
X_eval = np.linspace(0,4,1000)
X_eval = X_eval.reshape(-1,1)
plt.figure()
plt.plot(X_eval,neigh.predict(X_eval), label="regression predictor")
plt.plot(X,Y, 'rs', markersize=12, label="training set")
plt.show()

错误在neigh.fit((行,并且是:

ValueError:应为2D数组,实际为1D数组:array=[所有生成的x值]。使用array.Reshape(-1,1((如果数据具有单个特征(或array.reshaze(1,-1((如果包含单个样本(来重塑数据。

但这种方式也不起作用。我对机器学习和python编程还很陌生,所以如果这个问题很琐碎,我很抱歉,但:我可以改进什么来运行我的代码?提前感谢!

解决这个问题的关键部分是理解错误。错误是告诉您需要传递二维数组,但您只传递了一维数组。更明确地说,你的问题是X,它确实需要重塑为这样:

X_new = X.reshape(-1,1)

reshape(-1,1)将取1-D数组,并确保每个子数组中只有一个元素。-1命令告诉numpy推断要制作的子数组的数量;在这种情况下,我们得到51。

下面的代码在我的终端中运行:

#UPDATED CODE
from sklearn.neighbors import KNeighborsRegressor
import numpy as np
import matplotlib.pyplot as plt
N=51
SD=1.15
ME=0
E=np.random.normal(ME, SD, N)
X = np.linspace(-4,4, N, endpoint=True)
X_NEW = X.reshape(-1,1)
Y = X**2 + E
neigh = KNeighborsRegressor(n_neighbors=2)
neigh.fit(X_NEW, Y)
X_eval = np.linspace(0,4,1000)
X_eval = X_eval.reshape(-1,1)
plt.figure()
plt.plot(X_eval,neigh.predict(X_eval), label="regression predictor")
plt.plot(X,Y, 'rs', markersize=12, label="training set")
plt.show()

最新更新