Python:KNN回归拟合returns错误
Python: KNN regression fitting returns error
我正在做机器学习练习,当我 运行 以下代码时,我总是收到错误消息:
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:应为二维数组,得到的是一维数组:
array=[所有生成的 x 值]。
如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 array.reshape(1, -1) 重塑您的数据。
但是这样装也不行。我对机器学习和 python 编程还很陌生,所以如果这个问题微不足道,我深表歉意但是:我可以改进什么来制作我的代码 运行?
提前致谢!
解决这个问题的关键部分是理解错误。错误是告诉你你需要传递一个二维数组,但你只传递了一个一维数组。更明确地说,你的问题是X
,它确实需要这样重塑:
X_new = X.reshape(-1,1)
reshape(-1,1)
将采用一维数组并确保每个子数组中只有 1 个元素。 -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()
我正在做机器学习练习,当我 运行 以下代码时,我总是收到错误消息:
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:应为二维数组,得到的是一维数组: array=[所有生成的 x 值]。 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 array.reshape(1, -1) 重塑您的数据。
但是这样装也不行。我对机器学习和 python 编程还很陌生,所以如果这个问题微不足道,我深表歉意但是:我可以改进什么来制作我的代码 运行? 提前致谢!
解决这个问题的关键部分是理解错误。错误是告诉你你需要传递一个二维数组,但你只传递了一个一维数组。更明确地说,你的问题是X
,它确实需要这样重塑:
X_new = X.reshape(-1,1)
reshape(-1,1)
将采用一维数组并确保每个子数组中只有 1 个元素。 -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()