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访问MySQL封装的常用类实例
Nov 11 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
简单谈谈Python面向对象的相关知识
Jun 28 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操作XML作为数据库的类
2010/12/19 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
javascript eval函数深入认识
2009/02/21 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python变量赋值方法(可变与不可变)
2019/01/12 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
Python map及filter函数使用方法解析
2020/08/06 Python
python实现二分查找算法
2020/09/18 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
实习自我鉴定范文
2013/10/30 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
标准单位租车协议书
2014/09/23 职场文书
同意迁入证明模板
2014/10/26 职场文书
暑期家教宣传单
2015/07/14 职场文书