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中的split()函数的使用方法
Apr 07 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
Python中常用的os操作汇总
Nov 05 Python
python uuid生成唯一id或str的最简单案例
Jan 13 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
Protoss建筑一览
2020/03/14 星际争霸
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
python实现自动发送邮件
2018/06/20 Python
Python单元测试简单示例
2018/07/03 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
python实现多进程通信实例分析
2019/09/01 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
Django跨域请求原理及实现代码
2020/11/14 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
质量负责人任命书
2014/06/06 职场文书
政风行风评议整改方案
2014/09/15 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
小学毕业感言200字
2015/07/30 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书