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 中random模块的常用方法总结
Jul 08 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
django允许外部访问的实例讲解
May 14 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
python实现简单颜色识别程序
Feb 19 Python
Python使用Matlab命令过程解析
Jun 04 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
Python装饰器结合递归原理解析
Jul 02 Python
python em算法的实现
Oct 03 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 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和ACCESS写聊天室(七)
2006/10/09 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Javascript 实用小技巧
2010/04/07 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
JS变量及其作用域
2017/03/29 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
Python检测QQ在线状态的方法
2015/05/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
python正则表达式实例代码
2020/03/03 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
大学生最常用的自我评价
2013/12/07 职场文书
我未来的职业规划范文
2014/01/11 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
三下乡个人总结
2015/03/04 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
爱国主义影片观后感
2015/06/18 职场文书
运输公司工作总结
2015/08/11 职场文书