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 相关文章推荐
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Django中几种重定向方法
Apr 28 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
Aug 25 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Pytorch to(device)用法
Jan 08 Python
Python3开发环境搭建详细教程
Jun 18 Python
Django如何批量创建Model
Sep 01 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python装饰器实例大详解
2017/10/25 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
AJAX的全称是什么
2012/11/06 面试题
应届大专生自荐书
2014/06/16 职场文书
小学见习报告
2014/10/31 职场文书
教师教育教学随笔
2015/08/15 职场文书
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
muduo TcpServer模块源码分析
2022/04/26 Redis