Python 多项式线性回归,我错在哪里?
我正在做一项课程作业,问题是: 在0到9度的训练数据X_序列上编写一个拟合多项式线性回归模型的函数。对于每个模型,计算训练数据和测试数据的R2R2(确定系数)回归分数,并以元组形式返回这两个数组 此函数应返回一个numpy数组元组(r2\U列, r2_检验)。两个数组都应具有形状(10,) 我的代码:` 从sklearn.linear\u模型导入线性回归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
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你总是可以把答案作为解决方案