Полиномиальная линейная регрессия, где я иду не так? - PullRequest
1 голос
/ 08 марта 2020

Я выполняю задание Coursera, и вот вопрос:

Напишите функцию, которая соответствует полиномиальной модели LinearRegression на тренировочных данных X_train для степеней от 0 до 9. Для каждой модели вычислите R2R2 (коэффициент детерминации) регрессионный балл на тренировочных данных, а также на тестовых данных и возвращает оба этих массива в кортеж.

Эта функция должна возвращать один кортеж из numpy массивов (r2_train, r2_test ). Оба массива должны иметь форму (10,)

МОЙ код: `из sklearn.linear_model import LinearRegression

from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics.regression import r2_score


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)
def answer_two():

def answer_two():
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics.regression import r2_score

# Your code here


def r2_traintest(deg):  

    poly=PolynomialFeatures(deg)
    model=LinearRegression()
    X_f=poly.fit_transform(X_train.reshape(-1,1))

    a=model.fit(X_f,y_train)


    dee=a.predict(poly.fit_transform(X_train.reshape(-1,1)))

    deez=r2_score(dee,y_train)

    gin=a.predict(poly.transform(X_test.reshape(-1,1)))

    mint=r2_score(gin,y_test)

    return deez,mint


lst=[]
lsts=[]

for x in range(0,10,1):

    lst.append(r2_traintest(x)[0])

    lsts.append(r2_traintest(x)[1])


return (np.array(lst),np.array(lsts))

к сожалению, это дает мне неправильный ответ, Am Я что-то упустил, пожалуйста, помогите.

1 Ответ

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

Кажется, что вы инвертируете аргументы в функции r2_score. Это должно быть r2_score(y_true, y_pred)

Вот мой код:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics.regression import r2_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

def fit_poly(deg):
    poly = PolynomialFeatures(deg)
    model = LinearRegression()
    X_poly = poly.fit_transform(X_train.reshape(-1, 1))
    model.fit(X_poly, y_train)

    y_pred_train = model.predict(poly.fit_transform(X_train.reshape(-1, 1)))
    r2_train = r2_score(y_train, y_pred_train)

    y_pred_test = model.predict(poly.transform(X_test.reshape(-1, 1)))
    r2_test = r2_score(y_test, y_pred_test)

    return r2_train, r2_test


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)

lst=[]
lsts=[]

for x in range(0,10,1):
    lst.append(fit_poly(x)[0])
    lsts.append(fit_poly(x)[1])

print(lst, lsts)

и результаты:

[0,0, 0,4292457781234663, 0,45109980444082465, 0,5871995368779847, 0,91941944717694 , +0,97578641430682, +0,9901823324795082, +0,9935250927840416, 0,996375453877599, 0,9980370625664945]

[- 0,4780864173714179, -0,45237104233936676, -0,0685698414991589, +0,005331052945740433, +0,7300494281871148, +0,8770830091614791, +0,9214093981415002, +0,9202150411139083, +0,6324795282222648, -0,645253216177847]

* * * 1 013 1014 * С вашим кодом значения были когда-то выше 1.

Кстати, ваша новая версия кода более понятна, как вы можете видеть, я скопировал многие из них:)

...