我必须用python创建一个回归模型。
能源额定值与。价格,看看能源评级是否取决于价格。

这里是下面的数据集和代码,
import statsmodels.formula.api as smf
# Initialise and fit linear regression model using `statsmodels`
model = smf.ols('price ~ energyrating', data=df)
model = model.fit()我得到的参数是一个负的,也许这可能是糟糕的图形的原因,但不确定如何改善这一点。
model.params
#price=2.004943e+06 + (-.913381e+05)*energyrating
Intercept 2.004943e+06
energyrating -3.913381e+05
dtype: float64并创建最终的模型,但没有成功,
# Predict values
pred = model.predict()
# Plot regression against actual data
plt.figure(figsize=(12, 6))
plt.plot(df['energyrating'], df['price'], 'o') # scatter plot showing actual data
plt.plot(df['energyrating'], pred, 'r', linewidth=2) # regression line
plt.xlabel('Energy ratings')
plt.ylabel('Price')
plt.title('Energy ratings Vs. Price')
plt.show()

我该如何改进这一点?是数据不稳定还是我遗漏了什么逻辑错误?
提前感谢
编辑:
energy rating的频率图

这就是能源额定值的变化方式。
发布于 2021-05-17 10:48:18
我猜一个简单的linear regression不能从您给出的图中捕捉到price和energyrating之间的关系,因为price不会随着energyrating的增加而单调地减少或增加。我建议您包括energyrating的二次项,即添加一个新的energyrating * energyrating列,或者其他您认为合理的高阶转换。
如果你被允许使用除linear regression之外的其他模型,我建议你只需对每个energyrating(它与你的曲线图是离散的) price求平均,然后绘制曲线,我认为这样会更好。
例如在熊猫中:
avg = df.groupby("energyrating")['price'].mean()
avg.plot()https://stackoverflow.com/questions/67563010
复制相似问题