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中nan与inf转为特定数字方法示例
May 11 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Python中new方法的详解
Jan 15 Python
基于python实现百度翻译功能
May 09 Python
python队列Queue的详解
May 10 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python中操作文件的模块的方法总结
Feb 04 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写出自己的BLOG系统 2
2010/04/12 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
js DOM的学习笔记
2011/12/22 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
Python安装Bs4的多种方法
2020/11/28 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
个人自荐信
2013/12/05 职场文书
对祖国的寄语大全
2014/04/11 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
党员转正申请报告
2015/05/15 职场文书
行政诉讼答辩状
2015/05/21 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
为自己工作观后感
2015/06/11 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书