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


Posted in Python onDecember 29, 2018

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

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()

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

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

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

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

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

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

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

同样可拟合一元函数;

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)进行多项式拟合的方法

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

Ridge Regression:(岭回归交叉验证)

岭回归(ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。通常岭回归方程的R平方值会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归,在存在共线性问题和病态数据偏多的研究中有较大的实用价值。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model
from mpl_toolkits.mplot3d import Axes3D
 
df = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv', index_col=0)
X = np.asarray(df[['TV', 'radio']])
y = np.asarray(df['sales'])
 
clf = linear_model.RidgeCV(alphas=[i+1 for i in np.arange(200.0)]).fit(X, y)
y_pred = clf.predict(X)
df['sales_pred'] = y_pred
print(df)
print("alpha=%s, 常数=%.2f, 系数=%s" % (clf.alpha_ ,clf.intercept_,clf.coef_))
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(df['TV'], df['radio'], y, c='b', marker='o')
ax.scatter(df['TV'], df['radio'], y_pred, c='r', marker='+')
ax.set_xlabel('TV')
ax.set_ylabel('radio')
ax.set_zlabel('sales')
plt.show()

输出结果:alpha=150.0, 常数=2.94, 系数=[ 0.04575621 0.18735312]

以上这篇Python 普通最小二乘法(OLS)进行多项式拟合的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的装饰器用法详解
Jan 14 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python实现统计代码行的方法分析
Jul 12 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
python 调用js的四种方式
Apr 11 Python
Python实现高斯函数的三维显示方法
Dec 29 #Python
Python3 SSH远程连接服务器的方法示例
Dec 29 #Python
使用python绘制3维正态分布图的方法
Dec 29 #Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 #Python
对python指数、幂数拟合curve_fit详解
Dec 29 #Python
对python实现二维函数高次拟合的示例详解
Dec 29 #Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 #Python
You might like
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python异常的检测和处理方法
2018/10/26 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
用Python配平化学方程式的方法
2019/07/20 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
思想汇报格式
2014/01/05 职场文书
文秘自荐信
2014/06/28 职场文书
团结主题班会
2015/08/13 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python