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编写的最短路径算法
Mar 25 Python
详解Python当中的字符串和编码
Apr 25 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
python的变量与赋值详细分析
Nov 08 Python
python字符串循环左移
Mar 08 Python
Python threading的使用方法解析
Aug 28 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
keras实现多种分类网络的方式
Jun 11 Python
pytorch实现查看当前学习率
Jun 24 Python
python flask框架快速入门
May 14 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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根据日期显示所在星座的方法
2015/07/13 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
深入了解js原型模式
2019/05/30 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
益达广告词
2014/03/14 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
导游欢送词
2015/01/31 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB