使用Scikit-learn LinearRegression报错:__init__()参数错误
TypeError: init() takes 1 positional argument but 3 were given 问题解决
你的代码
x = df.TV y= df.Sales from sklearn.linear_model import LinearRegression LinearRegression(x,y)
报错信息
TypeError Traceback (most recent call last) <ipython-input-12-ee125dd306e2> in <module>() ----> 1 LinearRegression(x,y) TypeError: __init__() takes 1 positional argument but 3 were given
错误原因
- LinearRegression构造函数不接收特征与标签参数:
LinearRegression()是模型的初始化方法,仅用于设置模型超参数(比如是否拟合截距fit_intercept等),根本不需要传入x和y。你直接把训练数据传给构造函数,属于传参逻辑错误。 - 特征输入维度不符合要求:即便后续调用训练方法,sklearn要求特征输入必须是二维特征矩阵,而
df.TV返回的是一维Series,无法被模型识别为合法的特征输入。
修正后的代码
from sklearn.linear_model import LinearRegression # 假设df已正确加载数据 x = df[['TV']] # 用双层方括号将一维Series转为二维DataFrame y = df.Sales # 1. 先实例化模型对象 model = LinearRegression() # 2. 调用fit方法传入训练数据完成模型训练 model.fit(x, y)
关键说明
- sklearn模型的标准使用流程是:实例化模型 → 调用fit方法传入训练数据,切勿把数据直接传给构造函数。
- 特征维度要求:所有sklearn监督学习模型的特征输入都需要是
(样本数量, 特征数量)的二维结构,使用df[['列名']]是快速将单列数据转为二维结构的方法。
内容的提问来源于stack exchange,提问作者slopochill
相关产品推荐
相关产品推荐

