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魔术方法详解
Feb 14 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
python 异常处理总结
Oct 18 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
在python shell中运行python文件的实现
Dec 21 Python
Python面向对象之多态原理与用法案例分析
Dec 30 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
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
JsRender for object语法简介
2014/10/31 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python实现移位加密和解密
2019/03/22 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
销售类个人求职信范文
2013/09/25 职场文书
宝宝周岁宴答谢词
2014/01/26 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
大学生应聘求职信
2014/05/26 职场文书
殡葬服务心得体会
2014/09/11 职场文书
政府会议通知范文
2015/04/15 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js