Python 多项式线性回归,我错在哪里?

Python 多项式线性回归,我错在哪里?,python,machine-learning,scikit-learn,regression,supervised-learning,Python,Machine Learning,Scikit Learn,Regression,Supervised Learning,我正在做一项课程作业,问题是: 在0到9度的训练数据X_序列上编写一个拟合多项式线性回归模型的函数。对于每个模型,计算训练数据和测试数据的R2R2(确定系数)回归分数,并以元组形式返回这两个数组 此函数应返回一个numpy数组元组(r2\U列, r2_检验)。两个数组都应具有形状(10,) 我的代码:` 从sklearn.linear\u模型导入线性回归 from sklearn.preprocessing import PolynomialFeatures from sklearn.metri

我正在做一项课程作业,问题是:

在0到9度的训练数据X_序列上编写一个拟合多项式线性回归模型的函数。对于每个模型,计算训练数据和测试数据的R2R2(确定系数)回归分数,并以元组形式返回这两个数组

此函数应返回一个numpy数组元组(r2\U列, r2_检验)。两个数组都应具有形状(10,)

我的代码:` 从sklearn.linear\u模型导入线性回归

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))
不幸的是,这给了我一个错误的答案,如果我遗漏了什么,请帮助


似乎您正在反转r2_score函数中的参数。它必须是
r2\u分数(y\u真,y\u 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.9194194471769304,0.97578641430682,0.9901823324795082,0.9935250927840416,0.99637545387759,0.99803706256649445]

[-0.4780864173714179,-0.45237104233936676,-0.0685698414991589,0.005331052945740433,0.7300494281871148,0.8770830091614791,0.9214093981415002,0.92021504111139083,0.6324795282222648,-.6452532177847]

在代码中,值有时高于1


顺便说一句,您的新版本代码更清晰,正如您所看到的,我复制粘贴了很多代码:)

您能提供输入和预期输出的示例吗?对我来说,代码看起来不错,但我会在一个函数而不是2个函数中编写它,因为两次拟合模型是没有意义的(此外,您正在测试数据集中进行拟合转换(应该只是使用r2_trainscore中的模型拟合进行转换)是的,我已经编辑了这个问题,请现在查看一下。另外,我对编码还不熟悉,所以请原谅我,我擅长编写像样的代码。啊,现在我看到了我的业余错误,非常感谢,我想放弃投票,但我没有声誉,sry。@sajeera你总是可以把答案作为解决方案