Полиномиальная регрессия со склеарном в Python - PullRequest
0 голосов
/ 07 марта 2020

Я работаю над заданием Coursera,

Вопрос:

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

Эта функция должна возвращать массив numpy с формой (4, 100)

Мой код:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split


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)

X_train=X_train.reshape(-1,1)
X_test=X_test.reshape(-1,1)



def answer_one():


    poly1=PolynomialFeatures(1)
    poly2=PolynomialFeatures(3)
    poly3=PolynomialFeatures(6)
    poly4=PolynomialFeatures(9)



    x_polyte1=poly1.fit_transform(X_test)
    x_polytr1=poly1.fit_transform(X_train)

    x_polyte2=poly2.fit_transform(X_test)
    x_polytr2=poly2.fit_transform(X_train)

    x_polyte3=poly3.fit_transform(X_test)
    x_polytr3=poly3.fit_transform(X_train)

    x_polyte4=poly4.fit_transform(X_test)
    x_polytr4=poly4.fit_transform(X_train)

    model=LinearRegression()

    mo1=model.fit(x_polytr1,y_train)
    mo2=model.fit(x_polytr2,y_train)
    mo3=model.fit(x_polytr3,y_train)
    mo4=model.fit(x_polytr4,y_train)

    pre=np.linspace(0,10,100).reshape(1,100)

    pre1=poly1.fit_transform(pre)
    pre2=poly2.fit_transform(pre)
    pre3=poly3.fit_transform(pre)
    pre4=poly4.fit_transform(pre)

    a=mo1.predict(pre1)
    b=mo2.predict(pre2)
    c=mo3.predict(pre3)
    d=mo4.predict(pre4)

    return np.vstack(a,b,c,d)

Это дает мне ошибку:

ValueError Traceback (последний вызов был последним) из 48 49 возвращает np.vstack (a, b, c, d) ---> 50 answer_one ()

в answer_one () 39 pre1 = poly1. fit_transform (pre) 40 pre2 = poly2.fit_transform (pre) ---> 41 pre3 = poly3.fit_transform (pre) 42 pre4 = poly4.fit_transform (pre) 43

~ \ Anaconda3 \ lib \ site- packages \ sklearn \ base.py в fit_transform (self, X, y, ** fit_params) 551, если y равен None: 552 # метод соответствия arity 1 (преобразование без контроля) -> 553, возвращающий self.fit (X, ** fit_params) .transform (X) 554 else: 555 # метод подгонки arity 2 (контролируемое преобразование)

~ \ Anaconda3 \ lib \ site-packages \ sklearn \ preprocessing \ data.py i n transform (self, X) 1544 else: 1545
XP = np.empty ((n_samples, self.n_output_features_), -> 1546 dtype = X.dtype, order = self.order) 1547 для i, прочесать перечислить (комбинации): 1548
XP [:, i] = X [:, comb] .prod (1)

ValueError: массив слишком большой; arr.size * arr.dtype.itemsize больше максимально возможного размера.

ps: прошу прощения за мой уродливый код, поскольку я только начинающий программировать, я пытался написать для l oop, но с треском провалился . Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...