关于numpy.polyfit()与Stats.linregress()方法最小二乘近似拟合斜率对比

 更新时间:2024年04月07日 08:57:07   作者:肖永威  
这篇文章主要介绍了关于numpy.polyfit()与Stats.linregress()方法最小二乘近似拟合斜率对比,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

numpy.polyfit()与Stats.linregress()方法最小二乘近似拟合斜率对比

对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。

而快速且准确地线性回归模型对拟合大型数据集非常重要性。

由于在机器学习中,Scikit-learn 是一个十分流行的 Python 库,因此,人们经常会从这个库调用线性模型来拟合数据。

除此之外,我们还可以使用该库的 pipeline 与 FeatureUnion 功能(如:数据归一化、模型回归系数正则化、将线性模型传递给下游模型),但是一般来看,如果一个数据分析师仅需要一个又快又简单的方法来确定回归系数(或是一些相关的统计学基本结果),那么这并不是最快或最简洁的方法。

接下来,我们研究两个更快更简洁的方法。

1. numpy.polyfit()方法

这是一个非常一般的最小二乘多项式拟合函数,它适用于任何 degree 的数据集与多项式函数(具体由用户来指定),其返回值是一个(最小化方差)回归系数的数组。

对于简单的线性回归而言,你可以把 degree 设为 1。如果你想拟合一个 degree 更高的模型,你也可以通过从线性特征数据中建立多项式特征来完成。

2. Stats.linregress( ) 方法

这是 Scipy 中的统计模块中的一个高度专门化的线性回归函数。

其灵活性相当受限,因为它只对计算两组测量值的最小二乘回归进行优化。

因此,你不能用它拟合一般的线性模型,或者是用它来进行多变量回归分析。

但是,由于该函数的目的是为了执行专门的任务,所以当我们遇到简单的线性回归分析时,这是最快速的方法之一。

除了已拟合的系数和截距项(intercept term)外,它还会返回基本的统计学值如 R² 系数与标准差。

本质上,std_err应该为梯度中表示的每个系数给出一个值。

简单来说,std_err就是告诉您数据的梯度拟合度(数值越高表示精度越低),不是传统统计中的标准差。

3. 两个方法对比

分别随机取10、100、1000、10000组数据对比计算速度。

附代码:

import pandas as pd
import datetime
import numpy as np
import random
from scipy import stats

x =[i for i in range(10)]
y =[j*random.random() + random.randint(2,6) for j in range(10)]

print('start np.polyfit')
now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)
p,V = np.polyfit(x, y, 1)
##std = np.var(y, ddof=1)
#std = np.std(y, ddof=1)
print(p,V)

now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print(slope,intercept)
now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)

总结

polyfit()方法要比linregress()快,特别是单组数据量少时,差距比较大。在做大数据线性回归时,如果单组数据量少于1000,可以多考虑polyfit()方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】

    Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】

    这篇文章主要介绍了Python操作MySQL数据库的两种方式,结合实例形式分析了Python使用pymysql和pandas模块进行mysql数据库的连接、增删改查等操作相关实现技巧,需要的朋友可以参考下
    2019-03-03
  • Python基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例

    本篇文章主要介绍了Python基于百度AI的文字识别的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Django实现网页分页功能

    Django实现网页分页功能

    这篇文章主要介绍了Django实现网页分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • python能做哪些生活有趣的事情

    python能做哪些生活有趣的事情

    在本篇文章里小编给各位分享了关于python能做的生活有趣的事情,有兴趣的朋友们可以学习下。
    2020-09-09
  • OpenAI Function Calling特性示例详解

    OpenAI Function Calling特性示例详解

    这篇文章主要为大家介绍了OpenAI Function Calling特性作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 使用python装饰器计算函数运行时间的实例

    使用python装饰器计算函数运行时间的实例

    下面小编就为大家分享一篇使用python装饰器计算函数运行时间的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python3实现网页版raspberry pi(树莓派)小车控制

    python3实现网页版raspberry pi(树莓派)小车控制

    这篇文章主要为大家详细介绍了python3实现网页版raspberry pi(树莓派)小车控制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 深入浅析NumPy库中的numpy.diag()函数

    深入浅析NumPy库中的numpy.diag()函数

    通过本文的介绍,我们深入了解了NumPy库中numpy.diag()函数的用法和应用,从基本用法到高级特性,再到在线性代数中的应用,我们逐步展示了numpy.diag()在处理对角矩阵和相关问题时的强大功能,需要的朋友可以参考下
    2024-05-05
  • 通过cmd进入python的实例操作

    通过cmd进入python的实例操作

    在本篇内容中小编给大家分享了关于通过cmd怎么进入python的实例操作方法和步骤,有需要的朋友们可以参考下。
    2019-06-06
  • Python异常处理与反射相关问题总结

    Python异常处理与反射相关问题总结

    今天给大家带来的是关于Python的相关知识,文章围绕着Python异常处理与反射展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论