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 相关文章推荐
用C++封装MySQL的API的教程
May 06 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
浅谈python中requests模块导入的问题
May 18 Python
python读写LMDB文件的方法
Jul 02 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python绘制随机网络图形示例
Nov 21 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
Python连续赋值需要注意的一些问题
Jun 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 输出简单动态WAP页面
2009/06/09 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
学习php中的正则表达式
2014/08/17 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
Python struct.unpack
2008/09/06 Python
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
用Python编程实现语音控制电脑
2014/04/01 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
python如何支持并发方法详解
2020/07/25 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
经典团队口号
2014/06/06 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
java版 联机五子棋游戏
2022/05/04 Java/Android