в чем проблема с моим кодом linreg.predict (), который не дает правильный ответ?

ТАК вопрос, заданный мне, был

Напишите функцию, которая соответствует полиномиальной модели LinearRegression на обучающих данных X_train для степеней 1, 3, 6 и 9. (Используйте PolynomialFeatures в sklearn.preprocessing, чтобы создать полиномиальные функции, а затем подобрать модель линейной регрессии) Для каждой модели найдите 100 предсказанных значений в интервале x = от 0 до 10 (например, np.linspace (0,10,100)) и сохраните их в массиве numpy. Первая строка этого массива должна соответствовать выходным данным модели, обученной на степени 1, второй степени строки 3, третьей степени строки 6 и четвертой степени строки 9.

Так что попробовал решить проблему сам и потерпел неудачу и увидел код GitHub некоторых других людей и был очень похож на меня, но это сработало.

Так в чем разница между моим кодом и кодом другого человека?

Вот базовый код перед моим вопросом

np.random.seed(0)
n = 15
x = np.linspace(0,10,n) + np.random.randn(n)/5
y = np.sin(x)+x/6 + np.random.randn(n)/10


X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=0)

Вот мой подход

pred=np.linspace(0,10,100).reshape(100,1)
k=np.zeros((4,100))

for count,i in enumerate([1,3,6,9]):   
    poly = PolynomialFeatures(degree=i)
    X_poly = poly.fit_transform(X_train.reshape(-1,1))
    linreg = LinearRegression()
    linreg.fit(X_poly,y_train.reshape(-1,1))
    pred = poly.fit_transform(pred.reshape(-1,1))
    t=linreg.predict(pred)
    #print(t)                      #used for debugging
    print("###   ****   ####")     #used for debugging
    k[count,:]=t.reshape(1,-1)    


print(k)

Вот код, который работает

result = np.zeros((4, 100))
for i, degree in enumerate([1, 3, 6, 9]):
    poly = PolynomialFeatures(degree=degree)
    X_poly = poly.fit_transform(X_train.reshape(11,1))
    linreg = LinearRegression().fit(X_poly, y_train)
    y=linreg.predict(poly.fit_transform(np.linspace(0,10,100).reshape(100,1)))
    result[i, :] = y
print(result)

Мой подход получил ошибку

     13     print("###   ****   ####")  
---> 14     k[count,:]=t.reshape(1,-1)
     15 
     16 

ValueError: could not broadcast input array from shape (200) into shape (100)

Пока другой код работал нормально


person Kush Pandya    schedule 06.09.2019    source источник


Ответы (1)


Разница заключается в аргументе за linreg.predict. Вы перезаписываете свою pred переменную результатом poly.fit_transform, что меняет ее форму с (100,1) на (200,2) в первой итерации цикла. Во второй итерации t больше не вписывается в k, что приводит к ошибке, с которой вы столкнулись.

person user7217806    schedule 06.09.2019