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自动代码解读1.0
Jan 12 Python
简述Python2与Python3的不同点
Jan 21 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
详解Python:面向对象编程
Apr 10 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
Python创建数字列表的示例
Nov 28 Python
python中提高pip install速度
Feb 14 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
python自动点赞功能的实现思路
Feb 26 Python
keras slice layer 层实现方式
Jun 11 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 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 获取远程网页内容的函数
2009/09/08 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
用Python实现KNN分类算法
2017/12/22 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
介绍一下Ruby的多线程处理
2013/02/01 面试题
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
水产养殖学应届生求职信
2013/09/29 职场文书
2013届毕业生求职信范文
2013/11/20 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
主题班会演讲稿
2014/05/22 职场文书
信访维稳工作汇报
2014/10/27 职场文书
婚礼答谢词
2015/01/04 职场文书
纪检监察立案决定书
2015/06/24 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL