Python: ошибка возврата регрессионного фитинга KNN - PullRequest
0 голосов
/ 28 марта 2020

Я работаю над практическими упражнениями по машинному обучению и получаю сообщение об ошибке, когда запускаю следующий код:

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

ошибка в строке соседей. ():

ValueError: Ожидаемый 2D-массив, вместо него получен 1D-массив: array = [все сгенерированные x-значения]. Измените ваши данные, используя array.reshape (-1, 1), если ваши данные имеют одну функцию, или array.reshape (1, -1), если он содержит один образец.

Но подобная подгонка тоже не работает. Я довольно новичок в машинном обучении и python программировании, поэтому я приношу свои извинения, если этот вопрос тривиален, но: что я могу улучшить, чтобы мой код работал? Заранее спасибо!

1 Ответ

0 голосов
/ 28 марта 2020

Важнейшей частью решения этой проблемы является понимание ошибки. Ошибка говорит вам, что вам нужно передать 2-D массив, но вы только передали 1-D массив. Чтобы быть более точным, ваша проблема с X, который действительно должен быть изменен следующим образом:

X_new = X.reshape(-1,1)

reshape(-1,1) будет принимать массив 1-D и убедитесь, что каждый подмассив имеет только 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...