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的一些用法分享
Oct 07 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
python3获取当前目录的实现方法
Jul 29 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
python获取对象信息的实例详解
Jul 07 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
再说下636单管机
2021/03/02 无线电
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php删除指定目录的方法
2015/04/03 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
Convert Seconds To Hours
2007/06/16 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python flask实现分页效果
2017/06/27 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
python模拟实现分发扑克牌
2020/04/22 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
信息员培训方案
2014/06/12 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
合作经营协议书范本
2014/09/16 职场文书
运动会报道稿300字
2014/10/02 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python