线性回归代码异常求助:模型输出不符及predict报错问题
关于线性回归的两个常见问题解答
嘿,作为编程新手刚接触机器学习,遇到这俩问题太正常啦,我来给你掰扯清楚:
问题1:reg.fit() 输出简化的原因
你提到执行 reg.fit(df[['area']],df.price) 后,实际输出是 LinearRegression() 而非预期的带全参数的版本,这完全不是错误,只是scikit-learn版本差异导致的显示变化:
- 旧版本的scikit-learn会在打印模型实例时显示所有参数(包括默认值),也就是你预期的
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False); - 新版本(大概v0.23之后)做了优化,只显示非默认参数,因为你的模型用的全是默认配置,所以就简化成了
LinearRegression()。
如果你想确认所有参数的取值,可以运行这个命令查看:
print(reg.get_params())
输出会包含所有参数的具体值,能验证模型确实是按默认配置训练的。
问题2:predict() 必须用二维数组的原因
scikit-learn的所有模型预测方法(包括线性回归的predict),输入都要求是二维数组,这是因为模型设计时就支持多特征的场景(比如同时用房屋面积、卧室数量两个特征预测房价):
- 你输入的
3300是一个一维的标量/数组,模型会把它理解成「1个特征,3300个样本」,这和你的数据逻辑(1个样本,1个特征:面积3300)完全不符,所以会报错; - 而
[[3300]]是一个形状为(1, 1)的二维数组,意思是「1个样本,1个特征」,正好匹配模型训练时的输入格式(你训练时用的df[['area']]也是二维的DataFrame,本质就是二维数组)。
举个例子,如果以后你用两个特征(比如area和bedrooms)训练模型,预测时就要这么传参:
reg.predict([[3300, 2]]) # 表示面积3300,卧室2间的样本
内容的提问来源于stack exchange,提问作者Ekta
相关产品推荐
相关产品推荐

