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中的字典容器
Apr 14 Python
pyenv命令管理多个Python版本
Mar 26 Python
python将unicode转为str的方法
Jun 21 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
将python安装信息加入注册表的示例
Nov 20 Python
python 读取数据库并绘图的实例
Dec 03 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
Python用SSH连接到网络设备
Feb 18 Python
对Pytorch 中的contiguous理解说明
Mar 03 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屏蔽错误及提示的方法
2020/05/10 PHP
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
对python周期性定时器的示例详解
2019/02/19 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python分布式计算dispy的使用详解
2019/12/22 Python
Python timeit模块的使用实践
2020/01/13 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
党员自我评价分享
2013/12/13 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
浅析Python中的随机采样和概率分布
2021/12/06 Python