码迷,mamicode.com
首页 > 编程语言 > 详细

Python 普通最小二乘法(OLS)进行多项式拟合

时间:2018-01-31 20:27:17      阅读:1450      评论:0      收藏:0      [点我收藏+]

标签:nump   for   多项式拟合   cti   数据   info   div   summary   models   

多元函数拟合。如 电视机和收音机价格多销售额的影响,此时自变量有两个。

python 解法:

import numpy as np
import pandas as pd
#import statsmodels.api as sm #方法一
import statsmodels.formula.api as smf #方法二
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv(http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv, index_col=0)
X = df[[TV, radio]]
y = df[sales]

#est = sm.OLS(y, sm.add_constant(X)).fit() #方法一
est = smf.ols(formula=sales ~ TV + radio, data=df).fit() #方法二
y_pred = est.predict(X)

df[sales_pred] = y_pred
print(df)
print(est.summary()) #回归结果
print(est.params) #系数

fig = plt.figure()
ax = fig.add_subplot(111, projection=3d) #ax = Axes3D(fig)
ax.scatter(X[TV], X[radio], y, c=b, marker=o)
ax.scatter(X[TV], X[radio], y_pred, c=r, marker=+)
ax.set_xlabel(X Label)
ax.set_ylabel(Y Label)
ax.set_zlabel(Z Label)
plt.show()

技术分享图片

拟合的各项评估结果和参数都打印出来了,其中结果函数为:

f(sales) = β0 + β1*[TV] + β2*[radio] 

 f(sales)  = 2.9211 + 0.0458 * [TV] + 0.188 * [radio] 

 技术分享图片

图中,sales 方向上,蓝色点为原 sales 实际值,红色点为拟合函数计算出来的值。其实误差并不大,部分数据如下。

 技术分享图片

同样可拟合一元函数;

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv(http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv, index_col=0)
X = df[TV]
y = df[sales]

est = smf.ols(formula=sales ~ TV , data=df).fit()
y_pred = est.predict(X)
print(est.summary())
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(X, y, c=b)
ax.plot(X, y_pred, c=r)
plt.show()

技术分享图片

技术分享图片

 

  

Python 普通最小二乘法(OLS)进行多项式拟合

标签:nump   for   多项式拟合   cti   数据   info   div   summary   models   

原文地址:https://www.cnblogs.com/hzc2012/p/8393821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!